
:root{
  --ink:#12211D; --ink2:#43554F; --ink3:#7C8D87;
  --paper:#EDF0EC; --surface:#FFFFFF; --surface2:#F5F8F4;
  --line:#DCE3DE; --line2:#C3CFC8;
  --primary:#0F6B5C; --primary-1:#E2F0EB; --primary-2:#C4DFD6;
  --amber:#C8862B; --amber-1:#FAEFD9;
  --done:#2E7D4F; --done-1:#E3F1E7;
  --danger:#B23F33; --danger-1:#F9E7E4;
  --sh:0 20px 60px rgba(18,33,29,.20);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0}
body{
  background:#D9E0DB; min-height:100vh; display:flex; align-items:center; justify-content:center;
  padding:26px; font-family:"MiSans","Noto Sans CJK SC",system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink);
}
.stage{display:flex;flex-direction:column;gap:16px;align-items:center}
.stage-head{
  width:390px;display:flex;flex-direction:column;gap:10px;
}
.stage-head h1{font-size:15px;margin:0;letter-spacing:.3px}
.stage-head p{font-size:12px;color:#4C5B56;margin:0;line-height:1.6}
.jump{display:flex;flex-wrap:wrap;gap:6px}
.jump button{
  font:inherit;font-size:11.5px;padding:5px 10px;border-radius:999px;cursor:pointer;
  border:1px solid #B9C6C0;background:#EAF0EC;color:#2A3A35;transition:.15s;
}
.jump button:hover{background:#DCE6E0}
.jump button.on{background:var(--primary);border-color:var(--primary);color:#fff}

/* ---------- 手机壳 ---------- */
.phone{
  width:390px;height:844px;position:relative;overflow:hidden;
  background:var(--paper);border:9px solid #111A17;border-radius:44px;box-shadow:var(--sh);
}
.screen{position:absolute;inset:0;display:none;flex-direction:column;background:var(--paper)}
.screen.on{display:flex}

/* ---------- 状态栏 ---------- */
.sbar{height:44px;flex:none;display:flex;align-items:flex-end;justify-content:space-between;padding:0 22px 6px;font-size:12.5px;font-weight:600;color:var(--ink);letter-spacing:.2px}
.sbar .right{display:flex;align-items:center;gap:5px}
.bars{display:flex;align-items:flex-end;gap:2px;height:10px}
.bars i{width:3px;background:var(--ink);border-radius:1px;display:block}
.bars i:nth-child(1){height:4px}.bars i:nth-child(2){height:6px}.bars i:nth-child(3){height:8px}.bars i:nth-child(4){height:10px}
.batt{width:22px;height:11px;border:1.4px solid var(--ink);border-radius:3px;position:relative}
.batt::after{content:"";position:absolute;right:-3.5px;top:3px;width:2px;height:5px;background:var(--ink);border-radius:0 1px 1px 0}
.batt i{position:absolute;inset:1.6px;width:60%;background:var(--ink);border-radius:1px;display:block}

/* ---------- 顶栏 ---------- */
.appbar{
  flex:none;padding:4px 16px 12px;display:flex;align-items:center;gap:10px;background:var(--paper);
}
.appbar .tt{flex:1;min-width:0}
.appbar h2{font-size:18px;margin:0;letter-spacing:.4px;font-weight:700}
.appbar .sub{font-size:11.5px;color:var(--ink3);margin-top:2px;letter-spacing:.2px}
.iconbtn{
  width:34px;height:34px;flex:none;border-radius:11px;border:1px solid var(--line2);background:var(--surface);
  display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ink2)
}
.iconbtn svg{width:17px;height:17px}
.ava{width:34px;height:34px;border-radius:11px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex:none}

/* ---------- 滚动区 ---------- */
.body{flex:1;overflow-y:auto;padding:0 16px 108px;scrollbar-width:none}
.body::-webkit-scrollbar{display:none}
.sec{margin-bottom:14px}
.sechd{display:flex;align-items:baseline;justify-content:space-between;margin:16px 0 8px}
.sechd h3{font-size:12px;margin:0;color:var(--ink3);letter-spacing:1.1px;font-weight:700}
.sechd .lnk{font-size:12px;color:var(--primary);font-weight:600}

/* ---------- 卡片 ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px}
.card+.card{margin-top:10px}
.row{display:flex;align-items:center;gap:10px}
.grow{flex:1;min-width:0}

/* 进度总览 */
.overview{background:linear-gradient(160deg,#0F6B5C 0%,#0B5548 100%);color:#fff;border:0;padding:16px}
.overview .top{display:flex;align-items:flex-start;justify-content:space-between}
.overview .lbl{font-size:11.5px;opacity:.82;letter-spacing:.6px}
.overview .big{font-size:34px;font-weight:700;line-height:1.05;margin-top:6px;font-variant-numeric:tabular-nums}
.overview .big small{font-size:14px;font-weight:500;opacity:.8;margin-left:3px}
.overview .ring{width:54px;height:54px;flex:none;position:relative}
.overview .ring span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700}
.pbar{height:7px;border-radius:4px;background:rgba(255,255,255,.24);overflow:hidden;margin-top:14px}
.pbar i{display:block;height:100%;border-radius:4px;background:#F0C05A}
.overview .foot{display:flex;justify-content:space-between;margin-top:9px;font-size:11.5px;opacity:.9}

/* 搜索 */
.search{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:0 12px;height:44px}
.search input{border:0;background:none;outline:0;font:inherit;font-size:14px;flex:1;color:var(--ink)}
.search input::placeholder{color:var(--ink3)}
.search svg{width:16px;height:16px;color:var(--ink3);flex:none}

/* 筛选片 */
.chips{display:flex;gap:7px;overflow-x:auto;padding:10px 0 2px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;font-size:12.5px;padding:7px 13px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);color:var(--ink2);font-weight:600;cursor:pointer;white-space:nowrap}
.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}

/* 设备卡 */
.eq{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:13px 14px;margin-bottom:10px;position:relative;cursor:pointer;transition:.15s}
.eq:active{transform:scale(.994)}
.eq.st-done{background:var(--surface2)}
.eq .tit{display:flex;align-items:center;gap:8px}
.eq .code{font-size:17px;font-weight:700;letter-spacing:.6px;font-variant-numeric:tabular-nums}
.tag{font-size:10.5px;font-weight:700;padding:2.5px 7px;border-radius:6px;letter-spacing:.4px}
.tag.t-amber{background:var(--amber-1);color:var(--amber)}
.tag.t-done{background:var(--done-1);color:var(--done)}
.tag.t-gray{background:#E9EEEA;color:#5D6E68}
.eq .meta{font-size:12px;color:var(--ink3);margin-top:7px;display:flex;gap:10px;flex-wrap:wrap}
.eq .meta b{color:var(--ink2);font-weight:600;font-variant-numeric:tabular-nums}
.eq .bar{height:5px;border-radius:3px;background:#E7ECE8;margin-top:11px;overflow:hidden}
.eq .bar i{display:block;height:100%;background:var(--primary);border-radius:3px}
.eq.st-done .bar i{background:var(--done)}
.eq .dots{display:flex;gap:4px;margin-top:10px}
.eq .dots i{width:16px;height:4px;border-radius:2px;background:#DDE4DF;display:block}
.eq .dots i.ok{background:var(--primary)}
.eq .note{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--amber);margin-top:9px}
.eq .note svg{width:12px;height:12px}

/* 位置行 */
.pos{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.pos:last-child{border-bottom:0}
.pos .idx{width:26px;height:26px;flex:none;border-radius:8px;background:var(--surface2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;color:var(--ink3);font-variant-numeric:tabular-nums}
.pos.done .idx{background:var(--done-1);border-color:#BEDDCA;color:var(--done)}
.pos .nm{font-size:14px;font-weight:600;letter-spacing:.2px}
.pos .nm em{font-style:normal;color:var(--ink3);font-weight:500}
.pos .vals{font-size:11.5px;color:var(--ink2);margin-top:4px;font-variant-numeric:tabular-nums;letter-spacing:.3px}
.pos .vals s{color:var(--line2);text-decoration:none}
.pos .ts{color:var(--ink3);font-size:10.5px;letter-spacing:.2px}
.ts-now{color:var(--done)!important}
.pos .st{font-size:10.5px;font-weight:700;padding:2.5px 7px;border-radius:6px;flex:none}

/* 分段切换 */
.seg{display:flex;background:#E6ECE7;border-radius:12px;padding:3px;gap:3px}
.seg button{flex:1;border:0;background:none;font:inherit;font-size:13px;font-weight:600;color:var(--ink2);padding:9px 0;border-radius:9px;cursor:pointer}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(18,33,29,.12)}
.seg button.on.done{color:var(--done)}

/* 面包屑 */
.crumb{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink3);margin-bottom:12px}
.crumb b{color:var(--primary);font-weight:700}
.crumb svg{width:11px;height:11px}

/* 测点输入 */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pt{display:block}
.pt span{font-size:11.5px;color:var(--ink3);letter-spacing:.6px;display:block;margin-bottom:5px;font-weight:600}
.num{
  width:100%;height:60px;border:1.5px solid var(--line);border-radius:13px;background:var(--surface);
  font:inherit;font-size:24px;font-weight:700;text-align:center;letter-spacing:1px;color:var(--ink);
  font-variant-numeric:tabular-nums;outline:0;transition:.15s;
}
.num:focus{border-color:var(--primary);background:#FBFDFC;box-shadow:0 0 0 3px var(--primary-1)}
.num.empty{color:var(--line2)}
.hintline{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink3);margin-top:10px}
.hintline svg{width:13px;height:13px;flex:none}

/* 备注 */
.txta{width:100%;min-height:74px;border:1px solid var(--line);border-radius:13px;background:var(--surface);font:inherit;font-size:13.5px;padding:11px 12px;outline:0;resize:none;line-height:1.6;color:var(--ink)}
.txta::placeholder{color:var(--ink3)}

/* 底部固定按钮 */
.footbar{position:absolute;left:0;right:0;bottom:0;padding:12px 16px calc(14px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(237,240,236,0) 0%,var(--paper) 30%)}
.btn{width:100%;height:52px;border:0;border-radius:15px;background:var(--primary);color:#fff;font:inherit;font-size:15.5px;font-weight:700;letter-spacing:.6px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px}
.btn.ghost{background:var(--surface);color:var(--ink);border:1.5px solid var(--line2)}
.btn.half{flex:1;width:auto}
.btn svg{width:17px;height:17px}
.foot2{display:flex;gap:10px}

/* 底部标签栏 */
.tabbar{
  flex:none;position:absolute;left:0;right:0;bottom:0;height:calc(64px + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.94);backdrop-filter:blur(12px);border-top:1px solid var(--line);
  display:flex;padding-bottom:env(safe-area-inset-bottom);
}
.tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--ink3);font-size:10.5px;font-weight:600;text-decoration:none;letter-spacing:.4px;cursor:pointer}
.tabbar a svg{width:21px;height:21px}
.tabbar a.on{color:var(--primary)}

/* 悬浮按钮 */
.fab{position:absolute;right:16px;bottom:calc(84px + env(safe-area-inset-bottom));height:48px;padding:0 18px 0 14px;border-radius:26px;border:0;background:var(--ink);color:#fff;font:inherit;font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px;box-shadow:0 10px 24px rgba(18,33,29,.3);cursor:pointer}
.fab svg{width:17px;height:17px}

/* 上传区 */
.drop{border:1.5px dashed var(--line2);border-radius:16px;background:var(--surface2);padding:26px 16px;text-align:center}
.drop .ic{width:44px;height:44px;margin:0 auto 10px;border-radius:14px;background:var(--primary-1);display:flex;align-items:center;justify-content:center;color:var(--primary)}
.drop .ic svg{width:22px;height:22px}
.drop b{font-size:14px;display:block}
.drop small{font-size:11.5px;color:var(--ink3);display:block;margin-top:5px;line-height:1.6}

/* 小表格 */
.mini{width:100%;border-collapse:collapse;font-size:11.5px;font-variant-numeric:tabular-nums}
.mini th{text-align:left;color:var(--ink3);font-weight:600;padding:7px 4px;border-bottom:1px solid var(--line);font-size:10.5px;letter-spacing:.2px;white-space:nowrap}
.mini td{padding:8px 4px;border-bottom:1px solid var(--line);color:var(--ink2);white-space:nowrap;font-size:11px}
.mini tr:last-child td{border-bottom:0}
.mini td b{color:var(--ink)}
.tblwrap{overflow-x:auto}

/* 列表行（设置/信息） */
.li{display:flex;align-items:center;gap:10px;padding:13px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.li:last-child{border-bottom:0}
.li .k{color:var(--ink3);width:76px;flex:none;font-size:12.5px}
.li .v{flex:1;font-weight:600;text-align:right}
.li .v.dim{font-weight:500;color:var(--ink3)}
.li svg{width:15px;height:15px;color:var(--line2)}
.sw{width:40px;height:24px;border-radius:12px;background:#D6DED9;border:0;position:relative;cursor:pointer;flex:none;transition:.18s}
.sw::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.18s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.sw.on{background:var(--primary)}
.sw.on::after{left:19px}
.del{width:28px;height:28px;border:0;background:none;color:#9DABA5;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;border-radius:8px}
.del:hover{color:var(--danger)}
.del svg{width:16px;height:16px}

/* 统计小格 */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.stat{background:var(--surface2);border-radius:12px;padding:11px 10px}
.stat .n{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.5px}
.stat .k{font-size:11px;color:var(--ink3);margin-top:3px}
.stat.a .n{color:var(--amber)}
.stat.g .n{color:var(--done)}

/* 提示条 */
.tip{display:flex;gap:9px;background:var(--amber-1);border:1px solid #EAD6A8;border-radius:12px;padding:10px 12px;font-size:12px;color:#7A5518;line-height:1.6}
.tip svg{width:15px;height:15px;flex:none;margin-top:1px}
.tip.blue{background:var(--primary-1);border-color:#C6DED4;color:#0B5347}

/* 步进器 */
.step{display:flex;align-items:center;gap:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface)}
.step button{width:44px;height:42px;border:0;background:var(--surface);font:inherit;font-size:20px;color:var(--ink2);cursor:pointer}
.step span{flex:1;text-align:center;font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}

/* 桌面端说明条在窄屏隐藏 */
@media (max-width:520px){ .stage-head{display:none} body{padding:0;background:var(--paper)} .phone{border:0;border-radius:0;box-shadow:none} }


/* ================= 真实应用：铺满手机屏幕 ================= */
html,body{height:100%}
body{display:block;padding:0;margin:0;background:#DDE3DF;overflow:hidden}
.app{width:100%;max-width:430px;height:var(--app-h, 100dvh);margin:0 auto;position:relative;
     overflow:hidden;background:var(--paper);display:flex;flex-direction:column;
     transition:height .12s ease-out}
.screen{position:absolute;inset:0;display:none;flex-direction:column;background:var(--paper)}
.screen.on{display:flex}
@media (min-width:431px){ .app{box-shadow:0 0 0 1px var(--line);} }
/* 加载/空态 */
.skel{padding:22px 0;text-align:center;color:var(--ink3);font-size:12.5px}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:96px;background:var(--ink);color:#fff;
       font-size:13px;padding:10px 16px;border-radius:12px;opacity:0;pointer-events:none;transition:.2s;z-index:99}
.toast.show{opacity:1}
.empty{padding:24px 0;text-align:center;color:var(--ink3);font-size:12.5px;line-height:1.9}

/* ================= 真实应用补充：链接与按钮复位 ================= */
a{color:inherit;text-decoration:none}
a.li{display:flex;align-items:center;gap:10px;padding:13px 0;border-bottom:1px solid var(--line);cursor:pointer}
a.li:last-child{border-bottom:0}
a.li:active{opacity:.7}
a.btn{text-decoration:none}
.iconbtn{text-decoration:none}
.pos .nm{line-height:1.35}
@media (display-mode: standalone){ .sbar{display:none} }

/* ================= 全屏 / 添加到主屏幕 提示 ================= */
.addhint{position:fixed;left:12px;right:12px;bottom:calc(150px + env(safe-area-inset-bottom));max-width:406px;margin:0 auto;
  background:var(--surface);border:1px solid var(--line2);border-radius:14px;box-shadow:0 12px 30px rgba(18,33,29,.18);
  padding:12px;display:none;gap:10px;align-items:flex-start;z-index:98}
.addhint.show{display:flex}
.addhint .ah-ic{width:34px;height:34px;flex:none;border-radius:10px;background:var(--primary-1);color:var(--primary);
  display:flex;align-items:center;justify-content:center}
.addhint .ah-ic svg{width:18px;height:18px}
.addhint .ah-body{flex:1;min-width:0}
.addhint b{font-size:13px;display:block;margin-bottom:3px}
.addhint span{font-size:11.5px;color:var(--ink3);line-height:1.6;display:block}
.addhint .ah-close{flex:none;align-self:center;border:1px solid var(--line2);background:var(--surface2);color:var(--ink2);
  font:inherit;font-size:12px;font-weight:600;padding:7px 10px;border-radius:9px;cursor:pointer}
@media (display-mode: standalone){ .addhint{display:none!important} }

/* 真机浏览器里不要再画一条假的系统状态栏（会和手机自己的重复） */
.sbar{display:none!important}
.appbar{padding-top:max(10px, env(safe-area-inset-top))}

/* ================= 新增设备弹层 ================= */
.sheet{position:fixed;inset:0;background:rgba(18,33,29,.42);display:none;z-index:100;align-items:flex-end;justify-content:center}
.sheet.show{display:flex}
.sheet-card{width:100%;max-width:430px;background:var(--paper);border-radius:20px 20px 0 0;
  padding:16px 16px calc(18px + env(safe-area-inset-bottom));box-shadow:0 -10px 30px rgba(0,0,0,.22);
  animation:sheetUp .18s ease-out}
@keyframes sheetUp{from{transform:translateY(18px);opacity:.6}to{transform:translateY(0);opacity:1}}
.sheet-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.sheet-hd b{font-size:16px;letter-spacing:.4px}

/* ================= 导入/导出改成底部 tab 切换（无返回箭头） ================= */
.footbar.above-tabs{bottom:calc(64px + env(safe-area-inset-bottom))}
.screen.has-tabs .body{padding-bottom:196px}

/* 筛选分段里的计数 */
.seg button span{font-size:11px;opacity:.65;margin-left:2px;font-variant-numeric:tabular-nums}
.seg button.on span{opacity:.9}

/* ================= 设备检测数据：页内编辑卡片 ================= */
.pcard{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:10px 10px 9px;margin-bottom:8px}
.pcard.done{background:var(--surface2)}
.pcard.has-dirty{border-color:#E3C48A;box-shadow:0 0 0 3px var(--amber-1)}
.ph{display:flex;align-items:center;gap:8px}
.pname{font-size:14.5px;font-weight:700;letter-spacing:.2px;line-height:1.3;flex:none;max-width:50%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pmeta{flex:1;min-width:0;font-size:10.5px;color:var(--ink3);margin-top:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pst{border:0;font:inherit;font-size:10.5px;font-weight:700;padding:3px 8px;border-radius:6px;
  background:#E9EEEA;color:#5D6E68;cursor:pointer;flex:none;margin-top:1px}
.pst.warn{background:var(--amber-1);color:var(--amber)}
.pst.on{background:var(--done-1);color:var(--done)}
.pdel{border:0;background:none;color:#B4C0BA;font-size:14px;width:24px;height:24px;border-radius:7px;
  cursor:pointer;flex:none;line-height:1;padding:0;margin-top:0}
.pdel:active{background:var(--danger-1);color:var(--danger)}
.pvals{display:grid;grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:6px;margin-top:8px}
.pc{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0}
.pc .num{height:42px;font-size:17px;border-radius:9px;letter-spacing:.3px;padding:0 4px}
.pc.dirty .num{border-color:#E3B568;background:#FFFDF6;box-shadow:0 0 0 3px var(--amber-1)}
.pct{font-size:9px;color:var(--ink3);font-variant-numeric:tabular-nums;letter-spacing:.2px}
.pc.dirty .pct{color:var(--amber);font-weight:700}
.premark{margin-top:7px;width:100%;border:1px solid var(--line);border-radius:9px;background:var(--surface2);
  font:inherit;font-size:11.5px;padding:7px 10px;outline:0;color:var(--ink)}
.premark:focus{border-color:var(--primary);background:#fff}
.addpos{width:100%;height:46px;border:1.5px dashed var(--line2);background:transparent;color:var(--primary);
  border-radius:14px;font:inherit;font-size:13.5px;font-weight:700;display:flex;align-items:center;
  justify-content:center;gap:6px;cursor:pointer;margin-bottom:2px}
.addpos svg{width:16px;height:16px}
.addpos:active{background:var(--primary-1)}
#saveBar .btn{height:50px}

/* 弹层时隐藏底部动作条；弹层层级抬高 */
.sheet{z-index:200}
#app.sheet-open .footbar{visibility:hidden}

/* 测点格：省小数点预览 + 「下一格」按钮 */
.pc{position:relative}
.pct{padding-right:20px;display:inline-block;max-width:100%}
.pct.convert{color:var(--amber);font-weight:700;font-size:10px}
.pnext{position:absolute;right:-3px;bottom:-1px;width:24px;height:20px;border:0;border-radius:6px;
  background:transparent;color:#C2CEC8;font:inherit;font-size:15px;line-height:1;padding:0;cursor:pointer;
  opacity:.55;transition:opacity .15s}
.pc:focus-within .pnext{opacity:1;color:var(--primary)}
.pnext:active{background:var(--primary-1);color:var(--primary)}
.pc.dirty .pnext{color:var(--amber)}

/* 测点格：时间居中、› 不压字 */
.pc{align-items:stretch}
.pc .num{width:100%}
.pct{text-align:center;padding-right:0;padding-left:0;position:relative}
.pnext{right:0;bottom:-2px;width:18px;height:18px;font-size:13px;opacity:.5}

/* ================= 装置切换 ================= */
.chip .cnt{font-size:10.5px;opacity:.55;margin-left:3px;font-variant-numeric:tabular-nums}
.chip.on .cnt{opacity:.85}
.chip.add{color:var(--primary);border-style:dashed;border-color:#A9CFC4;font-weight:700}
.tag.t-unit{background:var(--primary-1);color:var(--primary)}
.mini-btn{border:1px solid var(--line2);background:var(--surface2);color:var(--ink2);font:inherit;font-size:11.5px;
  font-weight:600;padding:4px 9px;border-radius:8px;cursor:pointer;flex:none}
.mini-btn:active{background:var(--primary-1);color:var(--primary)}

/* ==========================================================================
   手机屏幕自适应层（320 ~ 430+ 宽，含刘海/挖孔、横屏）
   目的：不绑死某个机型，靠 clamp() 与少量断点让留白、字号、按钮大小跟着屏宽变
   ========================================================================== */
:root{
  --pad-x: clamp(12px, 4vw, 18px);          /* 页面左右留白 */
  --fs-13: clamp(12.5px, 3.35vw, 13.5px);
  --fs-14: clamp(13px, 3.6vw, 14.5px);
}

/* 不出现整页横向滚动 / 下拉回弹怪象 */
html,body{overscroll-behavior-y:none;-webkit-text-size-adjust:100%}
body{overflow-x:hidden}

.body{padding-left:var(--pad-x);padding-right:var(--pad-x)}
.appbar{padding-left:var(--pad-x);padding-right:var(--pad-x);padding-top:max(8px, env(safe-area-inset-top))}
.footbar{padding-left:var(--pad-x);padding-right:var(--pad-x)}

/* 触控目标不小于 34px（手指点得稳） */
.iconbtn{width:38px;height:38px}
.chip{min-height:34px;display:inline-flex;align-items:center;font-size:var(--fs-13)}
.mini-btn{min-height:30px}
.pnext{width:32px;height:26px;right:-4px;bottom:-4px;display:flex;align-items:center;justify-content:center}

/* 字号随屏宽轻微浮动 */
.appbar h2{font-size:clamp(16px,4.6vw,18.5px)}
.appbar .sub{font-size:clamp(10.5px,3vw,11.5px)}
.card{padding:clamp(11px,3.4vw,14px)}
.sechd h3{font-size:clamp(11px,3.1vw,12px)}
.pname{font-size:clamp(13.5px,3.9vw,15px)}
.pmeta{font-size:clamp(9.5px,2.7vw,10.5px)}
.pc .num{height:clamp(38px,10.8vw,44px);font-size:clamp(16px,4.5vw,17.5px)}
.pct{font-size:clamp(8.5px,2.4vw,9.5px)}
.pos .vals{font-size:clamp(10.5px,3vw,11.5px)}
.eq .code{font-size:clamp(15.5px,4.3vw,17px)}
.mini{font-size:clamp(10.5px,3vw,11.5px)}
.overview .big{font-size:clamp(28px,9vw,34px)}

/* 底部导航：跟着安全区，横屏时压矮一点 */
.tabbar{height:calc(clamp(58px,15vw,66px) + env(safe-area-inset-bottom))}
.footbar.above-tabs{bottom:calc(clamp(58px,15vw,66px) + env(safe-area-inset-bottom))}
.fab{bottom:calc(clamp(76px,19vw,88px) + env(safe-area-inset-bottom))}

/* 超窄屏（SE 一代 320、老安卓 360 及以下）：测点改两列，别把数字挤成一条线 */
@media (max-width:359px){
  .pvals{grid-template-columns:repeat(2,1fr);gap:8px}
  .seg button{font-size:12px}
  .overview .ring{display:none}
}

/* 大屏手机 / 折叠屏内屏：稍微放大留白，但不超过 430
   注意要同时要求足够高：横屏手机宽度也 >430，但高度只有 300 多，不能加外边距 */
@media (min-width:431px) and (min-height:520px){
  body{background:#DDE3DF;padding:14px 0}
  .app{border-radius:20px;box-shadow:0 10px 30px rgba(18,33,29,.18)}
}

/* 横屏：键盘一弹几乎没高度，压缩固定条 + 允许整页滚动 */
@media (orientation:landscape) and (max-height:520px){
  .tabbar{height:calc(50px + env(safe-area-inset-bottom))}
  .footbar.above-tabs{bottom:calc(50px + env(safe-area-inset-bottom))}
  .appbar h2{font-size:15px}
  .pvals{grid-template-columns:repeat(auto-fit,minmax(56px,1fr))}
  .pc .num{height:36px;font-size:16px}
  #saveBar .btn{height:42px}
}

/* 保存条：无改动时收起（小屏宝贵），有改动滑出 */
#saveBar{transition:transform .2s ease, opacity .2s ease}
#saveBar.hidden{transform:translateY(120%);opacity:0;pointer-events:none}
/* 短屏设备页多留一点底部空间，保证最后一张卡能滚到按钮上方 */
@media (max-height:640px){
  .screen[data-scr=equip] .body{padding-bottom:120px}
}

/* 短屏（SE1、老安卓）：压缩头部，把首屏空间让给数据 */
@media (max-height:660px){
  #eqStatusHint{display:none}
  #eqStatusBtn{height:38px;margin-top:8px;font-size:13px}
  .screen[data-scr=equip] .seg button{padding:7px 0}
  .screen[data-scr=equip] .appbar{padding-bottom:8px}
  .tip{font-size:11.5px;padding:8px 10px}
}

/* ================= 下拉刷新（全屏 PWA 里没有浏览器工具栏） ================= */
.ptr{position:fixed;top:0;left:50%;transform:translate(-50%,-60px);z-index:120;
  background:var(--ink);color:#fff;font-size:12.5px;font-weight:600;letter-spacing:.3px;
  padding:7px 14px;border-radius:0 0 12px 12px;box-shadow:0 6px 18px rgba(18,33,29,.22);
  opacity:0;transition:transform .18s ease, opacity .18s ease;pointer-events:none}
.ptr.show{opacity:1}
.ptr.spin::after{content:"";display:inline-block;width:10px;height:10px;margin-left:7px;border-radius:50%;
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:ptrspin .7s linear infinite;vertical-align:-1px}
@keyframes ptrspin{to{transform:rotate(360deg)}}
