*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:#0b1b2b;color:#eaf2fb;font-size:15px}
/* v462 缺瓦片/离线未覆盖区显示海浅色，不再透出深色底“黑屏” */
.leaflet-container{background:#d7e6f2}
.leaflet-tile{background:transparent}
button{font-family:inherit;cursor:pointer;border:none}
#app{height:100%;display:flex;flex-direction:column}
#topbar{height:48px;background:#1565c0;display:flex;align-items:center;justify-content:space-between;padding:0 14px;flex:none;z-index:1000}
#topbar .title{font-weight:700;font-size:17px;letter-spacing:1px}
#topbar .clock{font-size:12px;opacity:.85}
#cookie-banner{display:none;flex:none;align-items:center;justify-content:space-between;gap:10px;background:#b91c1c;color:#fff;font-size:13px;font-weight:600;padding:8px 14px;z-index:1000}
#cookie-banner button{background:#fff;color:#b91c1c;border-radius:8px;padding:6px 12px;font-size:13px;font-weight:700;flex:none}
#main{flex:1;display:flex;min-height:0}
#sidebar{display:none;flex-direction:column;width:196px;background:linear-gradient(180deg,#0c2238 0%,#0a1c2e 100%);
  padding:12px 10px 14px;gap:2px;flex:none;border-right:1px solid #163a5c;overflow-y:auto}
#sidebar .navbtn{position:relative;display:flex;align-items:center;gap:10px;background:transparent;color:#b9cde0;
  padding:11px 12px;border-radius:9px;font-size:14.5px;text-align:left;width:100%;font-weight:500;
  transition:background .12s,color .12s}
#sidebar .navbtn:hover{background:#143553;color:#fff}
#sidebar .navbtn.active{background:linear-gradient(90deg,#1565c0,#1d7fe0);color:#fff;font-weight:700;
  box-shadow:0 2px 8px rgba(21,101,192,.35)}
#sidebar .navbtn.active::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;
  border-radius:2px;background:#7dd3fc}
#sidebar .navbtn .badge,.guard-badge{margin-left:auto}
.basemap-card{margin:8px 8px 6px;padding:8px 9px;border:1px solid rgba(120,150,185,.18);border-radius:10px;background:rgba(255,255,255,.045)}
.bm-top{display:flex;align-items:center;gap:6px}
.bm-t{font-size:12px;color:#cfe0f2;font-weight:700}
.bm-seg{margin-left:auto;display:flex;background:rgba(0,0,0,.28);border-radius:7px;padding:2px}
.bm-seg button{border:0;background:transparent;color:#9db2c8;font-size:11px;padding:3px 8px;border-radius:5px;line-height:1.2}
.bm-seg button.on{background:#1d7fe0;color:#fff;font-weight:700}
.bm-bot{display:flex;align-items:center;gap:8px;margin-top:7px}
.bm-dl{flex:0 0 auto;border:1px solid rgba(60,150,230,.55);background:rgba(29,127,224,.16);color:#dcebff;font-size:11px;padding:5px 9px;border-radius:7px}
.bm-st{font-size:10.5px;color:#8aa3bb;line-height:1.25}
.guard-badge{font-size:10.5px;font-style:normal;padding:1px 7px;border-radius:20px;background:#334155;color:#cbd5e1}
.guard-badge.on{background:#14532d;color:#4ade80}
#content{flex:1;position:relative;min-width:0}
.tab{position:absolute;inset:0;display:none}
.tab.active{display:block}
#map{position:absolute;inset:0;background:#A3CCFF}
#maplegend{position:absolute;top:8px;left:8px;z-index:500;background:rgba(10,25,40,.85);border:1px solid #1d4163;border-radius:10px;padding:8px 10px;font-size:11px;display:flex;flex-direction:column;gap:5px;max-width:62%}
#maplegend .lg-row{display:flex;flex-wrap:wrap;gap:6px 10px}
#freshline{font-size:11px;color:#7dd3fc;font-weight:600;margin-bottom:1px;cursor:pointer;user-select:none}
#lg-minhint{float:right;color:#9fb6cc}
#maplegend.min .lg-row,#maplegend.min .lg-toggles{display:none}
#maplegend.min #freshline{margin-bottom:0}
#maplegend.min #lg-minhint{font-size:0}
#maplegend.min #lg-minhint::before{content:"▸";font-size:11px}
.lg-toggles{display:flex;flex-wrap:wrap;gap:4px;border-top:1px solid #1d4163;padding-top:5px}
.lg-toggle{background:#132f4a;border:1px solid #1d4163;color:#cdd9e5;border-radius:20px;font-size:11px;padding:3px 9px;display:flex;align-items:center;gap:3px}
.lg-toggle.on{background:#1565c0;color:#fff;border-color:#1565c0}
.lg-toggle.off{opacity:.55}
.lg-toggle .eye{font-size:11px}
#maplegend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:3px;vertical-align:-1px}
.dot.green{background:#16a34a}.dot.red{background:#dc2626}.dot.orange{background:#f59e0b}.dot.teal{background:#0d9488}
.dot.blue{background:#2563eb;border-radius:2px}.dot.purple{background:#7c3aed;border-radius:2px}.dot.gray{background:#94a3b8}
.swatch{width:10px;height:10px;display:inline-block;margin-right:3px}
.swatch.yellow{background:#facc15}.swatch.cyan{background:#38bdf8}.swatch.green{background:#34d399}.swatch.parcel{background:#64748b}
#zonecards{position:absolute;left:8px;right:8px;bottom:10px;z-index:500;display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}
.zcard{flex:1 1 0;min-width:118px;background:rgba(10,25,40,.88);border-radius:10px;padding:6px 10px;font-size:11.5px;line-height:1.35;border:1px solid #1d4163}
.zc-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.zcard b{font-size:13.5px}
.zc-line{color:#cbd5e1;white-space:nowrap;margin-top:2px}
.zc-pend{font-size:11px}
.zcard .alert{color:#f87171;font-weight:700}
.page{position:absolute;inset:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:10px 12px 84px}
@media(min-width:900px){.page{padding:16px 22px}}
.card{background:#132f4a;border:1px solid #1d4163;border-radius:12px;padding:12px;margin-bottom:10px}
.card.pending{border-color:#b91c1c;background:#2a1722}
.card .row{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.card .name{font-weight:700;font-size:16px}
.tag{display:inline-block;font-size:11px;padding:1px 7px;border-radius:20px;margin-left:5px}
.tag.high{background:#dc2626}.tag.mid{background:#d97706}.tag.ok{background:#16a34a}.tag.gray{background:#475569}
.tag.fish{background:#0369a1}.tag.aqua{background:#0d9488}.tag.net{background:#7c3aed}.tag.ship{background:#334155}
.meta{color:#9fb6cc;font-size:12.5px;line-height:1.7;margin-top:6px}
.meta b{color:#eaf2fb;font-weight:600}
.reason{margin:7px 0;font-size:14px;color:#fecaca}
.btn{padding:10px 14px;border-radius:10px;font-size:14px;font-weight:600;background:#1d4163;color:#fff}
.btn.danger{background:#dc2626}.btn.success{background:#16a34a}.btn.warn{background:#d97706}.btn.ghost{background:#334155}
.btn:active{opacity:.85}
.btnrow{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}
.btnrow .btn{flex:1;min-width:96px;text-align:center}
.qual-row .qual-btn{flex:2;min-width:130px;padding:15px 8px;font-size:15.5px;font-weight:800;line-height:1.3}
.qual-hint{margin-top:5px;font-size:12px;color:#94a3b8}
#tabbar{flex:none;display:flex;background:#0f2438;border-top:1px solid #1d4163;padding-bottom:env(safe-area-inset-bottom)}
#tabbar .tabbtn{flex:1;background:none;color:#8aa3bb;padding:7px 0;font-size:13px;display:flex;flex-direction:column;align-items:center;gap:2px;position:relative}
#tabbar .tabbtn span{font-size:20px}
#tabbar .tabbtn.active{color:#60a5fa}
.badge{background:#dc2626;color:#fff;border-radius:20px;font-size:10px;font-style:normal;padding:0 6px;min-width:16px;height:16px;line-height:16px;display:inline-block;text-align:center;margin-left:3px}
#tabbar .badge{position:absolute;top:1px;right:calc(50% - 26px)}
#sheet-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1200;display:none}
#sheet{position:fixed;left:0;right:0;bottom:0;z-index:1300;background:#0f2438;border-radius:18px 18px 0 0;max-height:78vh;transform:translateY(105%);transition:transform .22s;display:flex;flex-direction:column}
#sheet-body{overflow-y:auto;padding:14px 15px calc(20px + env(safe-area-inset-bottom))}
#sheet.open{transform:translateY(0)}#sheet-mask.open{display:block}
.sheet-handle{width:42px;height:4px;background:#3b5572;border-radius:3px;margin:0 auto 10px}
/* 抽屉吸顶头部：抓手条 + 关闭钮，滚动时内容不钻到关闭钮下 */
#sheet .sheet-top{position:sticky;top:-14px;z-index:20;display:block;
  height:46px;margin:-14px -15px 2px;background:#0f2438}
#sheet .sheet-top .sheet-handle{margin-top:10px}
#sheet .sheet-top .close-x{position:absolute;top:4px;right:10px;z-index:21;
  background:rgba(20,44,66,.95);border-radius:50%;
  width:40px;height:40px;line-height:36px}
.close-x{position:absolute;top:10px;right:14px;font-size:26px;color:#8aa3bb;background:none;width:44px;height:44px;line-height:40px;z-index:2}
.sheet-title{font-size:21px;font-weight:800;padding-right:44px;line-height:1.35}
.sh-head{background:#0f2742;border:1px solid #1d4163;border-radius:12px;padding:10px 12px;margin:8px 0 4px}
.sh-title-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.sh-name{font-size:19px;font-weight:800;color:#eaf2fb;word-break:break-all;flex:1;min-width:0;line-height:1.3}
.sh-coord{display:flex;align-items:center;gap:7px;margin-top:8px;font-size:13.5px;color:#bfdbfe;
  background:#102f4d;border:1px solid #1d4163;border-radius:9px;padding:7px 10px;cursor:pointer;
  font-variant-numeric:tabular-nums}
.sh-coord b{font-size:15px;letter-spacing:.2px}
.sh-coord .sh-copy{margin-left:auto;font-size:12px;color:#93c5fd;border:1px solid #2b4a6b;
  border-radius:6px;padding:1px 9px;background:#16365a;flex:none}
.sh-loc{margin-top:6px;font-size:13px;color:#9fb6cc}
.sh-tags{margin-top:7px;display:flex;gap:6px;flex-wrap:wrap}
.seg{display:flex;gap:6px;margin:8px 0}
.segbtn{flex:1;padding:9px 3px;border-radius:10px;border:1px solid #2b4a6b;background:#102a43;
  color:#cbd5e1;font-size:13.5px;font-weight:700}
.segbtn b{margin-left:3px;font-size:14px}
.segbtn.active{background:#1d4ed8;border-color:#3b82f6;color:#fff}
.big-banner{margin:10px 0 4px;border-radius:12px;padding:13px 15px;font-size:18px;font-weight:800;text-align:center}
.big-banner.ok{background:#14532d;color:#4ade80;border:1px solid #16a34a}
.big-banner.no{background:#4c0f14;color:#fca5a5;border:1px solid #dc2626}
.big-banner.net{background:#3b1a63;color:#c4b5fd;border:1px solid #7c3aed}
.big-banner.patrol{background:linear-gradient(90deg,#4c0f14 50%,#0b1f4d 50%);color:#fff;border:1px solid #64748b}
.tag.patrol-tag{background:linear-gradient(90deg,#dc2626 50%,#1d4ed8 50%);color:#fff;border:none}
.infocard{background:#132f4a;border:1px solid #1d4163;border-radius:12px;margin:10px 0 8px;overflow:hidden}
.ic-row{display:flex;align-items:baseline;padding:11px 14px;border-bottom:1px solid #163a59;font-size:17px}
.ic-row:last-child{border-bottom:none}
.ic-k{flex:0 0 78px;color:#9fb6cc;font-size:14px}
.ic-v{font-weight:800;font-size:19px}
.ic-sub{font-size:13px;color:#9fb6cc;font-weight:500;margin-left:8px}
.call-btn{display:block;text-align:center;background:#16a34a;color:#fff;border-radius:12px;padding:16px;font-size:20px;font-weight:800;text-decoration:none;margin:8px 0 10px}
.call-btn.disabled{background:#334155;color:#94a3b8;font-size:15px;font-weight:600}
.sheet-meta{background:#102a43;border-radius:10px;padding:4px 12px;margin-top:6px}
.sm-row{display:flex;gap:10px;padding:8px 0;border-bottom:1px solid #163a59;font-size:15px;line-height:1.55}
.sm-row:last-child{border-bottom:none}
.sm-k{flex:0 0 96px;color:#9fb6cc;font-size:13.5px;padding-top:1px}
.sm-v{flex:1;font-size:15.5px;word-break:break-all}
@media(min-width:900px){
  #sidebar{display:flex}#tabbar{display:none}
  #sheet{left:auto;width:440px;right:0;max-height:100%;height:100%;border-radius:18px 0 0 18px;top:0}
  .page{padding:18px 26px}
}
#login{position:fixed;inset:0;z-index:2000;overflow:auto;display:flex;align-items:center;justify-content:center;padding:24px 16px;
 background:radial-gradient(1100px 560px at 50% -12%,#13508c 0%,#0b2a4a 46%,#07182a 100%)}
#login::after{content:"";position:absolute;left:0;right:0;bottom:0;height:38%;pointer-events:none;
 background:radial-gradient(120% 100% at 50% 100%,rgba(30,136,229,.22),transparent 70%)}
.login-box{width:340px;max-width:100%;text-align:center;position:relative;z-index:1}
.login-logo{width:92px;height:92px;margin:0 auto 16px;border-radius:23px;overflow:hidden;
 box-shadow:0 10px 30px rgba(0,0,0,.45),0 0 0 1px rgba(160,210,255,.35),0 0 26px rgba(56,189,248,.35)}
.login-logo svg{display:block;width:100%;height:100%}
.login-org{font-size:25px;font-weight:800;color:#fff;letter-spacing:2px;line-height:1.32;text-shadow:0 2px 10px rgba(0,0,0,.4)}
.login-sub{margin-top:9px;font-size:14px;color:#82cfff;letter-spacing:7px;padding-left:7px;font-weight:600}
.login-card{margin-top:26px;background:rgba(255,255,255,.07);border:1px solid rgba(130,207,255,.28);border-radius:16px;
 padding:18px 16px 14px;box-shadow:0 12px 40px rgba(0,0,0,.35);backdrop-filter:blur(5px)}
#login input{width:100%;box-sizing:border-box;padding:13px 14px;border-radius:10px;border:1px solid #2a527a;
 background:rgba(7,24,42,.72);color:#fff;font-size:16px;text-align:left;letter-spacing:1px;margin-bottom:10px}
#login input::placeholder{color:#6f8aa6}
#login-btn{width:100%;padding:13px;border-radius:10px;background:linear-gradient(135deg,#1e88e5,#1565c0);
 color:#fff;font-size:17px;font-weight:700;letter-spacing:8px;padding-left:18px;box-shadow:0 6px 18px rgba(21,101,192,.45)}
.login-hint{margin-top:10px;font-size:11px;color:#8aa6c0;line-height:1.6}
.login-lite{display:block;margin-top:8px;font-size:12.5px;color:#7db4ea;text-decoration:none}
.login-foot{margin-top:20px;font-size:11px;color:#627d99;letter-spacing:2px}
.search{width:100%;padding:12px 14px;border-radius:10px;border:1px solid #1d4163;background:#132f4a;color:#fff;font-size:15px;margin-bottom:10px}
.lib-search{display:flex;gap:8px;margin-bottom:8px}
.lib-search .search{margin-bottom:0;flex:1}
.lib-search .btn{flex:0 0 auto}
.lib-card .name{font-size:15px}
.filterrow{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.filterrow .btn{padding:7px 12px;font-size:13px}
.filterrow .btn.active{background:#1565c0}
label.fld{display:block;font-size:12px;color:#9fb6cc;margin:10px 0 4px}
input.fld,select.fld,textarea.fld{width:100%;padding:11px;border-radius:9px;border:1px solid #1d4163;background:#132f4a;color:#fff;font-size:14px}
.checks{display:flex;gap:14px;margin:6px 0;flex-wrap:wrap}
.checks label{font-size:14px;display:flex;gap:5px;align-items:center}
.h2{font-size:15px;font-weight:700;margin:16px 0 8px;color:#93c5fd}
.leaflet-div-icon{background:none;border:none}
.mkwrap{position:relative;width:30px;height:30px;
 transform:scale(var(--mks,1));transform-origin:50% 100%}
/* 概览点随档位小幅缩放，但保底 0.8 保证数字可读 */
.mkwrap.sdot-wrap{transform:scale(max(.8,var(--mks,1)));transform-origin:50% 50%}
.mkwrap.nw{width:26px;height:26px;transform-origin:50% 50%;
 transform:scale(calc(var(--mks,1) * var(--netx,1)))}
.mkwrap.nw svg{position:absolute;left:2px;top:2px}
.mkwrap>.mk{position:absolute;left:2px;top:2px}
.mk{width:26px;height:26px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.5)}
.mk span{transform:rotate(45deg)}
.mk.g{background:#16a34a}.mk.lp{background:#7c3aed}.mk.r{background:#dc2626}.mk.o{background:#d97706}.mk.gy{background:#64748b}.mk.b{background:#2563eb}.mk.aq{background:#0d9488}
.mk.patrol{transform:none;border-radius:50%;width:28px;height:28px;font-size:12px;
background:linear-gradient(90deg,#ef4444 0 50%,#2563eb 50% 100%);
border:2px solid #fff;animation:pbeacon 1s infinite}
.mk.patrol span{transform:none;color:#fff;text-shadow:0 0 2px #000,0 1px 1px #000}
@keyframes pbeacon{0%,49%{box-shadow:0 0 0 1px rgba(0,0,0,.25),0 0 9px 2px rgba(239,68,68,.95)}
50%,100%{box-shadow:0 0 0 1px rgba(0,0,0,.25),0 0 9px 2px rgba(37,99,235,.95)}}
.mk .dot{position:absolute;top:-4px;left:-4px;width:10px;height:10px;border-radius:50%;
border:1.5px solid #fff;box-sizing:border-box;z-index:2}
.mk .dot.run{background:#38bdf8;box-shadow:0 0 4px #38bdf8}
.mk .dot.stop{background:#f59e0b;box-shadow:0 0 4px #f59e0b}
.mk.net{border-radius:4px;transform:rotate(0);width:20px;height:20px;font-size:10px}
.mk.net.p{background:#7c3aed}
.mk.net.g{background:#16a34a}
.mk.net span{transform:none}
.mk.pulse::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid #ef4444;animation:pl 1.4s infinite}
.mk.pulse-pass::after{border-color:#22d3ee;animation:pl 1.9s infinite}
.mk.pulse-fast::after{border-color:#f97316;animation:pl 1s infinite}
.mkwrap .cn{position:absolute;display:none;width:9px;height:9px;border-style:solid;border-width:0;border-color:#f43f5e}
.mkwrap.sel .cn{display:block}
.mkwrap .cn.c1{left:-2px;top:-2px;border-top-width:2.5px;border-left-width:2.5px;border-top-left-radius:2px}
.mkwrap .cn.c2{right:-2px;top:-2px;border-top-width:2.5px;border-right-width:2.5px;border-top-right-radius:2px}
.mkwrap .cn.c3{left:-2px;bottom:-2px;border-bottom-width:2.5px;border-left-width:2.5px;border-bottom-left-radius:2px}
.mkwrap .cn.c4{right:-2px;bottom:-2px;border-bottom-width:2.5px;border-right-width:2.5px;border-bottom-right-radius:2px}
@keyframes pl{0%{transform:scale(.6);opacity:1}100%{transform:scale(1.5);opacity:0}}
.empty{text-align:center;color:#64748b;padding:50px 0}
a.tel{color:#7dd3fc;text-decoration:none;font-weight:700}

/* ---------- 统计日报 ---------- */
.page-head{padding:12px 14px;background:#0f2438;border-bottom:1px solid #1d4163}
.ph-title{font-size:18px;font-weight:800;color:#e2e8f0;margin-bottom:8px}
.range-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.rbtn{background:#16365a;color:#cbd5e1;border:1px solid #27517e;border-radius:8px;padding:8px 14px;font-size:14px;font-weight:700}
.rbtn.on{background:#2563eb;color:#fff;border-color:#2563eb}
.rdate{background:#0b1c2e;color:#e2e8f0;border:1px solid #27517e;border-radius:8px;padding:7px 8px;font-size:13px}
.st-body{padding:12px 14px 40px}
.st-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.st-card{background:#132f4c;border:1px solid #1d4163;border-radius:12px;padding:12px 8px;text-align:center}
.st-n{font-size:26px;font-weight:800;color:#7dd3fc;line-height:1.1}
.st-n.warn{color:#f87171}
.st-l{font-size:12px;color:#94a3b8;margin-top:4px}
.st-sec-title{font-size:15px;font-weight:800;color:#e2e8f0;margin:16px 0 8px;border-left:4px solid #2563eb;padding-left:8px}
.table-wrap{overflow-x:auto;border:1px solid #1d4163;border-radius:10px;-webkit-overflow-scrolling:touch}
.st-table{width:100%;border-collapse:collapse;font-size:13px;min-width:520px}
.st-table th{background:#16365a;color:#bfdbfe;padding:9px 8px;text-align:left;font-weight:700;white-space:nowrap}
.st-table td{padding:9px 8px;border-top:1px solid #17344f;color:#dbe6f2;white-space:nowrap}
.st-table .warn{color:#f87171;font-weight:800}
.st-table .muted{color:#64748b;font-size:12px}
.st-table .nowrap{white-space:nowrap}
.st-table a.lk{color:#7dd3fc;font-weight:700}
.streak{background:#7f1d1d;color:#fecaca;border-radius:6px;padding:2px 7px;font-size:12px;font-weight:800}
@media(max-width:900px){
  .st-cards{grid-template-columns:repeat(2,1fr)}
  .st-n{font-size:22px}
  .st-table{font-size:13px}
}

/* AIS 信号停滞 */
.mk.st{background:#9ca3af;color:#1f2937;box-shadow:0 0 0 2px #fbbf24,0 1px 4px rgba(0,0,0,.5)}
.mk.mem{box-shadow:0 0 0 2px #16a34a,0 1px 4px rgba(0,0,0,.5)}
.mk.k{background:#6b7280;border-color:#cbd5e1}
.mk.sl{background:#6b7280}
.mk.patrol.pstale{background:#64748b}
.mk .mbad{position:absolute;top:-7px;right:-9px;font-style:normal;font-size:9px;font-weight:800;
  border-radius:7px;padding:1px 3px 2px;line-height:1.1;transform:rotate(45deg)}
.mk .mbad-r{background:#ef4444;color:#fff}
.mk .mbad-n{background:#16a34a;color:#fff}
.mk .mbad-s{position:absolute;top:-8px;left:-9px;right:auto;transform:none;background:#f59e0b;color:#fff;
  border-radius:50%;width:13px;height:13px;display:flex;align-items:center;justify-content:center;
  font-size:9px;font-style:normal;padding:0;line-height:1}
.sheet-star{flex:none;background:none;border:none;padding:6px;color:#94a3b8;cursor:pointer}
.sheet-star svg{width:20px;height:20px;display:block}
.sheet-star.on{color:#f59e0b}
.mf-item{display:flex;align-items:center;justify-content:space-between;gap:8px;background:#102943;
  border:1px solid #1c3a59;border-radius:10px;padding:9px 11px;margin-bottom:7px}
.mf-item span{display:flex;flex-direction:column;gap:2px;min-width:0;cursor:pointer}
.mf-item b{font-size:14px;color:#eaf2fb}
.mf-item small{font-size:11px;color:#8fa8c0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mf-item button{flex:none;background:#7f1d1d;color:#fca5a5;border:none;border-radius:7px;
  padding:6px 12px;font-size:12px;cursor:pointer}
.dot.black{background:#111827}.dot.slate{background:#334155}
/* v256：满屏列表滚动性能 */
.ms-list{touch-action:pan-y;overscroll-behavior:contain}
.mrow{content-visibility:auto;contain-intrinsic-size:auto 76px}
body.m-full .mk.pulse::after{display:none;animation:none}
body.m-full .mk.patrol{animation:none}


.dot.stale{background:#9ca3af;box-shadow:inset 0 0 0 2px #fbbf24}
.big-banner.stale{background:#78350f;color:#fde68a;border-color:#b45309}
.tag.stale-tag{background:#78350f;color:#fde68a}
.tag.other-tag{background:#374151;color:#d1d5db}
.mtag.tag-stale{background:#374151;color:#d1d5db}

.lg-shots{margin-top:6px;font-size:12px;color:#34495e;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.shot-btn{border:1px solid #2f6fb0;background:#f3f8ff;color:#1d5a8a;border-radius:6px;padding:3px 9px;font-size:12px;cursor:pointer}
.shot-btn:disabled{opacity:.6;cursor:wait}
.shot-btn:active{background:#dbeaff}

/* ---------- 船标悬停气泡 ---------- */
.mk-tip-wrap{background:none;border:none;box-shadow:none;min-width:230px;max-width:340px}
.mk-tip{background:rgba(8,20,34,.95);border:1px solid #2f6fb0;border-radius:10px;
  padding:9px 12px;font-size:13.5px;line-height:1.7;color:#eaf2fb;min-width:230px;
  max-width:340px;width:max-content;white-space:normal;word-break:break-word}
.mk-tip b{white-space:normal}
.mk-tip .tt-name{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.mk-tip .tt-name b{font-size:15.5px}
.mk-tip .tt-pill{display:inline-block;border-radius:11px;padding:1px 9px;font-size:12px;font-weight:800;line-height:1.5}
.mk-tip .tt-pill-ok{background:#14532d;color:#86efac;border:1px solid #16a34a}
.mk-tip .tt-pill-no{background:#7f1d1d;color:#fca5a5;border:1px solid #dc2626}
.mk-tip .tt-pill-guard{background:#1e3a8a;color:#bfdbfe;border:1px solid #3b82f6}
.mk-tip .tt-tag{display:inline-block;background:#0369a1;color:#fff;border-radius:10px;
  padding:0 8px;font-size:11.5px;margin-right:6px}
.mk-tip .tt-size{color:#cbd5e1;font-size:12.5px;margin-right:8px}
.mk-tip .tt-motion{font-size:12.5px}
.mk-tip .tt-loc{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.mk-tip .tt-zone{color:#93c5fd;font-weight:800}
.mk-tip .tt-ok{color:#4ade80;font-weight:800}
.mk-tip .tt-no{color:#f87171;font-weight:800}
.mk-tip .tt-run{color:#7dd3fc;font-weight:700}
.mk-tip .tt-stop{color:#fbbf24;font-weight:700}
.mk-tip .tt-stale{color:#94a3b8;font-weight:700}
.mk-tip .tt-coord{color:#cbd5e1;font-size:12.5px;font-variant-numeric:tabular-nums}
.leaflet-tooltip.mk-tip-wrap::before{display:none}

/* ---------- 右键/长按现场处置菜单 ---------- */
#ctxmenu{position:fixed;z-index:1600;background:#0f2438;border:1px solid #2f6fb0;
  border-radius:13px;padding:6px;box-shadow:0 8px 30px rgba(0,0,0,.55);max-height:80vh;overflow-y:auto}
.ctx-head{font-size:14px;font-weight:800;color:#93c5fd;padding:9px 12px 8px;
  border-bottom:1px solid #1d4163;margin-bottom:5px;word-break:break-all}
.ctx-item{display:block;width:100%;text-align:left;background:#16365a;color:#eaf2fb;
  border:1px solid #27517e;border-radius:9px;padding:13px 14px;font-size:15px;font-weight:700;margin:3px 0}
.ctx-item.danger{background:#7f1d1d;border-color:#dc2626;color:#fecaca}
.ctx-item.warn{background:#78350f;border-color:#d97706;color:#fde68a}
.ctx-item.success{background:#14532d;border-color:#16a34a;color:#bbf7d0}
.ctx-item.ghost{background:#334155;border-color:#475569;color:#cbd5e1}
.ctx-item:active{opacity:.8}
.ctx-hdr{padding:9px 12px 2px;font-size:11.5px;font-weight:800;color:#7dd3fc;letter-spacing:.5px}
.ctx-item.ctx-toggle{background:#0c2e4d;border-color:#1d4163;color:#93c5fd;font-size:14px}
.ctx-more{display:none}
.ctx-checklist{background:#0c2e4d;padding:8px 12px;color:#cfe3f5;font-size:12.5px;line-height:1.6}
.ctx-checklist p{margin:3px 0}
.ctx-redline{padding:9px 12px;font-size:12px;line-height:1.55;color:#fca5a5;background:#450a0a;border-top:1px solid #7f1d1d}
.ctx-audio small{display:block;font-size:11.5px;font-weight:400;opacity:.9;margin-top:1px}
.audio-sub{font-size:13.5px;font-weight:700;color:#7dd3fc;margin:4px 0 8px}
.audio-sub b{color:#fbbf24}
#app-toast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%) translateY(20px);
  background:rgba(15,36,56,.96);border:1px solid #2f6fb0;color:#eaf2fb;padding:12px 20px;
  border-radius:24px;font-size:14.5px;font-weight:700;z-index:3000;opacity:0;pointer-events:none;
  transition:all .25s;max-width:88vw;text-align:center}
#app-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.ev-link{color:#7dd3fc;font-weight:700;text-decoration:underline;margin-left:4px}
.tts-voice{display:flex;align-items:center;gap:8px;margin:6px 0 8px;font-size:13px;color:#cbd5e1}
.tv-btn{flex:0 0 auto;padding:6px 14px;border-radius:16px;border:1px solid #2f6fb0;background:#0d2438;
  color:#cbd5e1;font-size:13px;font-weight:700}
.tv-btn.on{background:#1d6fb8;border-color:#57a9e8;color:#fff}
.tts-grid .tts-btn{border-color:#2f6fb0}
.tts-btn em{color:#93c5fd}

/* ---------- 抽屉：处置记录 ---------- */
.cnt-row{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.cnt-chip{background:#16365a;border:1px solid #27517e;color:#bfdbfe;border-radius:20px;
  padding:4px 11px;font-size:13px;font-weight:700}
.cnt-chip.bad{background:#7f1d1d;border-color:#dc2626;color:#fecaca}
.repeat-banner{background:#7f1d1d;border:1px solid #ef4444;color:#fecaca;border-radius:10px;
  padding:10px 12px;font-size:14px;font-weight:800;margin:8px 0}
.act-timeline{margin:6px 0}
.act-item{background:#102a43;border-left:3px solid #2f6fb0;border-radius:7px;
  padding:8px 11px;margin:6px 0;font-size:13.5px;line-height:1.55}
.act-item b{color:#93c5fd}
.act-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:10px 0}
.act-grid .btn{padding:13px 6px;font-size:14.5px;min-width:0}
.call-btn.extra{background:#0d9488;margin:6px 0 0;font-size:17px;padding:13px}
@media(min-width:900px){.act-grid{grid-template-columns:1fr 1fr 1fr}}

/* ===== V1.5 凭图核验 / 白名单弹窗 ===== */
#photo-fab{position:absolute;right:14px;bottom:86px;z-index:600;width:74px;min-height:74px;
  border:none;border-radius:50%;background:linear-gradient(135deg,#0ea5e9,#0369a1);
  color:#fff;font-size:14px;font-weight:700;line-height:1.25;box-shadow:0 4px 14px rgba(2,132,199,.45);
  padding:8px 4px}
#photo-fab:active{transform:scale(.94)}
#coord-fab{position:absolute;right:14px;bottom:170px;z-index:600;width:74px;min-height:74px;
  border:none;border-radius:50%;background:linear-gradient(135deg,#64748b,#334155);
  color:#fff;font-size:14px;font-weight:700;line-height:1.25;box-shadow:0 4px 14px rgba(51,65,85,.45);
  padding:8px 4px}
#coord-fab.active{background:linear-gradient(135deg,#f59e0b,#b45309);
  box-shadow:0 0 0 3px rgba(245,158,11,.35),0 4px 14px rgba(180,83,9,.5)}
#coord-fab:active{transform:scale(.94)}
.leaflet-container.crosshair,.leaflet-container.crosshair .leaflet-grab,
.leaflet-container.crosshair .leaflet-interactive{cursor:crosshair !important}
/* v416 关键：地图容器及其所有子元素（瓦片/面板/图标）禁用浏览器原生手势
   （touch-action 不继承，必须覆盖到被触摸的具体元素）；
   Chrome 等会把双指捏合交给页面级缩放，与 Leaflet 同时发生→图标不锚定 */
.leaflet-container, .leaflet-container *{touch-action:none !important;}
.leaflet-container{background:#A3CCFF;} /* 海蓝底色：瓦片未加载时露海蓝不露黑 */
/* v470 触摸点选 SVG 路径会获焦，Chromium 默认焦点环沿屏幕包围盒画粗黑圆角框，
   与真实地块形状无关——全局关闭地图交互元素焦点 outline，选中高亮改由沿几何的细描边表达 */
.leaflet-interactive:focus,.leaflet-interactive:focus-visible,
.leaflet-marker-icon:focus,.leaflet-marker-icon:focus-visible,
.leaflet-container:focus,.leaflet-container:focus-visible{outline:none !important;}
/* v470 航道禁养区常驻暗色文字（无气泡底） */
.ch-lb-wrap{background:transparent !important;border:none !important;pointer-events:none;}
.ch-lb{font-size:16px;font-weight:800;letter-spacing:3px;color:#1e293b;white-space:nowrap;
  text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 4px #fff,0 0 2px #fff;pointer-events:none;}
html.m-ui .ch-lb{font-size:13px;letter-spacing:2px;}
body.map-pinch{overflow:hidden;}
body.map-pinch .leaflet-container, body.map-pinch .leaflet-container *{touch-action:none !important;}
#cross-readout{position:absolute;z-index:900;background:rgba(8,20,34,.95);
  border:1px solid #38bdf8;border-radius:8px;padding:6px 10px;color:#eaf2fb;
  font-size:13.5px;font-weight:700;pointer-events:none;white-space:nowrap;
  font-variant-numeric:tabular-nums;box-shadow:0 3px 12px rgba(0,0,0,.45)}
#cross-readout small{display:block;font-size:10.5px;font-weight:400;color:#94a3b8;margin-top:1px}
.cross-pin{width:24px;height:24px;position:relative}
.cross-pin i{position:absolute;background:#f59e0b;box-shadow:0 0 3px rgba(0,0,0,.6)}
.cross-pin i:first-child{left:50%;top:0;width:2px;height:100%;transform:translateX(-50%)}
.cross-pin i:nth-child(2){top:50%;left:0;height:2px;width:100%;transform:translateY(-50%)}
.cross-pin o{position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;
  border:2px solid #f59e0b;background:rgba(245,158,11,.25);transform:translate(-50%,-50%)}
.cross-pop b{font-size:15px;font-variant-numeric:tabular-nums}
.cross-pop .cp-dec{font-size:11.5px;color:#64748b;margin-top:2px}
/* 手机端中心准星（可手指拖动，地图不动） */
#cross-top{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:900;
  background:rgba(8,20,34,.94);border:1px solid #38bdf8;border-radius:10px;
  padding:7px 10px;color:#eaf2fb;text-align:center;max-width:94vw;
  box-shadow:0 3px 12px rgba(0,0,0,.45);pointer-events:auto}
#cross-top b{display:block;font-size:15px;font-variant-numeric:tabular-nums;white-space:nowrap}
#cross-top small{display:block;font-size:10.5px;color:#94a3b8;margin-top:1px;white-space:nowrap}
#cross-top .cp-copy{margin-top:5px;padding:5px 14px;font-size:12.5px;font-weight:700}
#cross-top .cp-x{position:absolute;top:-9px;right:-9px;width:24px;height:24px;border-radius:50%;
  border:1px solid #64748b;background:#0f172a;color:#e2e8f0;font-size:12px;line-height:22px;padding:0;font-weight:700}
#cross-center{position:absolute;z-index:880;width:36px;height:36px;touch-action:none;
  pointer-events:auto;cursor:grab}
#cross-center:active{cursor:grabbing}
#cross-center i{position:absolute;background:#f59e0b;box-shadow:0 0 4px rgba(0,0,0,.7)}
#cross-center i:first-child{left:50%;top:0;width:2px;height:100%;transform:translateX(-50%)}
#cross-center i:nth-child(2){top:50%;left:0;height:2px;width:100%;transform:translateY(-50%)}
#cross-center o{position:absolute;left:50%;top:50%;width:12px;height:12px;border-radius:50%;
  border:2px solid #f59e0b;background:rgba(245,158,11,.22);transform:translate(-50%,-50%)}
.modal-mask{display:none;position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:1200;
  align-items:flex-end;justify-content:center}
.modal-mask.open{display:flex}
.modal-sheet{background:#f8fafc;width:100%;max-width:560px;max-height:92vh;border-radius:18px 18px 0 0;
  display:flex;flex-direction:column;animation:sheetUp .18s ease-out}
@keyframes sheetUp{from{transform:translateY(40px);opacity:.6}to{transform:translateY(0);opacity:1}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;
  font-size:17px;font-weight:700;color:#0f172a;border-bottom:1px solid #e2e8f0;background:#fff;border-radius:18px 18px 0 0}
.modal-x{border:none;background:#f1f5f9;width:34px;height:34px;border-radius:50%;font-size:16px;color:#475569}
.modal-body{padding:16px 18px 26px;overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:0}
.pc-bigbtn{display:block;width:100%;text-align:center;padding:17px;margin:10px 0;border-radius:12px;
  background:#0284c7;color:#fff;font-size:18px;font-weight:700;border:none;text-decoration:none;box-sizing:border-box}
.pc-bigbtn.ghost{background:#e2e8f0;color:#0f172a}
.pc-bigbtn.primary{background:#16a34a}
.pc-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pc-loc{background:#fff;border:1px solid #cbd5e1;border-radius:10px;padding:12px;margin:10px 0;
  font-size:15px;line-height:1.7;color:#1e293b}
.pc-info{background:#fff;border:1px solid #cbd5e1;border-radius:10px;padding:12px;margin:8px 0;font-size:15px;line-height:1.8}
.pc-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
.pc-actions .btn{margin:0;padding:14px 6px;font-size:15px}
.pc-nr{display:flex;align-items:center;gap:8px;padding:8px 4px;border-bottom:1px solid #e2e8f0;font-size:13.5px}
.pc-nr b{flex:0 1 auto;max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pc-nr .meta{flex:1;min-width:0}
.pc-nr .btn{flex:0 0 auto;padding:6px 10px;font-size:12.5px}
.pc-manual{border-top:1px dashed #cbd5e1;margin-top:12px;padding-top:6px}
.wl-row{display:flex;align-items:center;justify-content:space-between;gap:8px;
  border-bottom:1px solid #e2e8f0;padding:9px 2px;font-size:13.5px;line-height:1.5}
.review-row{background:#f8fafc;border:1px solid #cbd5e1;border-radius:10px;padding:12px;margin:10px 0}
.review-row .fld{margin:5px 0;padding:11px;font-size:15px}
@media(min-width:900px){.modal-mask{align-items:center}.modal-sheet{border-radius:18px;max-height:88vh}
  #photo-fab{bottom:24px;right:24px}
  #coord-fab{bottom:108px;right:24px}}

/* ===== V1.51 手机端图例/图层控制可收起 ===== */
#lg-title{color:#e2e8f0}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #maplegend{max-width:64vw;max-height:46vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
    font-size:10.5px;padding:7px 9px;gap:4px;box-shadow:0 2px 10px rgba(0,0,0,.35)}
  #maplegend.min{max-width:none;max-height:none;overflow:visible}
  #maplegend .lg-shots{display:none !important}
  #freshline{font-size:12px;white-space:nowrap}
  #maplegend.min #freshline #lg-title{display:inline}
  #maplegend:not(.min) #freshline #lg-title{display:none}
  #maplegend .lg-toggle{font-size:11px;padding:5px 8px}
  #lg-collapse-mobile{display:block;width:100%;margin-top:6px;padding:9px;border:1px solid #1d4163;
    border-radius:8px;background:#12324f;color:#cfe6ff;font-size:13px}
}
@media (min-width:761px){ #lg-collapse-mobile{display:none} }

/* ===== v152 抽屉折叠/常用处置 ===== */
.sheet-fold{background:#102a43;border:1px solid #1d4163;border-radius:10px;margin:10px 0;overflow:hidden}
.sheet-fold>summary{list-style:none;cursor:pointer;padding:13px 14px;font-size:15px;font-weight:700;color:#93c5fd;outline:none}
.sheet-fold>summary::-webkit-details-marker{display:none}
.sheet-fold>summary::before{content:"\25B8 ";font-size:13px}
.sheet-fold[open]>summary::before{content:"\25BE "}
.sheet-fold .act-grid{margin:0 12px 12px}
.fold-tips{margin:0 12px 12px;padding:10px 12px;background:#0b2238;border-radius:8px;
  font-size:13px;line-height:1.8;color:#cfe3f5}
.act-grid.quick .btn{padding:17px 6px;font-size:16.5px;font-weight:800}
.audio-wrap{margin:8px 0 4px}
.audio-group{margin-bottom:8px}
.ag-title{font-size:12.5px;color:#94a3b8;margin:6px 2px}
.audio-grid{display:grid;grid-template-columns:1fr;gap:8px}
.audio-btn{display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:15px 10px !important;font-size:17px !important;font-weight:800;
  background:linear-gradient(135deg,#0ea5e9,#0369a1);color:#fff;border:none;min-height:64px}
.audio-btn small{font-size:11.5px;font-weight:400;opacity:.92}
.audio-btn em{font-style:normal;font-size:11.5px;font-weight:600;opacity:.85}
.audio-btn.playing{background:linear-gradient(135deg,#dc2626,#991b1b);
  animation:audiopulse 1.1s ease-in-out infinite}
@keyframes audiopulse{0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,.5)}50%{box-shadow:0 0 0 7px rgba(220,38,38,0)}}
@media(min-width:900px){.audio-grid{grid-template-columns:1fr 1fr}}
.det-meta>summary{color:#cbd5e1;font-weight:600}
.det-meta .sheet-meta{margin:0 8px 10px}
@media(min-width:900px){.act-grid.quick{grid-template-columns:1fr 1fr 1fr 1fr}}

/* ===== v155 网位仪归属推断（紧凑卡） ===== */
.tt-warn{color:#fbbf24;font-weight:800}
.na-box{margin:6px 0}
.na-title{font-size:14.5px;font-weight:800;color:#eaf2fb;margin:2px 0 6px}
.na-title span{font-weight:400;font-size:11.5px;color:#93a4b8;margin-left:4px}
.na-card{border-radius:9px;padding:6px 9px;margin:5px 0;border:1px solid #1d4163;background:#102a43}
.na-pinned{border-color:#16a34a;background:#0d2f1f}
.na-conf-hi{border-left:3px solid #dc2626}
.na-conf-mid{border-left:3px solid #d97706}
.na-conf-lo,.na-conf-weak{border-left:3px solid #475569}
.na-line1{display:flex;align-items:center;gap:7px;font-size:14.5px;line-height:1.3}
.na-line1 b{color:#eaf2fb;word-break:break-all;flex:1;min-width:0}
.na-size{flex:none;font-size:11.5px;color:#93a4b8;font-weight:400}
.na-line2{font-size:12.5px;color:#cbd5e1;margin:2px 0 0 2px;line-height:1.3;word-break:break-all;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.na-badge{flex:none;font-size:11px;font-weight:800;border-radius:10px;padding:2px 8px;white-space:nowrap;background:#16365a;color:#bfdbfe}
.na-badge-ok{background:#14532d;color:#86efac}
.na-conf-hi .na-badge{background:#7f1d1d;color:#fecaca}
.na-conf-mid .na-badge{background:#78350f;color:#fde68a}
.na-conf-lo .na-badge,.na-conf-weak .na-badge{background:#334155;color:#cbd5e1}
.na-ev{margin:3px 0 0 2px;font-size:12px;color:#9fb2c8;line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.na-pinned .na-ev{-webkit-line-clamp:2}
.na-btns{display:flex;gap:6px;margin-top:5px}
.na-btn{flex:1;padding:6px 4px;border-radius:8px;border:1px solid #2b4a6b;background:#16365a;
  color:#dbeafe;font-size:12.5px;font-weight:700;text-align:center;text-decoration:none;line-height:1.2}
.na-tel{background:#14532d;border-color:#166534;color:#dcfce7;flex:1.2}
.na-ok{background:#78350f;border-color:#92400e;color:#fef3c7}
.na-clear{display:block;margin:4px auto 2px;background:none;border:none;color:#94a3b8;
  font-size:12px;text-decoration:underline;padding:4px}
.na-empty{font-size:12.5px;color:#93a4b8;padding:6px 2px}
.na-mini{padding:6px 2px;border-bottom:1px solid #1d4163;font-size:12.5px;line-height:1.35}
.na-mini .meta{display:block;color:#9fb2c8;font-size:11.5px;margin-top:1px}
.na-fold summary{font-size:12.5px;color:#93c5fd;padding:6px 2px}
.na-badge-repeat{background:#7f1d1d;color:#fecaca}
.na-manual{margin-top:10px;padding:9px 10px;border:1px dashed #3b6ea5;border-radius:10px;background:rgba(20,45,72,.5)}
.na-manual-t{font-size:12.5px;color:#93c5fd;margin-bottom:6px}
.na-in{width:100%;box-sizing:border-box;margin-bottom:6px;padding:10px 12px;border-radius:8px;
  border:1px solid #2f5a86;background:#0c2238;color:#eaf2fb;font-size:15px}
.na-manual-btn{width:100%;padding:11px;font-size:15px;font-weight:700}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){.na-in{padding:12px 14px;font-size:16px}.na-manual-btn{padding:13px;font-size:16px}}

/* ===== v159 举报材料（短信转发/电话口播/A4打印，渔政+海警双线） ===== */
#report-mask{z-index:2100}
.report-sheet{max-width:720px}
.rp-lines{display:flex;gap:8px;margin-bottom:10px}
.rp-lines .btn{flex:1;padding:12px 6px;font-size:14px;white-space:normal;line-height:1.35;margin:0}
.rp-lines .btn.disabled,.rp-lines .btn[disabled]{opacity:.42;filter:grayscale(.6);cursor:not-allowed}
.rp-route{background:#fffbeb;border:1px solid #fcd34d;border-radius:10px;padding:9px 12px;font-size:13px;
  color:#78350f;line-height:1.7;margin-bottom:10px}
.rp-route.warn{background:#fef2f2;border-color:#fca5a5;color:#991b1b;margin-top:6px}
.rp-facts{background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:10px 12px;
  font-size:13px;color:#1e3a5f;line-height:1.8;margin-bottom:6px}
.rp-facts span{display:inline-block;margin-right:14px}
.rp-sec{margin:14px 0 4px;border-top:1px dashed #cbd5e1;padding-top:10px}
.rp-sec-h{font-weight:800;color:#0f172a;margin-bottom:8px;font-size:15px}
.rp-text{white-space:pre-wrap;word-break:break-word;background:#0b1f36;color:#dbeafe;border-radius:10px;
  padding:12px;font-size:13.5px;line-height:1.75;max-height:40vh;overflow:auto;font-family:inherit;
  margin:0 0 8px;touch-action:manipulation}
#report-print{display:none}
@media print{
  body *{visibility:hidden}
  #report-print,#report-print *{visibility:visible}
  #report-print{display:block;position:absolute;left:0;top:0;width:100%}
  .rp-a4{color:#000;font-family:"SimSun","宋体",serif;font-size:12pt;line-height:1.9;padding:0 4mm}
  .rp-a4-title{text-align:center;font-size:20pt;font-weight:800;margin:0 0 10pt;letter-spacing:4pt}
  .rp-a4-to{font-weight:700;margin:0 0 10pt;text-indent:0}
  .rp-a4 h2{font-size:13pt;margin:10pt 0 4pt}
  .rp-a4 p{margin:4pt 0;text-indent:2em}
  .rp-a4 ol{margin:4pt 0 4pt 20pt;padding:0}
  .rp-a4 li{margin:2pt 0}
  .rp-table{width:100%;border-collapse:collapse;margin:4pt 0;font-size:10.5pt}
  .rp-table th,.rp-table td{border:1px solid #000;padding:3pt 6pt;text-align:left;vertical-align:top}
  .rp-table th{width:26%;background:#f0f0f0;font-weight:700}
  .rp-a4-sign{text-indent:0!important;text-align:right;margin-top:18pt;line-height:2.1}
  .rp-a4-foot{text-indent:0!important;font-size:9pt;color:#444;border-top:1px solid #999;
    padding-top:6pt;margin-top:14pt}
}

/* ================= V1.70 管护力量 / 执法记录仪 ================= */
#guard-fab{position:absolute;right:9px;bottom:280px;z-index:650;width:48px;height:48px;
  border:none;border-radius:50%;background:linear-gradient(135deg,#475569,#1e293b);
  color:#fff;display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 14px rgba(30,41,59,.55);padding:0;cursor:pointer}
#guard-fab svg{width:25px;height:25px}
#guard-fab:active{transform:scale(.94)}
@media(min-width:761px){#guard-fab{position:fixed;bottom:192px;right:24px}}
#guard-fab.on{background:linear-gradient(135deg,#16a34a,#15803d)}
#guard-fab.rec{background:linear-gradient(135deg,#dc2626,#991b1b);animation:guardrecpulse 1.1s ease-in-out infinite}
@keyframes guardrecpulse{0%,100%{box-shadow:0 4px 14px rgba(220,38,38,.55)}50%{box-shadow:0 0 0 7px rgba(220,38,38,.28),0 4px 14px rgba(220,38,38,.75)}}

/* 海图记录仪图钉 */
.g-pin{position:relative;width:38px;height:44px;display:flex;align-items:flex-start;justify-content:center}
.g-pin .g-cam{font-size:22px;line-height:30px;width:32px;height:32px;border-radius:50% 50% 50% 4px;
  display:flex;align-items:center;justify-content:center;transform:rotate(-45deg);
  background:#1e3a8a;border:2px solid #fff;box-shadow:0 2px 6px rgba(0,0,0,.4)}
.g-pin .g-cam{transform:rotate(0)}
.g-pin.on .g-cam{background:linear-gradient(135deg,#16a34a,#15803d)}
.g-pin.off .g-cam{background:linear-gradient(135deg,#64748b,#475569);opacity:.85}
.g-pulse{position:absolute;top:2px;left:3px;width:32px;height:32px;border-radius:50%;
  background:rgba(34,197,94,.45);animation:gpulse 1.6s ease-out infinite}
@keyframes gpulse{0%{transform:scale(.7);opacity:.8}100%{transform:scale(1.9);opacity:0}}

/* 侧栏在线徽标 */
.guard-badge{margin-left:6px;font-size:11px;font-weight:700;padding:1px 7px;border-radius:9px}
.guard-badge.on{background:#dcfce7;color:#15803d}
.guard-badge.off{background:#e5e7eb;color:#6b7280}

/* 记录仪抽屉 */
.g-head{background:linear-gradient(135deg,#1e3a8a,#0f766e);color:#fff;border-radius:12px;
  padding:12px 14px;margin-bottom:12px}
.g-title{font-size:17px;font-weight:800;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.g-sub{font-size:13px;opacity:.92;margin-top:3px}
.g-coord{font-size:13px;margin-top:6px;font-family:monospace}
.guard-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:10px 0}
.guard-btn{border:none;border-radius:12px;padding:15px 8px;font-size:15px;font-weight:700;
  background:#f1f5f9;color:#0f172a;box-shadow:0 1px 3px rgba(0,0,0,.12);min-height:58px}
.guard-btn:active{transform:scale(.96)}
.guard-btn.primary{background:linear-gradient(135deg,#0ea5e9,#0369a1);color:#fff;grid-column:1/3;
  min-height:64px;font-size:17px}

/* 管护力量列表 */
.gl-list{display:flex;flex-direction:column;gap:8px}
.gl-item{display:flex;align-items:center;justify-content:space-between;
  background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:12px 14px}
.gl-item:active{background:#f1f5f9}
.gl-main b{font-size:16px}

/* 设备表单 */
.gf-form{display:flex;flex-direction:column;gap:10px}
.gf-label{font-size:13px;font-weight:700;color:#334155;display:flex;flex-direction:column;gap:4px}
.gf-label input{padding:11px 12px;border:1px solid #cbd5e1;border-radius:10px;font-size:15px}

/* 指挥中心 */
#guard-modal.wide .guard-sheet{max-width:none;width:96vw;height:94vh;max-height:94vh;border-radius:14px}
#guard-modal.wide .guard-sheet .modal-body{flex:1;display:flex;flex-direction:column;padding:0;overflow:hidden}
.gc-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;
  border-bottom:1px solid #e2e8f0;background:#f8fafc}
.gc-devs{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.gc-dev{border:1px solid #cbd5e1;background:#fff;border-radius:9px;padding:6px 10px;
  font-size:13px;font-weight:700;color:#0f172a}
.gc-frame{flex:1 1 auto;min-height:0;position:relative;background:#0f172a}
.gc-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.gc-load{color:#cbd5e1;text-align:center;padding:60px 0;font-size:15px;position:absolute;inset:0;z-index:1;pointer-events:none}

/* v175 记录仪：左侧功能栏 + 右侧直接实时画面 */
.gc-wrap{flex:1;display:flex;min-height:0}
.gc-side{width:224px;flex:0 0 224px;background:#f8fafc;border-right:1px solid #e2e8f0;
  overflow-y:auto;padding:8px 10px}
.gc-side-h{display:flex;align-items:center;justify-content:space-between;
  font-size:12.5px;color:#64748b;font-weight:800;letter-spacing:.5px;margin:10px 2px 6px}
.gc-side-h:first-child{margin-top:2px}
.gc-side-x{display:none;border:none;background:none;color:#64748b;font-size:13px}
.gc-devlist{display:flex;flex-direction:column;gap:6px}
.gc-devrow{display:flex;align-items:center;gap:8px;text-align:left;width:100%;
  border:1px solid #e2e8f0;background:#fff;border-radius:10px;padding:9px 10px;cursor:pointer}
.gc-devrow.active{border-color:#0369a1;background:#e0f2fe;box-shadow:0 0 0 1px #0369a1 inset}
.gc-dn{flex:1;font-size:14px;font-weight:700;color:#0f172a;display:flex;flex-direction:column}
.gc-dn small{font-size:11.5px;font-weight:400;color:#64748b;margin-top:1px}
.gc-ds{font-size:12px;color:#64748b}
.gc-dot{width:9px;height:9px;border-radius:50%;flex:0 0 9px;display:inline-block}
.gc-dot.on{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.18)}
.gc-dot.off{background:#94a3b8}
.gc-fns{display:flex;flex-direction:column;gap:6px}
.gc-fn{text-align:left;border:1px solid #e2e8f0;background:#fff;border-radius:10px;
  padding:11px 12px;font-size:14px;font-weight:700;color:#0f172a;cursor:pointer}
.gc-fn:active{background:#f1f5f9}
.gc-fn.active{border-color:#0369a1;background:#0369a1;color:#fff}
.gc-main{flex:1;display:flex;flex-direction:column;min-width:0}
.gc-topbar{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#0f172a;color:#e2e8f0}
.gc-cur{flex:1;min-width:0;display:flex;flex-direction:column;font-size:14px}
.gc-cur b{font-size:15px}
.gc-cur span{font-size:12.5px;color:#cbd5e1;display:flex;align-items:center;gap:5px;margin-top:2px}
.gc-menu,.gc-reload{border:1px solid #334155;background:#1e293b;color:#e2e8f0;border-radius:9px;
  padding:8px 12px;font-size:14px;font-weight:700;display:none}
.gc-reload{display:inline-block}
.gc-offline{background:#78350f;color:#fde68a;padding:9px 14px;font-size:13.5px;line-height:1.5}
/* 记录仪作业页底部拇指操作栏 */
.gc-actionbar{flex:0 0 auto;display:flex;gap:8px;padding:10px;background:#0b1220}
.gc-ab{flex:1;min-width:0;border:1px solid #334155;background:#1e293b;color:#f8fafc;border-radius:12px;
  padding:12px 4px;font-size:22px;line-height:1.2;display:flex;flex-direction:column;align-items:center;gap:3px}
.gc-ab span{font-size:13px;font-weight:700}
.gc-ab svg{width:22px;height:22px}
.gc-ab:active{transform:scale(.97)}
.gc-ab.rec.on{background:#b91c1c;border-color:#ef4444;animation:gcpulse 1.2s infinite}
.gc-ab.busy{opacity:.6}
@keyframes gcpulse{0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.5)}50%{box-shadow:0 0 0 8px rgba(239,68,68,0)}}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #guard-modal.wide .guard-sheet{width:100vw;height:96vh;max-height:96vh;border-radius:14px 14px 0 0}
  .gc-devs{margin-left:0}
  .gc-side{position:absolute;z-index:20;left:0;top:0;bottom:0;width:78%;max-width:300px;
    transform:translateX(-105%);transition:transform .2s;box-shadow:2px 0 14px rgba(0,0,0,.3)}
  .gc-side.open{transform:translateX(0)}
  .gc-side-x{display:inline-block}
  .gc-menu{display:inline-block}
  .gc-fn{padding:13px 12px;font-size:15px}
  .gc-devrow{padding:11px 12px}
}

/* ===== 记录仪 WiFi 设置面板 ===== */
.gwifi{flex:1;overflow-y:auto;background:#f1f5f9;padding:14px;box-sizing:border-box}
.gwifi-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.gwifi-head b{font-size:17px;color:#0f172a}
.gwifi-back{border:1px solid #cbd5e1;background:#fff;color:#0f172a;border-radius:9px;
  padding:8px 12px;font-size:14px;font-weight:700}
.gwifi-cur{background:#0f172a;color:#e2e8f0;border-radius:11px;padding:12px 14px;
  font-size:14.5px;line-height:1.5;margin-bottom:10px}
.gwifi-cur b{color:#7dd3fc}
.gwifi-switch{display:flex;gap:10px;margin-bottom:14px}
.gwifi-switch button{flex:1;border:0;border-radius:11px;padding:13px 8px;font-size:15px;
  font-weight:700;color:#fff;background:#0369a1}
.gwifi-switch button:last-child{background:#475569}
.gwifi-switch button:active{transform:scale(.98)}
.gwifi-list-t{font-size:13.5px;font-weight:700;color:#475569;margin:4px 0 8px}
.gwifi-list{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.gwifi-row{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e2e8f0;
  border-radius:12px;padding:10px 12px}
.gwifi-info{flex:1;min-width:0;display:flex;flex-direction:column}
.gwifi-info b{font-size:15px;color:#0f172a}
.gwifi-info span{font-size:12.5px;color:#64748b;margin-top:2px;word-break:break-all}
.gwifi-apply,.gwifi-del{border:0;border-radius:9px;padding:9px 14px;font-size:14px;font-weight:700}
.gwifi-apply{background:#0369a1;color:#fff}
.gwifi-del{background:#fee2e2;color:#b91c1c}
.gwifi-empty{background:#fff;border:1px dashed #cbd5e1;border-radius:12px;padding:18px;
  text-align:center;color:#94a3b8;font-size:14px}
.gwifi-form{display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid #e2e8f0;
  border-radius:12px;padding:12px}
.gwifi-form input{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:9px;
  padding:12px;font-size:15px;color:#0f172a;background:#fff}
.gwifi-form input::placeholder{color:#94a3b8}
.gwifi-form button{border:0;border-radius:10px;background:#0369a1;color:#fff;font-size:15px;
  font-weight:700;padding:13px}
.gwifi-tip{font-size:12.5px;color:#64748b;line-height:1.6;margin:10px 2px}

/* ===== V1.71 弹窗浅色输入框（核验船等） ===== */
.modal-sheet .fld, .modal-sheet select.fld, .modal-sheet textarea.fld{
  background:#fff;color:#0f172a;border:1px solid #cbd5e1}
.modal-sheet .fld::placeholder{color:#94a3b8}
.pc-manual{margin-top:14px;border-top:1px dashed #cbd5e1;padding-top:12px}
.pc-manual-t{font-size:13px;font-weight:700;color:#475569;margin:2px 0 8px}
.pc-inp{width:100%;box-sizing:border-box;padding:13px 12px;border-radius:10px;
  border:1px solid #cbd5e1;background:#fff;color:#0f172a;font-size:15px;margin-bottom:8px}
.pc-inp::placeholder{color:#94a3b8}
#pc-manual-run{margin-top:2px}

/* ===== V1.72 记录仪对讲面板 ===== */
.ptt-sheet{max-width:520px}
.ptt-video{width:100%;aspect-ratio:16/9;background:#0b1220;border-radius:12px;overflow:hidden;
  display:flex;align-items:center;justify-content:center;margin-bottom:4px}
.ptt-video canvas{width:100%!important;height:100%!important;border-radius:12px}
.ptt-state{margin:8px 2px;font-size:14px;color:#334155;line-height:1.5;min-height:22px}
.ptt-btns{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ptt-btns .pc-bigbtn{padding:14px 10px;margin:0;font-size:16px}
.ptt-talk{display:block;width:100%;margin:14px 0 6px;padding:24px;border:none;border-radius:16px;
  background:linear-gradient(180deg,#ef4444,#b91c1c);color:#fff;font-size:24px;font-weight:800;line-height:1.25;
  box-shadow:0 6px 16px rgba(185,28,28,.35);user-select:none;-webkit-user-select:none;touch-action:none;cursor:pointer}
.ptt-talk.active{background:linear-gradient(180deg,#16a34a,#15803d);box-shadow:0 6px 16px rgba(22,163,74,.4)}
.ptt-hint{font-size:12px;color:#64748b;line-height:1.6;margin:6px 2px 10px}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .ptt-talk{font-size:26px;padding:30px}
  .ptt-sheet{max-height:96vh}
}

/* ================= v173 工作流 ================= */
.nav-group{color:#6d87a1;font-size:11px;letter-spacing:3px;padding:14px 12px 5px;font-weight:700;
  text-transform:uppercase;display:flex;align-items:center;gap:8px;cursor:default}
.nav-group::after{content:"";flex:1;height:1px;background:#173a59}
#sidebar .nav-group{background:transparent}
#sidebar .navbtn{padding:10px 12px;font-size:14.5px}
/* 船舶库 */
.lib-chips{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 10px}
.lib-chip{background:#102a43;border:1px solid #2b4a6b;color:#cbd5e1;border-radius:20px;
  padding:6px 13px;font-size:13px;font-weight:600}
.lib-chip.on{background:#1d4ed8;border-color:#3b82f6;color:#fff}
.lib-sec{font-size:13.5px;font-weight:800;color:#93c5fd;margin:14px 2px 8px;
  padding-bottom:5px;border-bottom:1px solid #1d4163}
.lib-grid{display:grid;grid-template-columns:1fr;gap:3px 18px;margin-top:8px}
.lib-kv{display:flex;gap:8px;font-size:13px;line-height:1.55;break-inside:avoid}
.lib-kv span{flex:0 0 78px;color:#8aa3bb}
.lib-kv b{font-weight:600;color:#e2e8f0;word-break:break-all}
@media(min-width:700px){.lib-grid{grid-template-columns:1fr 1fr}.lib-kv.wide{grid-column:1/-1}}
.lib-kv:nth-child(1){}.lib-card .lib-kv:last-child{}
.lib-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:14px 0 20px;color:#cbd5e1}
.lib-pager .btn{flex:0 0 auto;padding:8px 16px}
.lib-pager .btn:disabled{opacity:.4}
.tabbtn-center span{font-size:24px;line-height:1.1}
.tabbtn-center{color:#60a5fa}
.wf-seg{position:sticky;top:0;z-index:5;background:#0b1d31;padding:8px 0}
.wf-tip{background:#102a43;border:1px solid #24466b;border-radius:10px;color:#9fb8d0;font-size:12.5px;line-height:1.6;padding:9px 12px;margin:6px 0 12px}
.wf-sec{background:#0f2740;border:1px solid #1d3d60;border-radius:14px;padding:10px 12px;margin-bottom:14px}
.wf-sec-h{font-size:15px;font-weight:700;color:#e6eef8;display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.wf-sec-h span{font-size:11.5px;color:#7c93ab;font-weight:400}
.wf-sec-done{opacity:.78}
.wf-empty{padding:10px;text-align:center}
.wf-card .wf-coord{font-family:ui-monospace,Consolas,monospace;color:#9fd0ff;font-size:12.5px}
.wf-actions{flex-wrap:wrap;gap:6px;margin-top:8px}
.wf-actions .btn{padding:9px 12px;font-size:13.5px}
/* 待办卡：一个大主键 + 一排图标键 */
.wf-actrow{display:flex;align-items:center;gap:8px;margin-top:9px;flex-wrap:wrap}
.wf-main{flex:1 1 auto;min-width:128px;padding:11px 14px;font-size:14.5px;font-weight:700}
.wf-ibs{display:flex;gap:6px;flex-wrap:wrap}
.wf-ib{width:42px;height:42px;border:none;border-radius:10px;background:#1e293b;color:#e2e8f0;
  font-size:18px;line-height:1;box-shadow:0 1px 4px rgba(0,0,0,.3);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center}
.wf-ib:active{transform:scale(.92)}
.wf-ib.warn{background:#b45309}.wf-ib.ok{background:#15803d}
.wf-ib.danger{background:#b91c1c}
.wf-over{border-color:#b91c1c!important;box-shadow:0 0 0 1px #b91c1c inset}
.wf-stale{border-color:#d97706!important}
.wf-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.wf-toolbar select,.wf-toolbar input{background:#0b1d31;border:1px solid #2b4a6b;color:#e6eef8;border-radius:8px;padding:9px;font-size:14px}
.wf-vf,.wf-arch{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:9px 4px;border-bottom:1px solid #173450}
.wf-vf .btn,.wf-arch .btn{white-space:nowrap}
.wf-video{width:220px;max-width:46%;border-radius:8px;background:#000}
.wf-thumb{width:120px;height:80px;object-fit:cover;border-radius:8px;border:1px solid #2b4a6b}
.wf-prog{min-width:150px;text-align:right}
.wf-fail{color:#f87171}
.wf-comm{margin-top:8px;background:#0b1d31;border-radius:10px;padding:9px}
.wf-comm-i{border-bottom:1px solid #173450;padding:7px 2px;font-size:13px}
.wf-comm-i span{float:right;color:#7c93ab;font-size:11.5px}
.wf-comm-form{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.wf-comm-form select,.wf-comm-form input{background:#102a43;border:1px solid #2b4a6b;color:#e6eef8;border-radius:8px;padding:8px;font-size:13px}
.wf-comm-form input{flex:1;min-width:140px}
.wf-audio textarea,.wf-tpl textarea{width:100%;background:#0b1d31;border:1px solid #2b4a6b;color:#e6eef8;border-radius:8px;padding:9px;font-size:13.5px;box-sizing:border-box}
.wf-lab{display:block;color:#9fb8d0;font-size:12.5px;margin:10px 0 4px}
.wf-tpl{display:grid;grid-template-columns:150px 1fr auto auto;gap:6px;align-items:center;margin:6px 0}
.wf-tpl input{background:#0b1d31;border:1px solid #2b4a6b;color:#e6eef8;border-radius:8px;padding:8px;font-size:13px}
@media (max-width:820px){
  .wf-tpl{grid-template-columns:1fr 1fr}
  .wf-vf,.wf-arch{flex-direction:column;align-items:stretch}
  .wf-video{width:100%;max-width:100%}
  .wf-actions .btn{flex:1 1 30%;padding:13px 6px;font-size:14px}
  .wf-ib{width:48px;height:48px;font-size:20px}
  .wf-main{flex:1 1 100%;padding:14px;font-size:16px}
}

/* ===== v177 手机三栏：网｜海上态势｜船 ===== */
.mobile-only{display:none}
#topbar .top-icons{display:flex;align-items:center;gap:10px;margin-left:auto}
#topbar .topicon{background:rgba(255,255,255,.14);color:#fff;border:none;border-radius:9px;
  width:32px;height:32px;font-size:15px;line-height:1;display:none;align-items:center;justify-content:center}
#topbar .clock{margin:0 2px}

/* 手机底部三栏 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .mobile-only{display:inline-flex}
  #topbar .topicon.mobile-only{display:inline-flex}
  #topbar .title{font-size:14px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46vw}
  #tabbar{padding:4px 6px calc(4px + env(safe-area-inset-bottom))}
  #tabbar .tabbtn{font-size:13px;color:#93a8bd;gap:1px}
  #tabbar .tabbtn span{font-size:21px}
  #tabbar .tabbtn.active{color:#7dd3fc}
  #tabbar .tabbtn-center{flex:0 0 64px}
  #tabbar .tabbtn-center span{
    width:46px;height:46px;margin-top:0;border-radius:50%;
    background:linear-gradient(135deg,#38bdf8,#1565c0);
    border:none;box-shadow:0 2px 7px rgba(2,132,199,.35);
    display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff}
  #tabbar .tabbtn-center.active span{background:linear-gradient(135deg,#38bdf8,#0ea5e9)}
  #tabbar .tabbtn-center{font-size:10px;color:#cfe3f5;margin-top:2px}
  #tabbar .tabbtn .badge{top:-2px;right:calc(50% - 24px);min-width:16px;height:16px;font-size:10px}

  /* 浮动快捷工具：默认收成一个钮，不挡图 */
  #fab-main{position:absolute;right:12px;bottom:132px;z-index:601;width:58px;height:58px;
    border-radius:50%;border:none;background:linear-gradient(135deg,#0ea5e9,#0369a1);
    color:#fff;font-size:24px;box-shadow:0 4px 16px rgba(2,132,199,.55);display:inline-flex;
    align-items:center;justify-content:center}
  #fab-main:active{transform:scale(.93)}
  body.fab-collapsed #coord-fab,
  body.fab-collapsed #photo-fab,
  body:not(.fab-collapsed) #fab-main{display:none}

  /* 工作页顶部手机快捷条 */
  .mquick{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;-webkit-overflow-scrolling:touch}
  .mquick button{flex:none;background:#12304d;color:#cfe3f5;border:1px solid #21507a;border-radius:18px;
    padding:7px 14px;font-size:13px;font-weight:600;white-space:nowrap}
  .mquick button:active{background:#163d63}
}
@media (min-width:761px){
  #fab-main{display:none !important}
  .mquick{display:none}
}

/* v177b 手机端细节修整 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 海区计数卡：3+2 两行排开，不再横向拖 */
  #zonecards{flex-wrap:wrap;overflow:visible;gap:5px;left:6px;right:6px;bottom:8px}
  #zonecards .zcard{flex:1 1 30%;min-width:0;padding:5px 7px;font-size:10px;line-height:1.32;
    border-radius:8px;background:rgba(10,25,40,.93)}
  #zonecards .zcard:nth-child(n+4){flex:1 1 45%}
  #zonecards .zcard b{font-size:12px}
  #zonecards .zc-line{white-space:normal;word-break:keep-all;font-size:9.5px;opacity:.92}
  #zonecards .zc-pend{font-size:9.5px;padding:1px 5px}
  /* 快捷条隐藏滚动条 */
  .mquick{scrollbar-width:none;-ms-overflow-style:none;padding-bottom:6px}
  .mquick::-webkit-scrollbar{display:none}
  /* 弹窗在手机上贴边更紧凑 */
  .modal-card,.sheet{max-width:100vw}
}

/* ===== v177c 手机端 在海船只/网具总览页 ===== */
.mpage{padding:10px 10px 16px}
.mstat{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:10px}
.mstat-card{background:#102943;border:1px solid #1d4163;border-radius:10px;padding:8px 4px;
  display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0}
.mstat-card b{font-size:21px;line-height:1.1;color:#eaf2fb;font-variant-numeric:tabular-nums}
.mstat-card span{font-size:11px;color:#9db4c9;white-space:nowrap}
.mstat-card.msc-ok{border-color:#15803d;background:#0f2e22}
.mstat-card.msc-ok b{color:#4ade80}
.mstat-card.msc-warn{border-color:#b45309;background:#33240a}
.mstat-card.msc-warn b{color:#fbbf24}
.mstat-card.msc-bad{border-color:#b91c1c;background:#3a1414}
.mstat-card.msc-bad b{color:#f87171}
.mchips{display:flex;gap:7px;overflow-x:auto;padding:2px 0 10px;scrollbar-width:none}
.mchips::-webkit-scrollbar{display:none}
.mchip{flex:none;background:#12304d;color:#cfe3f5;border:1px solid #21507a;border-radius:18px;
  padding:7px 13px;font-size:13px;font-weight:600;white-space:nowrap}
.mchip b{color:#7dd3fc;font-variant-numeric:tabular-nums}
.mchip.active{background:#1565c0;border-color:#38bdf8;color:#fff}
.mchip.active b{color:#fff}
.mpatrol{background:#0f2a40;border:1px solid #1d4163;border-radius:8px;padding:7px 10px;
  font-size:12.5px;color:#93c5fd;margin-bottom:10px}
.mgrp{margin-bottom:12px}
.mgrp-h{font-size:12.5px;font-weight:700;color:#8fb0cc;padding:2px 2px 6px;display:flex;gap:8px;align-items:center}
.mgrp-h span{background:#1d4163;color:#cfe3f5;border-radius:10px;padding:0 8px;font-size:11px}
.mrow{display:flex;align-items:center;gap:9px;background:#102943;border:1px solid #1c3a59;
  border-left:3px solid #33567a;border-radius:10px;padding:9px 10px;margin-bottom:7px;cursor:pointer}
.mrow:active{background:#143352}
.mrow-viol{border-left-color:#ef4444;background:#241a24}
.mrow-ok{border-left-color:#22c55e}
.mrow-net{border-left-color:#7c3aed}
.mico{flex:none;width:38px;height:38px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:800;color:#fff}
.mico-fish{background:linear-gradient(135deg,#1d4ed8,#1e40af)}
.mico-aqua{background:linear-gradient(135deg,#7c3aed,#5b21b6)}
.mico-other{background:linear-gradient(135deg,#475569,#334155)}
.mico-patrol{background:linear-gradient(135deg,#0ea5e9,#0369a1)}
.mico-net{background:linear-gradient(135deg,#7c3aed,#4c1d95)}
.mbody{flex:1;min-width:0}
.mline1{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:14px}
.mline1 b{color:#eaf2fb;font-size:14px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mline2{font-size:11.5px;color:#8fa8c0;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mright{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:2px;font-size:11px;color:#fbbf24;max-width:86px;text-align:right}
.mright small{color:#7d96ad;font-size:10.5px}
.mtag{font-size:10px;border-radius:5px;padding:1px 5px;white-space:nowrap;font-weight:600}
.tag-ok{background:#14532d;color:#86efac}
.tag-bad{background:#7f1d1d;color:#fca5a5}
.tag-viol{background:#dc2626;color:#fff}
.tag-sz{background:#1e3a5f;color:#93c5fd}
.tag-stale{background:#3f3f46;color:#d4d4d8}
.tag-warn{background:#78350f;color:#fcd34d}
.tag-aqua{background:#065f46;color:#6ee7b7}
.mempty{text-align:center;color:#7d96ad;padding:40px 0;font-size:14px}
.mfoot{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.mfoot-btn{background:#12304d;color:#cfe3f5;border:1px solid #21507a;border-radius:10px;
  padding:12px;font-size:13.5px;font-weight:600}
.mfoot-btn:active{background:#163d63}
@media (min-width:761px){
  .mpage{max-width:720px;margin:0 auto}
}

/* ===== v177f 手机端全面整理：去重、紧凑 ===== */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 顶栏去掉与浏览器/PWA标题重复的大标题，只留功能图标 */
  #topbar .title{display:none}
  #topbar{justify-content:flex-end;padding:6px 10px}
  #topbar .top-icons{gap:10px}
  .topicon{width:38px;height:38px;font-size:18px}
  #clock{font-size:12.5px}
  /* 海图页不再叠海区计数卡（船/网两栏已有分组统计） */
  #zonecards{display:none !important}
  /* 图例面板：只留紧凑标题条，不放大收起按钮 */
  #lg-collapse-mobile{display:none !important}
  #maplegend{max-width:210px}
  #maplegend .lg-shots{display:flex;flex-wrap:wrap;gap:4px}
  #maplegend .shot-btn{padding:5px 9px;font-size:12px}
  /* 浮动工具钮下移（计数卡已移除） */
  #fab-main{bottom:92px !important}
  /* 抽屉头部紧凑 */
  .sh-title-row{flex-wrap:wrap;gap:6px}
  .sh-name{font-size:19px}
  .sh-title-row .tag{font-size:12px;padding:3px 9px;border-radius:6px}
  .sh-tags{display:flex;flex-wrap:wrap;gap:6px;margin:7px 0 2px}
  .infocard{margin:8px 0}
  .ic-row{padding:8px 4px}
  .ic-k{width:64px;font-size:13px}
  .ic-v{font-size:14px}
  /* 无电话提示改成小字，不占大按钮 */
  .nophone{color:#8fa8c0;font-size:13px;text-align:center;padding:8px;margin:4px 0;
    background:#0d2136;border:1px dashed #24466a;border-radius:8px}
  .btn-addphone{width:100%;padding:10px;font-size:13px;margin-top:0}
  .call-btn{padding:13px;font-size:15px}
  /* 大横幅只保留信号停滞安全提示，身份提示已进头部标签 */
  .big-banner{padding:9px 12px;font-size:13px}
  /* 折叠区 summary 增大好按 */
  .sheet-fold summary{padding:12px 6px;font-size:14px}
}

/* ===== v177i 船舶库：手机去分段、白名单本地筛、卡片紧凑 ===== */
.lib-hint{background:#0f2a40;border:1px dashed #24507a;border-radius:8px;color:#9cc4e6;
  font-size:12.5px;line-height:1.6;padding:10px 12px;margin:8px 0}
.lib-keyline{font-size:13px;color:#cfe0f0;margin:5px 0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-telline{margin:2px 0}
.lib-btnrow{margin-top:7px}
details.lib-full > summary{list-style:none;cursor:pointer;color:#7dd3fc;font-size:13px;
  padding:7px 2px;user-select:none}
details.lib-full > summary::-webkit-details-marker{display:none}
details.lib-full > summary::before{content:"▸ ";}
details.lib-full[open] > summary::before{content:"▾ ";}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 手机端不显示清船/清网/全部分段（底部三栏+工单已覆盖） */
  #ship-seg{display:none !important}
  .lib-search{margin:2px 0 8px}
  .lib-card{padding:11px 12px}
  .lib-card .name{font-size:15.5px}
  .lib-grid{margin-top:6px}
  .lib-kv span{font-size:12px}
  .lib-kv b{font-size:12.5px}
  .lib-full .lib-grid{border-top:1px solid #1c3a59;padding-top:7px;margin-top:4px}
}
@media (min-width:761px){
  details.lib-full > summary{display:none}
  details.lib-full .lib-grid{display:grid}
}
/* v177l 手机现场相机/摄像机（全屏取景，直接调摄像头，不进相册） */
#cam-wrap{position:fixed;inset:0;z-index:3000;background:#000;overflow:hidden;display:flex;align-items:center;justify-content:center}
#cam-video{width:100%;height:100%;object-fit:cover;background:#000}
.cam-osd{position:absolute;top:calc(env(safe-area-inset-top,0px) + 12px);left:12px;right:12px;z-index:2;
  color:#ffeb3c;font:700 14px/1.5 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  text-shadow:0 1px 3px rgba(0,0,0,.9),0 0 2px #000;pointer-events:none;letter-spacing:.2px}
.cam-x{position:absolute;top:calc(env(safe-area-inset-top,0px) + 10px);right:14px;z-index:3;
  width:42px;height:42px;border-radius:50%;border:0;background:rgba(0,0,0,.5);color:#fff;font-size:20px}
.cam-flip{position:absolute;top:calc(env(safe-area-inset-top,0px) + 10px);right:64px;z-index:3;
  width:42px;height:42px;border-radius:50%;border:0;background:rgba(0,0,0,.5);color:#fff;font-size:18px}
.cam-ctrl{position:absolute;left:0;right:0;bottom:calc(env(safe-area-inset-bottom,0px) + 26px);z-index:3;
  display:flex;align-items:center;justify-content:center;gap:34px}
.cam-shutter{width:74px;height:74px;border-radius:50%;border:5px solid #fff;background:#fff;
  box-shadow:0 0 0 3px rgba(0,0,0,.35);padding:0;flex:0 0 auto}
.cam-shutter.rec{background:#e11d48;border-color:#fff}
.cam-shutter.recording{background:#e11d48;animation:campulse 1.1s infinite}
@keyframes campulse{0%,100%{box-shadow:0 0 0 3px rgba(0,0,0,.35)}50%{box-shadow:0 0 0 12px rgba(225,29,72,.35)}}
.cam-album{border:0;background:rgba(255,255,255,.14);color:#fff;border-radius:22px;padding:10px 16px;font-size:14px}
.cam-hint{position:absolute;left:0;right:0;text-align:center;bottom:calc(env(safe-area-inset-bottom,0px) + 108px);
  color:#fff;font-size:14px;text-shadow:0 1px 2px #000;z-index:3}
.cam-msg{position:absolute;inset:0;z-index:4;background:#111;color:#eee;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:18px;padding:32px;text-align:center;font-size:15px;line-height:1.7}
.cam-fb-btns{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-top:10px}
.cam-fb-btns .btn{padding:12px 18px;font-size:15px}


/* ===== v178：两区制 + 事件模型重构 + 抽屉 SOP 重排 ===== */
.sh-name{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sh-idtags{display:inline-flex;gap:4px;flex-wrap:wrap;vertical-align:middle}
.sh-idtags .tag{font-size:11px;font-weight:700;padding:2px 7px}
.sh-state{margin-top:7px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.st-pill{font-size:12.5px;font-weight:700;border-radius:20px;padding:3px 10px;border:1px solid}
.st-mov{color:#7dd3fc;border-color:#0ea5e9;background:rgba(14,165,233,.12)}
.st-work{color:#fca5a5;border-color:#ef4444;background:rgba(239,68,68,.14)}
.st-obs{color:#fcd34d;border-color:#d97706;background:rgba(217,119,6,.14)}
.sh-coord.edge-warn{background:rgba(234,179,8,.12);border-radius:8px;padding:5px 7px}
.sh-coord.edge-danger{background:rgba(239,68,68,.16);border-radius:8px;padding:5px 7px}
.edge-warn-line{margin-top:7px;font-size:12.5px;color:#fca5a5;background:rgba(239,68,68,.1);
  border:1px solid rgba(239,68,68,.35);border-radius:8px;padding:6px 9px}
.azone-line{margin-top:7px;font-size:12.5px;color:#fcd34d;background:rgba(217,119,6,.1);
  border:1px solid rgba(217,119,6,.4);border-radius:8px;padding:6px 9px;line-height:1.45}
.azone-line b{color:#fde68a}
.review-box{margin:10px 0 4px;border:1px solid #b45309;border-radius:12px;background:rgba(217,119,6,.08);padding:9px 10px}
.rb-title{font-size:13.5px;font-weight:800;color:#fcd34d;margin-bottom:7px}
.rb-btns{margin-top:8px}
.viol-banner{margin:10px 0 2px;background:rgba(239,68,68,.16);border:1px solid #ef4444;
  border-radius:12px;padding:9px 11px;font-size:13.5px;font-weight:800;color:#fecaca;line-height:1.5}
.viol-banner .meta{font-weight:500;color:#fca5a5}
.sop-title{margin-top:18px}
.sop-step{display:flex;align-items:baseline;gap:8px;margin:13px 0 7px;padding-left:9px;
  border-left:3px solid #1d4ed8;font-size:14.5px;color:#dbeafe}
.sop-step b{color:#93c5fd}
.sop-hint{font-size:12px;color:#8fa8c0;font-weight:400}
.phone-row{display:flex;align-items:center;gap:10px;margin:6px 0 10px;flex-wrap:wrap}
.nophone-inline{color:#8fa8c0;font-size:13px}
.btn-addphone{padding:8px 12px;font-size:13px;margin:0}
.rec-head{margin:6px 0 2px}
.btn-sm{padding:5px 11px;font-size:12.5px}
@media (pointer:coarse){
  #sheet{max-height:93vh}
  #sheet.open .sheet-handle{margin-top:2px}
  .sop-step{font-size:15px}
  .sop-hint{display:block;width:100%;margin-top:2px}
}

/* 图斑管理 */
.plot-eyes{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.plot-eyes .btn.off{opacity:.5}
.plot-tools{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.plot-tools select,.plot-tools input{padding:6px 8px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px}
.plot-tools input{min-width:120px}
.plot-list{max-height:52vh;overflow:auto;border:1px solid #e2e8f0;border-radius:8px}
.plot-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid #eef2f7;font-size:13px}
.plot-row.hidden-row{opacity:.5}
.plot-row{color:#0f172a}
.plot-name{color:#0f172a}
.plot-vis{color:#0f172a}
.plot-row .tag{color:#334155}

.plot-vis{cursor:pointer;font-size:16px}
.plot-name{flex:1;font-weight:600;min-width:0;word-break:break-all}
.plot-row .tag{background:#f1f5f9;color:#334155;border-radius:4px;padding:1px 6px;font-size:11px;white-space:nowrap}
.plot-ops{display:flex;gap:8px;white-space:nowrap}
.plot-ops .lk{color:#2563eb;cursor:pointer}
.plot-ops .lk.danger{color:#dc2626}
.plot-coord textarea{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:6px;padding:8px;font-size:13px}
.plot-pop{font-size:13px;line-height:1.5;min-width:180px}
.plot-pop .meta{color:#475569;margin-top:2px}


/* ===== v181 喊话面板 ===== */
#hail-fab{position:absolute;right:14px;bottom:180px;z-index:600;width:74px;min-height:74px;
  border:none;border-radius:50%;background:linear-gradient(135deg,#ef4444,#b91c1c);
  color:#fff;font-size:14px;font-weight:700;line-height:1.25;box-shadow:0 4px 14px rgba(185,28,28,.45);
  padding:8px 4px}
#hail-fab:active{transform:scale(.94)}
@media(min-width:761px){#hail-fab{bottom:276px;right:24px}}
body.fab-collapsed #hail-fab{display:none !important}
.hail-sheet{max-width:640px}
.hail-target{background:#0f2238;border:1px solid #1e3a5f;border-radius:10px;padding:10px 12px;margin-bottom:10px}
.hail-t-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hail-t-row b{font-size:17px}
.hail-t-label{color:#7dd3fc;font-size:13px;min-width:64px}
.hail-call-row{display:flex;align-items:center;gap:8px;margin-top:8px}
.hail-call-row .fld{flex:1;font-size:15px;padding:8px 10px}
.hail-prefix{margin-top:8px;background:#172e49;border-left:3px solid #38bdf8;padding:7px 10px;border-radius:6px;font-size:16px;font-weight:600;color:#fde68a}
.hail-sec-h{font-weight:700;margin:12px 0 8px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.hail-hint{font-weight:400;font-size:12px;color:#94a3b8}
#hail-sel-n{margin-left:auto;color:#f87171;font-weight:700;font-size:13px}
.hail-tpl{display:flex;gap:10px;align-items:flex-start;background:#10253c;border:1px solid #1f3b5c;border-radius:10px;padding:10px;margin-bottom:8px}
.hail-tpl.on{border-color:#f87171;box-shadow:0 0 0 1px rgba(248,113,113,.35) inset}
.hail-chk{margin-top:4px}
.hail-chk input{width:20px;height:20px}
.hail-tpl-main{flex:1;min-width:0}
.hail-tpl-h{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.hail-tpl-h b{font-size:15px}
.hail-tpl-t{color:#cbd5e1;font-size:14px;line-height:1.5}
.hail-tpl-btns{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.hail-editor{background:#0d1f33;border:1px dashed #38bdf8;border-radius:10px;padding:10px;margin:8px 0}
.hail-editor .fld{width:100%;margin-bottom:8px;font-size:14px}
.hail-playbar{display:flex;gap:10px;margin:14px 0 8px;position:sticky;bottom:0;background:#0b1b2d;padding:8px 0}
.hail-big{flex:1;font-size:18px;padding:14px;font-weight:700}
.hail-big.disabled{opacity:.5}
.hail-bt{background:#10253c;border-radius:10px;padding:8px 12px;margin-top:8px;font-size:14px}
.hail-bt summary{font-weight:700;cursor:pointer}
.hail-bt-body{margin-top:8px;line-height:1.8;color:#cbd5e1}
.hail-recs{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.hail-rec-btn{text-align:left}
.hail-note{margin-top:10px;color:#fbbf24}
.hail-main-btn{width:100%;font-size:17px;padding:14px;font-weight:700}
#hail-body{padding-bottom:96px}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){#hail-body{padding-bottom:110px}.hail-big{font-size:17px;padding:13px}.hail-tpl-t{font-size:14.5px}.hail-tpl-h b{font-size:16px}.hail-chk input{width:22px;height:22px}.hail-tpl-btns .btn{padding:9px 16px;font-size:14.5px}}

/* ===== v182 喊话面板：呼叫段/大键盘/分组 ===== */
.hail-callcard{background:#0f2238;border:1px solid #1e3a5f;border-radius:10px;padding:10px 12px;margin-bottom:10px}
.hail-cc-row{display:flex;gap:10px;align-items:stretch}
.hail-prefix-sel{flex:0 0 38%;font-size:17px;font-weight:700;padding:10px 8px;border-radius:8px;background:#172e49;color:#fde68a;border:1px solid #2b527d}
.hail-num-box{flex:1;display:flex;flex-direction:column;justify-content:center;background:#172e49;border:1px solid #2b527d;border-radius:8px;padding:6px 10px}
.hail-num-label{font-size:12px;color:#7dd3fc}
.hail-num-val{font-size:22px;font-weight:800;letter-spacing:3px;color:#fff;min-height:30px}
.hail-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.hk-btn{font-size:22px;font-weight:700;padding:14px 0;border-radius:10px;border:1px solid #2b527d;background:#172e49;color:#fff;touch-action:manipulation}
.hk-btn:active{background:#1d4e89}
.hk-btn.del{background:#3a2a2a;border-color:#7f4b4b;font-size:18px}
.hk-btn.cls{background:#3a2a2a;border-color:#7f4b4b;font-size:17px}
.hail-ocr-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.hail-ocr-row .btn{flex:1;min-width:120px}
.hail-ocr-tip{margin-top:8px;line-height:1.5}
.hail-grp-h{margin:12px 0 6px;font-size:13px;font-weight:700;color:#7dd3fc;border-left:3px solid #38bdf8;padding-left:8px}
.guide-sheet{max-width:720px}
.guide-card{background:#10253c;border:1px solid #1f3b5c;border-radius:10px;padding:12px 14px;margin-bottom:10px;line-height:1.75;font-size:14.5px;color:#dbe6f2}
.guide-card .guide-h{font-size:16px;font-weight:800;color:#fde68a;margin-bottom:6px}
.guide-card.guide-red{border-color:#b91c1c;background:#2a1414}
.guide-card.guide-red .guide-h{color:#fca5a5}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .hail-prefix-sel{flex:0 0 42%;font-size:15px}
  .hail-num-val{font-size:20px}
  .hk-btn{font-size:24px;padding:16px 0}
  .guide-card{font-size:14px;line-height:1.7}
}

/* ===== v183 手机弹层适配 + 取证信息选择 + 喊话面板深色 ===== */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .modal-mask{align-items:stretch}
  .modal-sheet{height:100dvh;max-height:100dvh;border-radius:0}
  .modal-head{border-radius:0;padding:13px 16px;font-size:16px}
  .modal-body{padding:14px 14px calc(20px + env(safe-area-inset-bottom))}
}
.hail-sheet{background:#0b1b2d}
.hail-sheet .modal-head{background:#0f2238;color:#f8fafc;border-bottom:1px solid #1e3a5f;border-radius:18px 18px 0 0}
.hail-sheet .modal-x{background:#1d3a5c;color:#e2e8f0}
#hail-body{background:#0b1b2d;color:#dbe6f2}
#hail-body .meta{color:#94a3b8}
.hail-playbar{background:#0b1b2d;padding-bottom:calc(10px + env(safe-area-inset-bottom));
  margin-bottom:calc(-8px - env(safe-area-inset-bottom));z-index:6}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .hail-sheet .modal-head{border-radius:0}
  .hail-playbar{position:sticky;bottom:calc(-14px - env(safe-area-inset-bottom))}
}
.et-lbl{font-size:14px;font-weight:700;margin-bottom:8px}
.et-chips{display:flex;flex-wrap:wrap;gap:8px}
.et-chips .btn{border:1px solid #cbd5e1;background:#f1f5f9;color:#0f172a;font-size:14px;padding:9px 14px}
.et-chips .btn.primary{background:#0284c7;border-color:#0284c7;color:#fff}
.hail-sheet .et-chips .btn, .modal-sheet .et-chips .btn{min-height:42px}
/* v183c 浅色弹层文字 */
.modal-sheet .et-lbl{color:#0f172a}
.modal-sheet .meta{color:#64748b}


/* ============ v185 手机 APP 外壳（桌面端隐藏） ============ */
.mobile-shell{display:none}
.m-sheet .ms-head,.m-sheet .mnav{display:none}
.m-locdot{display:block;width:16px;height:16px;border-radius:50%;background:#29b6f6;border:3px solid #fff;
 box-shadow:0 0 0 6px rgba(41,182,246,.35),0 0 12px rgba(41,182,246,.9)}

@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 顶部旧标题栏不要，地图全屏 */
  #topbar{display:none!important}
  #zonecards{display:none!important}
  #fab-main,#coord-fab,#photo-fab,#hail-fab{display:none!important}

  /* 左侧抽屉导航 */
  #sidebar{display:flex!important;position:fixed!important;z-index:1600;left:0;top:0;bottom:calc(64px + env(safe-area-inset-bottom));
    width:268px;max-width:82vw;transform:translateX(-104%);transition:transform .22s ease;
    border-radius:0 16px 16px 0;box-shadow:0 0 36px rgba(0,0,0,.5);padding-top:calc(10px + env(safe-area-inset-top))}
  body.m-drawer #sidebar{transform:translateX(0)}
  #m-drawer-mask{position:absolute;inset:0;z-index:1550;background:rgba(0,0,0,.45);display:none}
  body.m-drawer #m-drawer-mask{display:block}

  /* 顶部搜索条 */
  #m-topbar{display:flex;align-items:center;gap:8px;position:absolute;z-index:650;
    top:calc(env(safe-area-inset-top) + 7px);left:8px;right:8px}
  #m-menu-btn{flex:none;width:40px;height:40px;border-radius:12px;background:#fff;border:none;
    font-size:19px;color:#1565c0;box-shadow:0 2px 8px rgba(0,0,0,.18)}
  #m-search{flex:1;height:40px;border:none;border-radius:12px;background:#fff;color:#8aa0b5;
    font-size:13px;display:flex;align-items:center;gap:7px;padding:0 12px;box-shadow:0 2px 8px rgba(0,0,0,.18)}
  #m-search .ms-ico{font-size:14px}
  #m-search .ms-ph{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  .leaflet-control-zoom{display:none!important}
  /* 图例下移，不与搜索条重叠 */
  #maplegend{top:56px;max-width:200px}

  /* 右侧白色工具栈 */
  #m-tools{display:flex;flex-direction:column;gap:11px;position:absolute;z-index:650;right:9px;top:118px}
  #m-tools button{width:44px;height:44px;border-radius:13px;background:#fff;border:none;font-size:22px;
    font-weight:700;color:#1f4e79;box-shadow:0 2px 8px rgba(0,0,0,.22);padding:0;
    display:flex;align-items:center;justify-content:center}
  #m-tools button:active{background:#e8f2fe}
  /* v467 加减号中间的当前级数显示（半透明阴影框，不拦截手势） */
  #m-zoom-lv{align-self:center;min-width:44px;height:30px;padding:0 5px;border-radius:10px;
    background:rgba(10,28,50,.55);color:#fff;font-size:14px;font-weight:800;letter-spacing:.3px;
    display:flex;align-items:center;justify-content:center;pointer-events:none;
    box-shadow:0 1px 6px rgba(0,0,0,.3);font-variant-numeric:tabular-nums;
    backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
  #m-hail{display:flex;align-items:center;gap:4px;position:absolute;z-index:650;right:9px;
    bottom:calc(120px + env(safe-area-inset-bottom));height:42px;padding:0 16px;border:none;border-radius:21px;
    background:linear-gradient(135deg,#ef5350,#c62828);color:#fff;font-size:15px;font-weight:700;
    box-shadow:0 4px 14px rgba(198,40,40,.45)}

  /* 底部概览条 */
  #m-overview{display:flex;align-items:center;position:absolute;z-index:650;left:8px;right:8px;
    bottom:calc(63px + env(safe-area-inset-bottom));background:#fff;border-radius:13px;height:46px;
    box-shadow:0 2px 10px rgba(0,0,0,.2);padding:0 4px}
  #m-overview button{flex:1;background:none;border:none;display:flex;flex-direction:column;align-items:center;
    justify-content:center;gap:1px;color:#64748b;font-size:10px;line-height:1}
  #m-overview b{font-size:16px;color:#1565c0;font-weight:800}
  #m-overview .mo-arrow{flex:0 0 34px;font-size:18px;color:#94a3b8}

  /* 底部 tabbar 白底 */
  #tabbar{background:#fff;border-top:1px solid #e2e8f0}
  #tabbar .tabbtn{color:#64748b}
  #tabbar .tabbtn.active{color:#1565c0}
  #tabbar .tabbtn-center{color:#fff}
  #tabbar .tabbtn .badge{background:#e53935;color:#fff}

  /* 船/网底部工作台 */
  .m-sheet{display:none;position:absolute!important;left:0;right:0;z-index:900;
    bottom:calc(64px + env(safe-area-inset-bottom));max-height:calc(100% - 72px);
    flex-direction:column;background:#0e2238;border-radius:18px 18px 0 0;
    box-shadow:0 -8px 30px rgba(0,0,0,.5);overflow:hidden;top:auto!important;height:auto}
  body.m-mode-ship #tab-mships,body.m-mode-net #tab-mnets{display:flex;animation:mSheetUp .22s ease-out}
  body.m-full .m-sheet{top:calc(8px + env(safe-area-inset-top))!important;bottom:auto!important;height:calc(100dvh - 72px - env(safe-area-inset-top))!important;max-height:none}
  .m-sheet .ms-head{display:flex;align-items:center;gap:8px;padding:9px 12px;
    background:#12304d;border-bottom:1px solid #1d4163;flex:none}
  .m-sheet .ms-title{font-size:14px;font-weight:700;color:#e8f2fe;flex:1}
  .ms-btn{width:32px;height:32px;border-radius:9px;border:1px solid #2a527a;background:#16395c;color:#cfe3f5;
    font-size:15px;padding:0;display:flex;align-items:center;justify-content:center}
  .m-sheet .mnav{display:block;flex:none;padding:9px 10px 4px;background:#0e2238}
  .mnav-search{width:100%;box-sizing:border-box;height:36px;border-radius:9px;border:1px solid #2a527a;
    background:#0a1c30;color:#dcebfb;font-size:13px;padding:0 11px;margin-bottom:8px}
  .mnav-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}
  .mnav-cell{position:relative;border:1px solid #21476b;background:#13304d;border-radius:11px;color:#cfe3f5;
    padding:8px 3px 7px;display:flex;flex-direction:column;align-items:center;gap:2px}
  .mnav-cell .mnav-ico{font-size:18px;line-height:1}
  .mnav-cell .mnav-n{font-size:17px;font-weight:800;color:#fff;line-height:1.1}
  .mnav-cell .mnav-lb{font-size:10.5px;color:#9db8d2}
  .mnav-cell.active{border-color:#38bdf8;background:#16456d;box-shadow:0 0 0 1px #38bdf8 inset}
  .mnav-cell.mnav-bad .mnav-n{color:#ff7676}
  .mnav-cell.mnav-warn .mnav-n{color:#ffb74d}
  .mnav-cell.mnav-ok .mnav-n{color:#66d18e}
  .mnav-patrol{margin-top:7px;font-size:11.5px;color:#8fd3ff;background:#102a45;border:1px solid #21476b;
    border-radius:9px;padding:6px 9px}
  .m-sheet .ms-list{position:static;inset:auto}
  .ms-list{display:none}
  body.m-full .ms-list{display:block;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .m-sheet .mstat,.m-sheet .mchips,.m-sheet .mpatrol{display:none!important}
  .m-sheet .mpage{padding:8px 10px 14px}
}
/* _v433 底部工作台 GPU 上滑（替代瞬间弹出）；JS把列表/聚合重建延后一帧，避免卡顿 */
@keyframes mSheetUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
body.m-mode-all #tab-mall{animation:mSheetUp .22s ease-out}

/* ===== v189 手机五栏/过滤交互/精修 ===== */
/* ---------- 手机端 ---------- */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 五栏底导 */
  #tabbar{min-height:60px}
  #tabbar .tabbtn{min-height:54px;font-size:13px}
  #tabbar .tabbtn-center{flex:0 0 64px}
  #tabbar .tabbtn-center span{width:46px;height:46px;font-size:22px;margin-top:0}
  /* 旧浮动概览条与五栏角标重复，移除 */
  #m-overview{display:none!important}

  /* 船/网工作抽屉三态 */
  .m-sheet{max-height:27vh}
  .ms-head{gap:8px;padding:7px 12px}
  .ms-title{flex:1;font-size:15px}
  .ms-listgo{height:36px;border:1px solid #2a527a;background:#16395c;color:#cfe3f5;
    border-radius:9px;padding:0 12px;font-size:13px;font-weight:700;flex:none}
  .ms-x{width:36px;height:36px;border-radius:50%;border:none;background:#dc2626;color:#fff;
    font-size:16px;font-weight:700;flex:none;line-height:1}
  body.m-filtered .ms-x,body.m-full .ms-x{width:46px;height:46px;font-size:20px}
  body.m-full .ms-listgo{display:none}
  body.m-full .ms-title{font-size:15px}
  .mfilter-bar{display:none}
  body.m-filtered .mfilter-bar{display:flex;align-items:center;gap:8px;padding:8px 12px}
  .mf-chip{flex:1;text-align:left;background:#16456d;border:1px solid #38bdf8;color:#fff;
    border-radius:10px;padding:10px 12px;font-size:14px;font-weight:700;line-height:1.2}
  .mf-chip b{color:#fde68a;font-variant-numeric:tabular-nums}
  .mf-btn{border:1px solid #2a527a;background:#16395c;color:#cfe3f5;border-radius:10px;
    height:42px;padding:0 13px;font-size:13px;font-weight:700;flex:none}
  .mf-x{width:42px;height:42px;border-radius:50%;border:none;background:#dc2626;color:#fff;
    font-size:17px;font-weight:700;flex:none;line-height:1}
  body.m-filtered .m-sheet .mnav,body.m-full .m-sheet .mnav{display:none!important}
  body.m-filtered .m-sheet .ms-head{display:none}
  /* 全屏列表：搜索+分类条（导航态隐藏，避免重复） */
  .m-list-search{display:none}
  body.m-full .m-list-search{display:block;width:100%;box-sizing:border-box;height:44px;
    border-radius:10px;border:1px solid #2a527a;background:#0a1c30;color:#dcebfb;
    font-size:14px;padding:0 12px;margin-bottom:8px}
  .m-sheet .mstat{display:none!important}
  .m-sheet .mchips{display:none!important}
  body.m-full .m-sheet .mchips{display:flex!important}
  body.m-full .m-sheet .mpatrol{display:block!important}
  .mfoot-btn{min-height:48px;font-size:14px}
  .mnav-patrol{font-size:12px;color:#93c5fd;background:#0f2a40;border:1px solid #1d4163;
    border-radius:8px;padding:7px 10px;margin-top:8px}
  .mnav-cell.active{outline:2px solid #38bdf8;outline-offset:-2px}

  /* 图例收起：只留“图层”钮 + 实时绿点 */
  #maplegend.min #fresh-text{display:none}
  #maplegend.min #lg-minhint{display:none}
  #maplegend.min #freshline::after{content:"●";color:#4ade80;margin-left:6px;font-size:10px}

  /* 喊话：键盘默认折叠、停止加大 */
  .hail-kp-dt{margin-top:8px;border:1px solid #2b527d;border-radius:10px;background:#102943}
  .hail-kp-dt summary{padding:12px 12px;font-size:14px;font-weight:700;color:#7dd3fc;cursor:pointer}
  .hail-kp-dt[open] summary{border-bottom:1px solid #2b527d}
  .hail-kp-dt .hail-keypad{margin:10px}
  .hail-kp-dt .hk-btn{padding:11px 0;font-size:20px}
  #hail-stop-btn{flex:0 0 96px;background:#7f1d1d!important;color:#fff!important;
    font-size:16px;font-weight:800;border:1px solid #b91c1c}

  /* 船舶库电话大钮 */
  .lib-tel{flex:none;white-space:nowrap;text-decoration:none;background:#15803d!important;
    color:#fff!important;font-weight:800;font-size:15px;padding:10px 15px;border-radius:10px}
  .lib-owner{color:#bcd0e4;font-size:13px;margin:5px 0 2px}

  /* 设置折叠块 */
  .set-dt{background:#132f4a;border:1px solid #1d4163;border-radius:12px;padding:10px 14px;
    margin-bottom:10px}
  .set-dt summary{font-size:15px;font-weight:700;color:#eaf2fb;cursor:pointer;padding:4px 0}

  /* 图斑列表（浅色弹窗内）换行修复 */
  .plot-row{flex-wrap:wrap}
  .plot-vis{background:#e0edff;color:#075985;border-radius:14px;padding:4px 12px;
    font-size:12px;text-decoration:none;white-space:nowrap}
}

/* ---------- 电脑端 ---------- */
@media(min-width:900px){
  #zonecards{bottom:8px}
  #zonecards .zcard{padding:3px 10px;line-height:1.3}
  #zonecards .zcard b{font-size:12.5px}
  #zonecards .zc-line{font-size:10.5px;margin-top:1px}
}
.lib-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;flex-wrap:wrap}
.lib-tel{flex:none;white-space:nowrap;text-decoration:none;background:#15803d;color:#fff;
  font-weight:800;font-size:15px;padding:10px 16px;border-radius:10px}
.lib-tel:active{opacity:.85}
.lib-owner{color:#bcd0e4;font-size:13px;margin:5px 0 2px}
.set-dt{background:#132f4a;border:1px solid #1d4163;border-radius:12px;padding:10px 14px;margin-bottom:10px}
.set-dt summary{font-size:15px;font-weight:700;color:#eaf2fb;cursor:pointer;padding:4px 0}
.plot-row{flex-wrap:wrap}
.plot-vis{background:#e0edff;color:#075985;border-radius:14px;padding:4px 12px;
  font-size:12px;text-decoration:none;white-space:nowrap;cursor:pointer}
/* ===== v191 抽屉分区/紧凑格/聚合 ===== */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 抽屉头部：图标 + 南区/北区/全部 + 列表 + ✕ 一行 */
  .m-sheet{max-height:31vh}
  .m-sheet .ms-head{padding:6px 10px;gap:7px}
  .m-sheet .ms-title{flex:none;font-size:16px;padding:0 2px}
  .mzone{flex:1;display:flex;background:#0a1c30;border:1px solid #21476b;border-radius:9px;
    overflow:hidden;min-width:0}
  .mzone button{flex:1;border:none;background:transparent;color:#9db8d2;font-size:13px;font-weight:700;
    height:34px;padding:0;line-height:34px}
  .mzone button + button{border-left:1px solid #21476b}
  .mzone button.active{background:#16456d;color:#fff}
  .ms-listgo{height:34px;padding:0 10px;font-size:13px}
  .ms-x{width:34px;height:34px;font-size:15px}
  body.m-filtered .ms-listgo{display:none}
  /* 筛选态头部保留（分区切换始终可用），只留头部一个 ✕ */
  body.m-filtered .m-sheet .ms-head{display:flex}
  body.m-filtered .mfilter-bar{padding:6px 10px}
  .mf-btn{height:38px}
  /* 分类格：数字+标签两行，矮而紧凑，固定两行显示全 */
  .m-sheet .mnav{padding:6px 10px 8px}
  .mnav-grid{gap:6px}
  .mnav-cell{min-height:50px;padding:4px 2px;border-radius:10px;
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px}
  .mnav-cell .mnav-ico{display:none}
  .mnav-cell .mnav-n{font-size:19px;line-height:1.15}
  .mnav-cell .mnav-lb{font-size:11px;line-height:1.15;white-space:nowrap;letter-spacing:-.2px}
  .mnav-patrol{margin-top:6px;padding:5px 9px;font-size:11.5px}
  /* 全屏列表分类 chips 换行全显，避免末尾被切 */
  body.m-full .mchips{flex-wrap:wrap;overflow:visible;padding-bottom:8px}
}
/* 聚合圆（全端） */
.mkc{border-radius:50%;color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;
  border:3px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.45);font-size:15px;font-variant-numeric:tabular-nums}
.mkc.c-r{background:#dc2626}.mkc.c-g{background:#16a34a}.mkc.c-o{background:#64748b}
.mkc.c-net{background:#7c3aed}.mkc.c-netp{background:#a21caf}.mkc.c-mix{background:#1d4ed8}
.mkc-pen{animation:pl 1.4s infinite;border-radius:50%}

/* ===== v192 五栏IA/工具抽屉/当页搜索/聚合圆修复 ===== */
/* 聚合圆修复：强制正圆，脉冲用外环，不缩放整体（修复矮椭圆/长方形闪烁） */
.mkc{width:100%;height:100%;box-sizing:border-box;position:relative}
/* v464b 聚合圆随档位缩放（缩放内层，避开 Leaflet 定位 transform） */
.clwrap{width:100%;height:100%}
.clwrap .mkc{transform:scale(var(--mks,1));transform-origin:50% 50%}
.mkc-pen{animation:none}
.mkc-pen::after{content:"";position:absolute;inset:-5px;border-radius:50%;
  border:2px solid #ef4444;animation:pl 1.4s infinite}

/* 气泡第一行：船型标签 + 船名 + 社员 + 右侧大字状态 */
.mk-tip-wrap{min-width:252px}
.mk-tip .tt-row1{display:flex;align-items:center;gap:6px;white-space:nowrap}
.mk-tip .tt-type{display:inline-block;border-radius:9px;padding:0 8px;font-size:12px;font-weight:800;
  line-height:1.7;background:#1e3a5f;color:#bcdcf5;border:1px solid #35639a;white-space:nowrap}
.mk-tip .tt-row1>b{font-size:15.5px}
.mk-tip .tt-mo{margin-left:auto;padding-left:8px;font-size:14.5px;font-weight:900;white-space:nowrap}
.tt-mo-fish{color:#fca5a5}.tt-mo-stop{color:#fcd34d}.tt-mo-run{color:#7dd3fc}.tt-mo-stale{color:#94a3b8}
.mk-tip .tt-row2{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:3px}

@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  :root{--tabbar-h:64px}
  /* 底导：与抽屉等高、简笔图标、中间整圆可见 */
  #tabbar{min-height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
    padding:0 4px env(safe-area-inset-bottom)}
  #tabbar .tabbtn{min-height:var(--tabbar-h)}
  #tabbar .tabbtn .ti{display:flex;align-items:center;justify-content:center;height:25px}
  #tabbar .tabbtn .ti svg{width:23px;height:23px;stroke:currentColor;fill:none}
  #tabbar .tabbtn-center{flex:0 0 62px;padding:0;font-size:0}
  #tabbar .tabbtn-center .tic{margin:0 auto;width:46px;height:46px;border-radius:50%;
    background:linear-gradient(135deg,#38bdf8,#0284c7);border:none;color:#fff;
    font-size:15px;font-weight:800;display:flex;align-items:center;justify-content:center;
    box-shadow:0 2px 7px rgba(2,132,199,.35)}
  body.m-mode-ship #tabbar .tabbtn[data-tab=mships]{color:#1565c0}
  body.m-mode-net #tabbar .tabbtn[data-tab=mnets]{color:#7c3aed}

  /* 工作抽屉与底导连为一体，中间不留地图空带 */
  .m-sheet{bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));border-radius:16px 16px 0 0}
  body.m-full .m-sheet{top:calc(8px + env(safe-area-inset-top))!important;
    height:calc(100dvh - var(--tabbar-h) - env(safe-area-inset-bottom) - 8px)!important}

  /* 左菜单：收窄、可滚动、隐藏与搜索/工具重复项（海区海图/船舶查询/拍照定位/查坐标/图斑） */
  #sidebar{width:min(236px,70vw);overflow-y:auto;-webkit-overflow-scrolling:touch;
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom))}
  body.m-drawer #sidebar .navbtn[data-tab=map],
  body.m-drawer #sidebar .navbtn[data-tab=ships],
  body.m-drawer #sidebar .navbtn.nav-photo,
  body.m-drawer #sidebar .navbtn[onclick="toggleCrosshair()"],
  body.m-drawer #sidebar #nav-plots{display:none}

  /* 右侧只保留缩放，喊话下移，避免与抽屉头挤在一起 */
  #m-tools{top:auto;right:10px;bottom:calc(116px + env(safe-area-inset-bottom));
    flex-direction:column;gap:8px}
  #m-hail{bottom:calc(68px + env(safe-area-inset-bottom))}

  /* 右侧工具抽屉 */
  #m-tools-mask{position:fixed;inset:0;z-index:1550;background:rgba(0,0,0,.45);display:none}
  body.m-tools #m-tools-mask{display:block}
  #m-tools-drawer{display:flex;flex-direction:column;position:fixed;z-index:1600;top:0;right:0;
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));width:min(250px,78vw);
    background:#0e2238;transform:translateX(105%);transition:transform .22s ease;
    border-radius:16px 0 0 16px;box-shadow:0 0 36px rgba(0,0,0,.5);
    padding:calc(12px + env(safe-area-inset-top)) 12px 14px;
    overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.m-tools #m-tools-drawer{transform:none}
  .mtd-head{display:flex;align-items:center;color:#e8f2fe;font-size:16px;font-weight:800;margin-bottom:12px}
  .mtd-x{margin-left:auto;width:34px;height:34px;border-radius:50%;border:none;background:#dc2626;
    color:#fff;font-size:15px;flex:none}
  .mtd-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .mtd-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
    min-height:76px;border:1px solid #21476b;background:#13304d;color:#dcebfb;border-radius:13px;
    font-size:12.5px;font-weight:700}
  .mtd-item:active{background:#16456d}
  .mtd-ico{font-size:22px;line-height:1}

  /* 顶部当页搜索弹层（不跳页） */
  #m-search-mask{position:fixed;inset:0;z-index:1700;background:rgba(0,0,0,.30);display:none}
  body.m-search #m-search-mask{display:block}
  #m-search-pop{display:none;position:absolute;z-index:1710;top:calc(env(safe-area-inset-top) + 54px);
    left:8px;right:8px;background:#0e2238;border:1px solid #21476b;border-radius:14px;
    box-shadow:0 10px 36px rgba(0,0,0,.55);flex-direction:column;max-height:64vh;overflow:hidden}
  body.m-search #m-search-pop{display:flex}
  .msp-head{display:flex;gap:8px;padding:9px;border-bottom:1px solid #1d4163}
  .msp-head input{flex:1;height:38px;border-radius:10px;border:1px solid #2a527a;background:#0a1c30;
    color:#eaf2fb;font-size:14px;padding:0 12px;min-width:0}
  .msp-head button{width:38px;height:38px;border-radius:50%;border:none;background:#dc2626;
    color:#fff;font-size:15px;flex:none}
  #msp-results{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 9px 10px}
  .msp-sec{color:#7dd3fc;font-size:12px;font-weight:800;padding:7px 4px 3px}
  .msp-hint{color:#8aa3bb;font-size:12.5px;padding:10px 4px}
  .msp-row{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;text-align:left;
    background:#12304d;border:1px solid #1f4670;border-radius:10px;padding:9px 10px;margin-bottom:6px;color:#eaf2fb}
  .msp-row:active{background:#16456d}
  .msp-name{font-size:14px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .msp-tags{display:flex;align-items:center;gap:6px;flex:none}
  .msp-sub{font-size:11px;color:#9db8d2;white-space:nowrap}

  /* 综合面板 */
  .mall-body{padding:8px 10px 10px;background:#0e2238}
  .mall-acts{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:9px}
  .mall-acts button{border:1px solid #21476b;background:#13304d;color:#dcebfb;border-radius:11px;
    font-size:11.5px;font-weight:700;padding:9px 2px;line-height:1.5}
  .mall-acts button:active{background:#16456d}
}

/* v192b: 聚合点紧凑针式 + 抽屉 fixed 无缝 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .m-sheet{position:fixed;left:0;right:0}
}
.mkc{border-width:2px;box-shadow:0 1px 5px rgba(0,0,0,.4);font-size:12.5px}
.mkc.c-o{background:#5b7fa8}
.mkc-pen::after{inset:-4px;border-width:1.5px}

/* v192c */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .m-sheet{position:fixed!important}
  body.m-mode-all #tab-mall{display:flex}
}

/* v193c: 抽屉贴底/半屏宽/态势综合/我的 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  /* 底部工作抽屉必须 fixed 贴住底导（旧规则 absolute!important 会留出地图空带） */
  .m-sheet{position:fixed!important;left:0;right:0;
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom))!important}
  body.m-mode-all #tab-mall{display:flex!important}
  /* 左右抽屉均不得超过半屏 */
  #sidebar{width:min(236px,50vw)!important}
  #m-me-drawer{width:min(260px,50vw)!important}
  /* 态势综合面板里的工具格 */
  .mall-tools{margin-top:9px}
  .mall-tools .mtd-item{min-height:64px}
  /* 我的抽屉 */
  #m-me-mask{position:fixed;inset:0;z-index:1550;background:rgba(0,0,0,.45);display:none}
  body.m-me #m-me-mask{display:block}
  #m-me-drawer{display:none;flex-direction:column;position:fixed;z-index:1600;top:0;right:0;
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
    background:#0e2238;transform:translateX(105%);transition:transform .22s ease;
    border-radius:16px 0 0 16px;box-shadow:0 0 36px rgba(0,0,0,.5);
    padding:calc(12px + env(safe-area-inset-top)) 12px 14px;
    overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.m-me #m-me-drawer{display:flex!important;transform:none}
  .me-card{background:#12304d;border:1px solid #21476b;border-radius:13px;padding:12px 13px;margin-bottom:10px}
  .me-name{font-size:16px;font-weight:800;color:#eaf2fb}
  .me-sub{font-size:12px;color:#9db8d2;margin-top:3px;line-height:1.5}
  .me-sign{margin-bottom:10px;min-height:46px;border-radius:12px;border:none;
    background:linear-gradient(135deg,#f59e0b,#ea580c);color:#fff;font-size:15px;font-weight:800}
  .me-sign.done{background:#15803d}
  .me-logout{margin-top:12px;min-height:42px;border-radius:10px;border:1px solid #7f1d1d;
    background:#3b1214;color:#fca5a5;font-weight:700;font-size:14px}
  /* 职责/流程弹窗 */
  #m-me-modal{display:none;position:fixed;inset:0;z-index:1800;background:rgba(0,0,0,.55);
    align-items:center;justify-content:center;padding:20px}
  body.m-me-modal #m-me-modal{display:flex}
  .mmm-box{background:#0e2238;border:1px solid #21476b;border-radius:14px;max-width:340px;width:100%;
    max-height:76vh;display:flex;flex-direction:column;box-shadow:0 18px 60px rgba(0,0,0,.6)}
  .mmm-head{flex:none;display:flex;align-items:center;padding:12px 14px;border-bottom:1px solid #1d4163;
    color:#eaf2fb;font-size:15px}
  .mmm-head button{margin-left:auto;width:32px;height:32px;border-radius:50%;border:none;
    background:#dc2626;color:#fff;font-size:14px;flex:none}
  .mmm-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 16px 16px;
    color:#dcebfb;font-size:13.5px;line-height:1.7}
  .mmm-ul{padding-left:18px;margin:0}
  .mmm-ul li{margin-bottom:9px}
}

/* v193d: 态势工具 4 列两行全显 + 我的签到钮两行 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .mall-tools{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:9px}
  .mall-tools .mtd-item{min-height:60px;padding:7px 3px;font-size:11.5px;line-height:1.25;
    flex-direction:column;justify-content:center;gap:4px;border-radius:12px}
  .mall-tools .mtd-ico{display:flex;align-items:center;justify-content:center;width:26px;height:26px}
  .mall-tools .mtd-ico svg{width:22px;height:22px}
  .me-sign{white-space:normal;line-height:1.3;font-size:13.5px;padding:9px 8px}
  .me-sign small{display:block;font-size:12px;font-weight:700;opacity:.92;margin-top:2px}
}

/* v194: 中圆钮完整纯圆/去角标/分隔阴影/频道变色/图斑回左菜单/中心工具5格 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #tabbar{position:relative;z-index:1000;overflow:visible;
    box-shadow:0 -1px 0 rgba(255,255,255,.10),0 -4px 12px rgba(0,0,0,.22)}
  #tabbar .tabbtn{overflow:visible}
  #tabbar .tabbtn .badge{display:none!important}
  #tabbar .tabbtn-center{justify-content:center}#tabbar .tabbtn-center .tic{margin:0 auto}
  body.m-mode-all #tabbar #m-center-btn .tic{box-shadow:0 0 0 3px rgba(56,189,248,.35),0 4px 12px rgba(2,132,199,.65)}
  body.m-drawer #tabbar #m-menu-tab{color:#1565c0}
  body.m-me #tabbar #m-me-tab{color:#1565c0}
  /* 图斑/网地 保留在左菜单 */
  body.m-drawer #sidebar #nav-plots{display:flex}
  /* 中心快捷工具：5 格两行，紧凑全显 */
  .mall-body{padding:8px 10px calc(10px + env(safe-area-inset-bottom))}
  .mall-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:0}
  .mall-tools .mtd-item{min-height:62px}
}

/* v195: 单船底部两档抽屉（手机） */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #sheet.m-peek{max-height:44vh}
  #sheet.m-peek #sheet-body > *:not(.sheet-top):not(.sh-head):not(.m-peek-bar){display:none!important}
  #sheet.m-peek .edge-warn-line,#sheet.m-peek .azone-line,#sheet.m-peek .big-banner{display:none!important}
  #sheet.m-peek.m-expanded{max-height:92vh}
  #sheet.m-peek.m-expanded #sheet-body > *,
  #sheet.m-peek.m-expanded #sheet-body > *:not(.sheet-top):not(.sh-head):not(.m-peek-bar){display:block!important}
  /* 展开后隐藏 peek 快捷条，避免与下方完整处置 SOP 重复 */
  #sheet.m-peek.m-expanded #sheet-body > .m-peek-bar{display:none!important}
  #sheet.m-peek .sheet-handle{cursor:pointer}
  /* peek 紧凑头部，关键信息一屏全显 */
  #sheet.m-peek:not(.m-expanded) .sh-head{margin:2px 0 2px;padding:8px 10px}
  #sheet.m-peek:not(.m-expanded) .sh-coord{margin-top:5px;padding:5px 8px;font-size:12.5px}
  #sheet.m-peek:not(.m-expanded) .sh-coord b{font-size:13.5px}
  #sheet.m-peek:not(.m-expanded) .sh-hist{margin-top:5px}
  #sheet.m-peek:not(.m-expanded) .sh-loc{margin-top:4px;font-size:12.5px}
  #sheet.m-peek:not(.m-expanded) .sh-state{margin-top:5px}
  #sheet.m-peek:not(.m-expanded) .pb-btn{min-height:52px}
  .m-peek-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;padding:2px 12px calc(6px + max(env(safe-area-inset-bottom),16px))}
  .pb-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    min-height:58px;border-radius:14px;border:1px solid #24507a;background:#12345a;color:#dbeafe;
    font-size:12.5px;font-weight:700;padding:6px 2px}
  .pb-btn span{font-size:20px;line-height:1}
  .pb-btn:active{background:#16456d}
  .pb-hail{background:linear-gradient(135deg,#dc2626,#b91c1c);border-color:#ef4444;color:#fff}
  .pb-more{background:#0e2a47}
}

/* v198: 底部弹出体与底导精确对齐（实测底导=变量+3px） */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .m-sheet,#sidebar,#m-search-pop,#m-me-drawer{bottom:calc(var(--tabbar-h) + 3px + env(safe-area-inset-bottom))!important}
}

/* ===== v201 ===== */
/* 底导：五等分 + 竖阴影分隔 + 整区高亮 */
#tabbar .tabbtn{border-right:none;box-shadow:none;position:relative}#tabbar .tabbtn::after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:44%;width:1px;background:linear-gradient(to bottom,transparent,rgba(70,95,125,.32),transparent)}#tabbar .tabbtn:last-child::after{display:none}
#tabbar .tabbtn:last-child{border-right:none;box-shadow:none}
#tabbar .tabbtn.active{background:#eaf3fe}
#tabbar .tabbtn.active .ti,#tabbar .tabbtn.active{color:#1565c0}
#tabbar .tabbtn.tabbtn-center.active{background:transparent}
#tabbar .tabbtn.tabbtn-center .tic{box-shadow:0 2px 7px rgba(14,165,233,.32)}

/* 手机端：旧“图层”小药丸隐藏，只留左上角图层钮；展开时显示面板 */
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #maplegend.min{display:none!important}
  #maplegend:not(.min){top:56px;left:8px;right:8px;max-width:none;max-height:58vh}
  #maplegend:not(.min) #freshline{display:none}
}

/* 喊话面板 v2：一屏方框式 */
#hail-mask .modal-sheet{position:relative;overflow:hidden;display:flex;flex-direction:column}
#hail-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:#f4f7fb;padding:12px}
.hp-tri{display:inline-block;width:0;height:0;border-left:10px solid #fff;border-top:6px solid transparent;border-bottom:6px solid transparent;margin-right:7px;vertical-align:-1px}
.hail-v2{display:flex;flex-direction:column;gap:10px;height:100%;min-height:0}
.hail-obj-row{display:flex;align-items:center;gap:8px;flex:none}
.hail-bt-pill{flex:none;display:flex;align-items:center;gap:6px;border:1.5px solid #cbd5e1;
  background:#f1f5f9;color:#64748b;font-weight:800;font-size:12.5px;padding:7px 10px;border-radius:20px;white-space:nowrap}
.hail-bt-pill .bt-dot{width:8px;height:8px;border-radius:50%;background:#94a3b8}
.hail-bt-pill.on{border-color:#16a34a;background:#ecfdf3;color:#15803d}
.hail-bt-pill.on .bt-dot{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.18)}
.hail-obj-val{margin-left:auto;display:flex;align-items:center;gap:6px;max-width:58%;
  background:#eef6ff;border:1.5px solid #93c5fd;color:#1554a8;font-weight:900;font-size:16px;
  padding:7px 12px;border-radius:11px;line-height:1.1}
.hail-obj-lb{font-size:13px;font-weight:800;color:#475569;flex:none}
.hail-obj-edit{font-size:12px;color:#3b82f6}
.hail-tiles{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:repeat(3,1fr);
  grid-auto-rows:1fr;gap:8px;align-content:stretch}
.hail-tile{position:relative;border:1.5px solid #cbd5e1;background:#fff;border-radius:12px;
  color:#1f2937;font-weight:900;display:flex;align-items:center;justify-content:center;
  padding:6px 6px;min-height:56px;touch-action:manipulation}
.hail-tile .ht-txt{display:flex;flex-direction:column;align-items:center;gap:2px;line-height:1.15}
.hail-tile .ht-lb{font-size:15px}
.hail-tile .ht-ds{font-size:10.5px;font-weight:700;color:#94a3b8;white-space:nowrap}
.hail-tile.on{border-color:#1d4ed8;background:#1d4ed8;color:#fff;box-shadow:0 3px 10px rgba(29,78,216,.28)}
.hail-tile.on .ht-ds{color:#cfe0ff}
.hail-tile .ht-ck{position:absolute;top:2px;left:6px;font-size:11px;opacity:0}
.hail-tile.on .ht-ck{opacity:.85}
.hail-tile .ht-i{position:absolute;top:1px;right:5px;font-size:11px;font-style:normal;opacity:.5;
  width:20px;height:20px;line-height:20px;text-align:center}
.hail-playbar{display:grid;grid-template-columns:1fr 1.35fr .8fr;gap:8px;flex:none}
.hail-playbar button{border-radius:13px;border:none;font-weight:900;line-height:1.15;padding:12px 4px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;touch-action:none}
.hail-play{background:#dc2626;color:#fff;font-size:17px}
.hail-play small{font-size:10.5px;font-weight:700;opacity:.92}
.hail-play.playing{background:#7f1d1d}
.hps-sq{width:11px;height:11px;background:#fff;border-radius:2px;display:block;margin-bottom:3px}
.hail-mic{background:#0f766e;color:#fff;font-size:17px;touch-action:none}
.hail-mic small{font-size:10px;font-weight:700;opacity:.9}
.hail-mic.arming{background:#b45309}
.hail-mic.live{background:#dc2626;animation:micpulse 1s infinite}
.hail-mic.live small{color:#ffe4e6}
@keyframes micpulse{0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,.5)}50%{box-shadow:0 0 0 8px rgba(220,38,38,0)}}
.hail-spk{background:#f1f5f9;color:#475569;border:1.5px solid #cbd5e1!important;font-size:13px;gap:4px!important}
.hail-spk .spk-dot{width:9px;height:9px;border-radius:50%;background:#94a3b8}
.hail-spk.on{background:#ecfdf3;border-color:#16a34a;color:#15803d}
.hail-spk.on .spk-dot{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.18)}
.hail-foot{display:flex;gap:7px;flex:none}
.hail-foot button{flex:1;border:1px solid #cbd5e1;background:#f8fafc;border-radius:10px;
  padding:9px 2px;font-size:12.5px;color:#475569;font-weight:700;white-space:nowrap}
.hail-pop-layer{position:absolute;inset:0;pointer-events:none;z-index:30}
.hail-pop-mask{position:absolute;inset:0;background:rgba(10,24,42,.5);
  display:flex;align-items:flex-end;pointer-events:auto}
.hail-pop{background:#fff;border-radius:18px 18px 0 0;width:100%;max-height:86%;
  display:flex;flex-direction:column;gap:10px;padding:15px 16px calc(16px + env(safe-area-inset-bottom));
  overflow-y:auto;-webkit-overflow-scrolling:touch}
.hp-head{display:flex;align-items:center;font-size:17px;font-weight:900;color:#0f2438}
.hp-head-r{margin-left:auto;display:flex;gap:8px}
.hp-ico{border:1px solid #cbd5e1;background:#f1f5f9;border-radius:9px;width:38px;height:38px;
  font-size:16px;display:flex;align-items:center;justify-content:center}
.hp-chips{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;flex:none}
.hp-chip{border:1.5px solid #cbd5e1;background:#f8fafc;border-radius:10px;padding:10px 0;
  font-size:15px;font-weight:800;color:#334155}
.hp-chip.on{border-color:#1d4ed8;background:#dbeafe;color:#1d4ed8}
.hp-numdisplay{background:#0f2438;color:#7dd3fc;border-radius:11px;font-size:21px;font-weight:900;
  letter-spacing:2px;text-align:center;padding:12px;min-height:48px;word-break:break-all;flex:none}
.hp-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;flex:none}
.hp-keypad .hk-btn{padding:10px 0;font-size:20px;font-weight:900;border-radius:10px;
  border:1px solid #cbd5e1;background:#f8fafc;color:#1f2937}
.hp-keypad .hk-btn.del{background:#fef3c7}
.hp-keypad .hk-btn.cls{background:#fee2e2}
.hp-actions{display:flex;gap:10px;flex:none}
.hp-actions .btn{flex:1;padding:10px 4px;font-size:15px;font-weight:800}
.hail-detail-text{font-size:16px;line-height:1.7;color:#1f2937;background:#f8fafc;
  border:1px solid #e2e8f0;border-radius:11px;padding:12px;overflow-y:auto;max-height:48vh}
.hail-help{font-size:14px;line-height:1.9;color:#334155}
.hm-list{flex:1;min-height:0;overflow-y:auto}
.hm-row{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 4px;border-bottom:1px solid #eef2f7;font-size:14px}
.hm-btns{display:flex;gap:6px;flex:none}
.hail-recs{display:flex;flex-direction:column;gap:8px;overflow-y:auto}
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #hail-mask .modal-sheet{height:min(calc(92dvh - var(--tabbar-h,64px) - 10px),700px);
    margin-bottom:calc(var(--tabbar-h,64px) + env(safe-area-inset-bottom) + 6px)}
  .hail-tile{font-size:16px;min-height:50px}
}
@media (min-width:761px){
  #hail-mask .modal-sheet{max-width:560px}
  .hail-tiles{grid-template-columns:repeat(3,1fr)}
}

/* ===== v203 喊话面板：场景制·紧凑·关闭居中 ===== */
#hail-mask .modal-head{display:none!important}
#hail-mask .modal-body{padding:10px 12px calc(12px + env(safe-area-inset-bottom));display:flex;flex-direction:column;overflow:hidden}
.hail-v2{gap:8px;height:auto;min-height:0}
#hail-body{overflow-y:auto}
.hail-bt-pill{font-size:12.5px;padding:7px 10px}
.hail-obj-val{flex:1 1 auto;min-width:0;max-width:none;margin-left:auto;padding:7px 10px;gap:6px}
.hail-obj-lb{font-size:12px}
.hail-obj-val #hail-obj-val{font-size:16px;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hail-tiles{flex:none;overflow:visible;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:minmax(46px,auto)}
.hail-tile{min-width:0;min-height:46px}
.hail-bt-pill.off{border-color:#fca5a5;background:#fef2f2;color:#b91c1c}
.hail-bt-pill.off .bt-dot{background:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.15)}
.hail-scnrow{flex:none;display:flex;flex-direction:column;gap:3px}
.hail-scn{display:flex;gap:6px;overflow-x:auto;flex:none;-webkit-overflow-scrolling:touch}
.hs-tab{flex:1 1 0;min-width:70px;border:1.5px solid #cbd5e1;background:#f8fafc;border-radius:9px;
  padding:7px 4px;font-size:13.5px;font-weight:800;color:#475569;white-space:nowrap}
.hs-tab.on{border-color:#0f766e;background:#0f766e;color:#fff}
.hail-zone{font-size:11px;color:#64748b;padding-left:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hail-behrow{flex:none;display:flex;align-items:center;gap:8px}
.hb-lb{font-size:12px;font-weight:800;color:#64748b;flex:none}
.hail-beh{display:flex;gap:6px}
.hb-chip{border:1.5px solid #cbd5e1;background:#fff;border-radius:999px;padding:5px 14px;
  font-size:13px;font-weight:800;color:#475569}
.hb-chip.on{border-color:#b45309;background:#fef3c7;color:#92400e}
.hail-tiles{gap:6px;grid-auto-rows:minmax(46px,auto);overflow:visible;flex:none}
.hail-tile{border-radius:10px;padding:5px 4px;min-height:46px;min-width:0}
.hail-tile .ht-lb{font-size:14px}
.hail-tile .ht-ds{font-size:10px}
.hail-playbar{gap:7px}
.hail-playbar button{padding:10px 4px;border-radius:12px}
.hail-fixed{background:#1e3a8a;color:#fff;font-size:16px}
.hail-fixed small{font-size:10px;font-weight:700;opacity:.9}
.hail-closebar{flex:none;width:58%;align-self:center;border:none;background:#0f766e;color:#fff;
  font-size:16px;font-weight:900;letter-spacing:6px;border-radius:12px;padding:12px 0}
.hail-closebar:active{background:#0d5d57}
/* 输船号弹层压缩，一屏到底 */
.hail-pop{padding:12px;gap:6px;max-height:94%}
.hp-head{min-height:22px}
.hp-head b{font-size:15px}
.hp-chips{gap:5px}
.hp-chip{padding:5px 0;font-size:12.5px;border-radius:9px}
.hp-numdisplay{font-size:17px;min-height:30px;padding:4px 10px}
.hp-numdisplay.ph{background:#f1f5f9;color:#94a3b8;font-size:12.5px;font-weight:700;display:flex;align-items:center;justify-content:center}
.hp-keypad{gap:5px}
.hp-keypad .hk-btn{padding:7px 0!important;font-size:19px!important;border-radius:9px}
.hp-actions{margin-top:0}
.hp-actions3{gap:8px;position:sticky;bottom:0;background:#fff;padding:6px 0 2px;z-index:2}
.hp-actions3 .btn{font-size:14px;padding:10px 4px}
.hp-actions3 .hp-nonum{flex:.85;font-size:12.5px;color:#64748b}
.hail-pop .hail-ocr-row{margin-top:4px}
.hail-pop .hail-ocr-row .btn{padding:7px 8px;font-size:12.5px}
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #hail-mask .modal-sheet{height:auto;max-height:72dvh;
    margin-bottom:calc(var(--tabbar-h,64px) + env(safe-area-inset-bottom))!important;align-self:flex-end}
  #hail-mask .modal-body{padding-bottom:calc(10px + env(safe-area-inset-bottom))}
  .hail-tile{min-height:46px}
}
/* v205 通用喊话弹层：录音按钮两行描述不裁切 */
.hail-rec-btn{height:auto!important;min-height:66px;padding:11px 14px!important;white-space:normal!important;line-height:1.3;text-align:center}
.hail-rec-btn small{display:block;white-space:normal;line-height:1.35;margin-top:3px;font-weight:600}

/* ===== v206 喊话面板：违规类型下移、船号键、录音格、编辑上传 ===== */
/* 对象行：标签加大，值区自适应不截断 */
.hail-obj-val{max-width:64%}
.hail-obj-lb{font-size:15px;font-weight:900;color:#334155;flex:none}
.hail-obj-box{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
#hail-obj-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}
.hail-obj-edit{flex:none;font-size:13px}
/* 底部第三键：船号 */
.hail-numkey{background:#1e3a8a;color:#fff;font-size:16px}
.hail-numkey small{font-size:10px;font-weight:800;opacity:.92;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 底部违规类型行 + 小关闭钮 */
.hail-footrow{display:flex;align-items:center;gap:6px;flex:none;margin-top:9px}
.hv-lb{flex:none;font-size:12px;font-weight:900;color:#475569}
.hail-vio{flex:1;min-width:0;display:flex;gap:5px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.hail-vio::-webkit-scrollbar{display:none}
.hv-chip{flex:0 0 auto;border:1.5px solid #cbd5e1;background:#f8fafc;color:#334155;border-radius:15px;
  padding:6px 10px;font-size:13px;font-weight:800;touch-action:manipulation}
.hv-chip.on{border-color:#b91c1c;background:#dc2626;color:#fff}
.hail-close-sm{flex:0 0 54px;border:none;border-radius:10px;background:#334155;color:#fff;
  font-size:14px;font-weight:900;padding:9px 0}
/* 成品录音格 */
.hail-tile.hail-tile-rec{border-style:dashed;border-color:#7dd3fc;background:#f0f9ff;color:#0369a1}
.hail-tile.hail-tile-rec .ht-ds{color:#0284c7}
/* 详情录音徽标 */
.hp-audbadge{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0;border-radius:9px;
  padding:7px 10px;font-size:12.5px;font-weight:800;margin-bottom:8px;line-height:1.4}
/* 编辑弹层：录音上传区 */
.hp-edit{max-height:94%;overflow-y:auto}
.he-aud{border:1px dashed #94a3b8;border-radius:10px;padding:9px 11px;margin-top:9px;background:#f8fafc}
.he-aud-lb{font-size:12px;color:#475569;line-height:1.45;margin-bottom:7px;font-weight:700}
.he-aud input[type=file]{font-size:12.5px;width:100%}
.he-aud-rm{display:flex;align-items:center;gap:6px;font-size:12.5px;color:#b91c1c;margin-top:6px;font-weight:700}
#hail-mask .he-aud .meta{margin-top:6px;font-size:12px}

/* v208: 弹层底部操作条吸底，长列表（成品录音）滚动时关闭/确定始终可见 */
.hail-pop .hp-actions{position:sticky;bottom:0;background:#fff;padding:8px 0 2px;z-index:2;margin-top:auto}

/* ===== v210 点船抽屉头部重排 ===== */
.sh-title-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;overflow:hidden}
.sh-title-row .sh-tags{margin-top:0;display:inline-flex;gap:4px;flex:none;flex-wrap:nowrap;align-items:center}
.sh-title-row .sh-tags .tag{font-size:11.5px;padding:2px 7px;border-radius:6px;white-space:nowrap}
.sh-title-row .sh-name{font-size:17px;font-weight:900;color:#fff;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;word-break:normal;flex:1;min-width:0;line-height:1.25}
.sh-hist{display:flex;gap:4px;margin-top:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.sh-hist::-webkit-scrollbar{display:none}
.hc{flex:0 0 auto;font-size:11px;font-weight:800;color:#dbeafe;background:#16385c;border:1px solid #2b4a6b;
  border-radius:14px;padding:3px 7px;white-space:nowrap}
.hc-bad{background:#7f1d1d;border-color:#ef4444;color:#fff}
.hc-work{background:#78350f;border-color:#f59e0b;color:#fde68a}
.hc-zero{color:#9fb6cc;background:transparent;border-style:dashed}
.st-pill.st-pass{background:rgba(59,130,246,.18);color:#bfdbfe;border:1px solid #3b82f6}
.tag.guard{background:#1d4ed8;color:#fff}
@media (min-width:761px){
  .sh-title-row .sh-name{font-size:20px}
}

/* ===== v213 小屏 peek 压缩：640 高也要露出四个操作钮 ===== */
#sheet.m-peek:not(.m-expanded) .sheet-top{height:16px}
#sheet.m-peek:not(.m-expanded) .sheet-handle{margin-top:5px}
#sheet.m-peek:not(.m-expanded) .close-x{top:4px;right:8px;font-size:22px;width:36px;height:36px;line-height:34px}
#sheet.m-peek:not(.m-expanded) .sh-head{margin:1px 0;padding:6px 10px}
#sheet.m-peek:not(.m-expanded) .sh-title-row .sh-name{font-size:15.5px}
#sheet.m-peek:not(.m-expanded) .sh-title-row .sh-tags .tag{font-size:10.5px;padding:1px 6px}
#sheet.m-peek:not(.m-expanded) .sh-state{margin-top:4px}
#sheet.m-peek:not(.m-expanded) .sh-state .st-pill,#sheet.m-peek:not(.m-expanded) .sh-state .tag{font-size:11.5px;padding:2px 8px}
#sheet.m-peek:not(.m-expanded) .sh-loc{margin-top:3px;font-size:12px}
#sheet.m-peek:not(.m-expanded) .sh-coord{margin-top:4px;padding:4px 8px;gap:6px;flex-wrap:nowrap}
#sheet.m-peek:not(.m-expanded) .sh-coord b{font-size:12px;white-space:nowrap}
#sheet.m-peek:not(.m-expanded) .sh-coord .sh-copy{padding:1px 7px;font-size:11px}
#sheet.m-peek:not(.m-expanded) .sh-coord .sh-copy ~ .sh-copy{display:none}
#sheet.m-peek:not(.m-expanded) .sh-hist{margin-top:4px}
#sheet.m-peek:not(.m-expanded) .hc{font-size:10.5px;padding:2px 7px}
#sheet.m-peek:not(.m-expanded) .m-peek-bar{padding:5px 10px calc(6px + max(env(safe-area-inset-bottom),12px));gap:6px}
#sheet.m-peek:not(.m-expanded) .pb-btn{min-height:46px;padding:6px 2px;font-size:12.5px}
#sheet.m-peek:not(.m-expanded) .pb-btn .pb-ico{font-size:17px}

/* ===== v215 点船抽屉：手势/身份行/小屏 ===== */
#sheet.m-peek .close-x{display:none}
#sheet.m-peek .sheet-top,#sheet.m-peek .sh-head{touch-action:none;-webkit-user-select:none;user-select:none}
.sh-type-tag{flex:0 0 auto;font-size:11px;font-weight:800;color:#eaf4ff;background:#1f3d5c;border:1px solid #355b80;border-radius:6px;padding:1px 7px;margin-left:2px;white-space:nowrap}
.sh-type-tag.warn{background:#5a3a12;border-color:#a06a22;color:#ffe7bf}
.sh-type-tag.danger{background:#5c2030;border-color:#a0334f;color:#ffd7e0}
.sh-title-row .sh-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-height:700px){
  #sheet.m-peek:not(.m-expanded){max-height:46vh}
  #sheet.m-peek:not(.m-expanded) .m-peek-bar{padding:4px 10px 6px}
  #sheet.m-peek:not(.m-expanded) .pb-btn{min-height:42px;padding:5px 2px}
}

/* ===== v218 取证流程/手势闪退修复 ===== */
/* 全应用禁止下拉刷新（地图类 PWA，任何 overscroll 都不应触发浏览器刷新/退出） */
html,body{overscroll-behavior-y:none}
#sheet,#sheet-body,#cam-wrap{overscroll-behavior:contain}
.sh-coord .sh-copy.copied{background:#14532d!important;border-color:#16a34a!important;color:#bbf7d0!important}
/* 取证相机角标最多 5 行，略缩字号保证不遮取景 */
.cam-osd{font-size:13px;line-height:1.45}

/* ===== v219 标记违规大按钮 ===== */
.mv-sheet .modal-body{padding-bottom:18px}
.mv-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0}
.mv-btn{min-height:56px;border-radius:12px;border:1px solid #b91c1c;background:#991b1b;
  color:#fff;font-size:16.5px;font-weight:800;letter-spacing:.5px;box-shadow:0 2px 6px rgba(0,0,0,.35)}
.mv-btn:active{background:#dc2626;transform:scale(.97)}
#sheet .pb-btn.pb-mark b{color:#fca5a5}

/* ===== v220 取证单 / 多拍会话 / 变焦 ===== */
.mv-custom{display:flex;gap:8px;align-items:center;margin:6px 0 10px}
.mv-custom .mv-pen{font-size:20px}
.mv-custom .fld{flex:1;min-width:0;font-size:15px;padding:10px}
.mv-custom .btn{flex:none;padding:10px 14px}
.evs-sheet .modal-body{padding-bottom:16px}
.evs-check{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0 10px}
.evs-item{display:flex;align-items:center;gap:6px;border:1px solid #2b4a6b;border-radius:10px;
  padding:9px 8px;background:#102a43;font-size:13px;min-width:0}
.evs-item label{color:#9fb6cc;margin-right:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.evs-item b{font-size:14px}
.evs-item .evs-ic{font-size:15px}
.evs-ok{border-color:#15803d;background:#0f2e1f}.evs-ok b{color:#86efac}
.evs-bad{border-color:#b91c1c;background:#3b1115}.evs-bad b{color:#fca5a5}
.evs-no b{color:#cbd5e1}
.evs-qual{display:flex;align-items:center;gap:8px;margin:4px 0 10px;font-size:14.5px}
.evs-qual b{color:#fca5a5}
.evs-pen{margin-left:auto;border:1px solid #2b4a6b;background:#16365a;color:#fde68a;
  border-radius:8px;padding:6px 12px;font-size:15px}
.evs-qual .fld{flex:1;min-width:0}
.evs-biggrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.evs-big{border-radius:14px;border:2px solid;padding:16px 8px;display:flex;flex-direction:column;
  gap:8px;align-items:center;min-height:104px;font-size:17px;font-weight:800}
.evs-big small{font-weight:400;font-size:11.5px;line-height:1.5;opacity:.92;text-align:left}
.evs-photo{background:#1e3a5f;border-color:#3b82f6;color:#dbeafe}
.evs-video{background:#7f1d1d;border-color:#ef4444;color:#fee2e2}
.evs-sec-h{font-size:13.5px;font-weight:700;color:#93c5fd;margin:12px 0 6px}
.evs-thumbs{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.evs-thumbs img{width:100%;height:64px;object-fit:cover;border-radius:6px;border:1px solid #2b4a6b}
.evs-vid{display:flex;align-items:center;gap:8px;background:#102a43;border:1px solid #2b4a6b;
  border-radius:8px;padding:8px 10px;margin-bottom:6px;font-size:12.5px}
.evs-vid em{font-style:normal;color:#fbbf24;font-size:11.5px}
.evs-vid a{margin-left:auto;color:#93c5fd}
.evs-foot{margin-top:12px}
/* 相机：变焦条 / 完成钮 / 抓拍闪光 */
.cam-zoom{position:absolute;bottom:calc(env(safe-area-inset-bottom,0px) + 150px);right:14px;
  z-index:3;display:flex;flex-direction:column;gap:6px;background:rgba(0,0,0,.35);border-radius:18px;padding:5px}
.cam-zoom button{border:0;background:transparent;color:#fff;font-size:13px;font-weight:700;
  border-radius:14px;padding:5px 9px;min-width:52px}
.cam-zoom button.on{background:#facc15;color:#000}
.cam-done{position:absolute;right:14px;bottom:calc(env(safe-area-inset-bottom,0px) + 96px);z-index:4;
  border:0;border-radius:22px;background:#16a34a;color:#fff;font-size:15px;font-weight:800;
  padding:10px 16px;display:flex;flex-direction:column;align-items:center;line-height:1.15}
.cam-done b{font-size:12px;font-weight:700;opacity:.95}
.cam-done.busy{background:#a16207}
.cam-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:5}
.cam-flash.on{animation:camflash .22s ease-out}
@keyframes camflash{0%{opacity:.85}100%{opacity:0}}
#cam-video{transform-origin:center center;transition:transform .08s linear}
.cam-side2{width:86px;flex:none}
#sheet .pb-btn.pb-hail b{color:#fde047}
.evs-check .evs-item:first-child{grid-column:1/-1}
.evs-check .evs-item:first-child b{font-size:15px}

/* ===== v221 录像中告知播放 ===== */
.cam-hail-btn{position:absolute;left:14px;bottom:calc(env(safe-area-inset-bottom,0px) + 208px);z-index:4;
  width:64px;height:64px;border-radius:50%;border:2px solid #fde047;background:rgba(120,53,15,.82);
  color:#fde047;font-size:20px;font-weight:800;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:2px;line-height:1}
.cam-hail-btn span{font-size:13px}
.cam-hail-btn.playing{background:#fde047;color:#7c2d12;animation:hailpulse 1.1s ease-in-out infinite}
@keyframes haILpulse{0%,100%{box-shadow:0 0 0 0 rgba(253,224,71,.7)}50%{box-shadow:0 0 0 12px rgba(253,224,71,0)}}
@keyframes haILpulse{0%,100%{box-shadow:0 0 0 0 rgba(253,224,71,.7)}50%{box-shadow:0 0 0 12px rgba(253,224,71,0)}}
.cam-hail-panel{position:absolute;left:10px;right:10px;bottom:calc(env(safe-area-inset-bottom,0px) + 96px);z-index:6;
  max-height:62vh;overflow-y:auto;background:rgba(8,20,34,.94);border:1px solid #fde047;border-radius:14px;
  padding:10px;display:flex;flex-direction:column;gap:8px;box-shadow:0 8px 30px rgba(0,0,0,.5)}
.chp-head{display:flex;align-items:center;font-weight:800;color:#fde047;font-size:15px}
.chp-head button{margin-left:auto;border:0;background:#334155;color:#fff;border-radius:50%;
  width:30px;height:30px;font-size:14px}
.chp-tip{font-size:11.5px;line-height:1.5;color:#cbd5e1;background:rgba(253,224,71,.1);
  border-radius:8px;padding:7px 9px}
.chp-btn{display:flex;flex-direction:column;gap:2px;text-align:left;border:1px solid #b45309;
  background:#7c2d12;color:#fff;border-radius:10px;padding:10px 12px;font-size:15px;font-weight:800}
.chp-btn small{font-weight:400;font-size:11.5px;color:#fcd34d;line-height:1.4}
.chp-btn.playing{background:#fde047;color:#7c2d12;border-color:#fde047}
.chp-btn.playing small{color:#7c2d12}
.chp-div{font-size:12px;color:#93c5fd;margin:4px 2px 0}

/* ===== v222 清网/清船统一表头：全部·北区·航道·南区·风电区，去图标去列表钮 ===== */
.m-sheet .ms-grip{flex:none;height:6px;display:flex;align-items:center;justify-content:center;
  background:#0e2238;padding-top:5px}
.m-sheet .ms-grip::before{content:"";width:42px;height:4px;border-radius:2px;background:#33567d}
.m-sheet .ms-head{touch-action:pan-x;gap:8px}
.m-sheet .ms-title{display:none}
.mzone button{font-size:12.5px;height:36px;line-height:36px;padding:0 2px}
.mnav-cell.mnav-new{border-color:#0891b2}
.mnav-cell.mnav-new .mnav-n{color:#22d3ee}
.mf-chip{flex:1}
@media (max-width:380px){
  .mzone button{font-size:11.5px}
  .m-sheet .ms-head{gap:6px;padding:6px 8px}
}

/* ===== v223 抽屉秒开骨架 ===== */
.sheet-loading{padding:18px 14px;color:#8fb0cf;font-size:13px;text-align:center}
.sheet-loading::before{content:'\25CF';color:#38bdf8;margin-right:6px;animation:skpulse 1s ease-in-out infinite;display:inline-block}
@keyframes skpulse{0%,100%{opacity:.3}50%{opacity:1}}

/* ===== v224 工作台手势/排序 ===== */
#tab-mships .ms-grip, #tab-mnets .ms-grip, #tab-mships .ms-head, #tab-mnets .ms-head{touch-action:none}
.mrow .tag-bad{background:rgba(220,38,38,.18);color:#fecaca;border:1px solid rgba(248,113,113,.45)}
.mrow .mline2{color:#9fb6cf}

/* ===== v225 一级海区+二级分类，卡片区可手势，chips 可多选 ===== */
#mship-nav, #mnet-nav, #mship-nav *, #mnet-nav *, .ms-grip, .ms-head, .ms-head *{touch-action:none}
.mchips-multi{display:flex;flex-wrap:wrap;gap:7px;padding:8px 10px}
.mchips-multi .mchip{flex:0 0 auto}

/* ===== v226：横滑卡片条 + 60% 二级面板 + 筛选条钉底 ===== */
.m-sheet .mnav-patrol{display:none!important}
.mnav-grid{display:flex!important;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:7px}
.mnav-grid::-webkit-scrollbar{display:none}
.m-sheet .mnav-grid .mnav-cell{flex:0 0 calc(25% - 6px);min-width:calc(25% - 6px);width:calc(25% - 6px);scroll-snap-align:start}
.mnav-cell.mnav-dim .mnav-n{color:#9db8d2}
body.m-full .m-sheet{top:calc(40vh - env(safe-area-inset-top))!important;
  bottom:calc(var(--tabbar-h) + 3px + env(safe-area-inset-bottom))!important;
  height:auto!important;max-height:none!important}
body.m-full.m-mode-ship #tab-mships,body.m-full.m-mode-net #tab-mnets{display:flex!important;flex-direction:column}
body.m-full .ms-list{display:flex!important;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}
.ms-list-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 10px 10px}
.ms-list-bar{flex:0 0 auto;border-top:1px solid #21476b;background:#0d2036;padding:8px 0 8px}
.ms-list-bar .m-list-search{display:block;margin:0 10px 8px;width:calc(100% - 20px);box-sizing:border-box}
body.m-full .m-sheet .mchips{display:flex!important;flex-wrap:nowrap!important;overflow-x:auto;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:0 10px}
body.m-full .m-sheet .mchips::-webkit-scrollbar{display:none}
body.m-full .m-sheet .mchips .mchip{flex:0 0 auto}

/* ===== v227：恢复上滑满屏列表（两级导航维持原形态），横滑卡片条保留 ===== */
body.m-full .m-sheet{top:calc(8px + env(safe-area-inset-top))!important;bottom:auto!important;
  height:calc(100dvh - var(--tabbar-h) - env(safe-area-inset-bottom) - 8px)!important;max-height:none!important}
body.m-full.m-mode-ship #tab-mships,body.m-full.m-mode-net #tab-mnets{display:flex!important;flex-direction:column;overflow:hidden}
body.m-full .ms-list{display:block!important;flex:1 1 auto;min-height:0;height:0;overflow-y:auto!important;
  -webkit-overflow-scrolling:touch}
body.m-full .m-sheet .mchips{flex-wrap:wrap!important;overflow:visible!important}
.rb-factors{font-size:12px;color:#bfe0ff;background:#102740;border:1px solid #21476b;
  border-radius:8px;padding:6px 8px;margin:6px 0;line-height:1.5}

/* ===== v228：peek 功能钮恢复两行（2+1 通栏） ===== */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  .m-peek-bar{grid-template-columns:repeat(2,1fr)!important}
  .pb-btn.pb-wide{grid-column:1 / -1;min-height:50px}
}
.mtag.tag-kind{background:#1d4e89;color:#dbeafe;border:1px solid #2f6bb0;border-radius:4px;
  padding:0 5px;font-size:10.5px;font-weight:700;margin-right:4px;white-space:nowrap}

/* v230 清网抽屉白名单小钮 */
.pb-btn.pb-sub{background:#0e2a47;border-color:#1d3f66;color:#9fc3e8;font-size:12px;min-height:46px}
.pb-btn.pb-sub:disabled{opacity:.75}

/* v231 兜底：WebView 不回传安全区时，抽屉/底导不被安卓三键导航条压住 */
#sheet-body{padding-bottom:max(20px, calc(12px + env(safe-area-inset-bottom)))}
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #tabbar{padding-bottom:env(safe-area-inset-bottom)}
  #sheet.m-peek:not(.m-expanded) .pb-btn{min-height:44px}
}

/* v232 状态+位置合并一行；喊话钮琥珀色 */
.sh-state-loc{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;margin-top:5px}
.sh-state-loc .sl-loc{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#9db4cc;display:inline-flex;align-items:center;gap:3px}
#sheet.m-peek:not(.m-expanded) .sh-state-loc{margin-top:4px;gap:5px}
#sheet.m-peek:not(.m-expanded) .sh-state-loc .sl-loc{font-size:11.5px}
.pb-hail{border-color:#a16207;color:#fbbf24}

/* v232 底导分隔线：只留中间一小段，不再满宽 */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #tabbar{position:relative;border-top:none!important;box-shadow:0 -4px 14px rgba(4,16,30,.18)}
  #tabbar::before{content:"";position:absolute;top:0;left:0;right:0;
    width:100%;height:1px;background:linear-gradient(90deg,rgba(120,145,170,0),rgba(120,145,170,.5) 7%,rgba(120,145,170,.5) 93%,rgba(120,145,170,0))}
  .sh-state-loc .st-pill{flex:none;white-space:nowrap}
}

/* v233 相机本地队列条（控制栏上方） */
.cam-queue{position:absolute;left:0;right:0;bottom:126px;padding:6px 10px;z-index:6;
  display:flex;gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch}
.cam-q{position:relative;flex:none;width:56px;height:56px;border-radius:9px;overflow:hidden;
  border:2px solid #38bdf8;background:#0b1f33}
.cam-q img,.cam-q video{width:100%;height:100%;object-fit:cover}
.cam-q .qx{position:absolute;top:1px;right:1px;width:18px;height:18px;line-height:17px;text-align:center;
  background:rgba(0,0,0,.7);border-radius:50%;font-size:11px;color:#fff;z-index:2}
.cam-q .qb{position:absolute;bottom:1px;left:1px;font-size:11px}
.cam-q .qk{position:absolute;bottom:0;left:0;right:0;font-size:9px;text-align:center;
  background:rgba(0,0,0,.55);color:#cfe6ff}
.cam-q.q-up{border-color:#fbbf24}.cam-q.q-fail{border-color:#ef4444}
.cam-q.q-ok{border-color:#22c55e;opacity:.6}
.cam-done.busy{background:linear-gradient(135deg,#b45309,#92400e)!important}
/* v233 合并行：完整文字一行放下（11px），不省略 */
#sheet.m-peek:not(.m-expanded) .sh-state-loc{gap:6px}
#sheet.m-peek:not(.m-expanded) .sh-state-loc .sl-loc{flex:none;font-size:11px;white-space:nowrap}
#sheet.m-peek:not(.m-expanded) .sh-state-loc .st-pill{flex:none;font-size:11px;padding:2px 7px;white-space:nowrap}

/* v234 编辑话术弹窗：显性标签 + 加大字段 */
.hp-edit .hp-head{padding-bottom:4px}
.hp-edit .hp-head b{font-size:18px}
.hp-edit .he-lab{font-size:13.5px;font-weight:800;color:#0f2438;margin:14px 0 6px}
.hp-edit .he-lab-sub{color:#64748b;font-weight:700}
.hp-edit .fld.he-lg{font-size:15px;padding:12px 13px;border-color:#94a3b8;background:#f8fafc;color:#0f172a}
.hp-edit textarea.he-lg{line-height:1.55}
.hp-edit select.he-lg{font-weight:700}
.hp-edit .he-aud{margin-top:14px}

/* v236 二级分类恢复两行卡片（清船6列、清网5列） */
.mnav-grid{display:grid!important;overflow:visible!important;gap:6px!important}
.mnav-grid .mnav-cell{flex:none!important;min-width:0!important;width:auto!important;min-height:48px}
#mship-nav .mnav-grid{grid-template-columns:repeat(5,1fr)!important}
#mnet-nav .mnav-grid{grid-template-columns:repeat(5,1fr)!important}
.mnav-cell{touch-action:manipulation;transition:transform .12s ease,box-shadow .12s ease}
.mnav-cell.dragging{opacity:.9;transform:scale(1.09);outline:2px solid #38bdf8;
  box-shadow:0 9px 22px rgba(0,0,0,.55)!important}
.mnav-grid .mnav-lb{font-size:10px;white-space:nowrap}

/* v239 图层面板分组 + 网具首次出现时间 */
.lg-sec-lb{font-size:12px;font-weight:800;color:#7fb0dd;margin:9px 0 1px;letter-spacing:1px}
.sh-firstseen{font-size:12px;color:#9db8d2;margin-top:6px}

/* v241 标题行/候选卡布局：名字保证可读宽度，次要标签自动换行，不挤成竖排/截断 */
.sh-title-row{flex-wrap:nowrap!important;overflow:hidden!important}
.sh-title-row .sh-name{flex:1 1 auto!important;min-width:0!important;white-space:nowrap}
.sh-title-row .sh-tags{flex:0 0 auto}
.sh-title-row .sh-type-tag{flex:0 0 auto}
.na-line1{flex-wrap:wrap}
.na-line1 .na-badge{flex-shrink:0}
.na-line1 .na-size{flex-shrink:0}
.na-line1 b{flex:1 1 130px;min-width:120px}

/* v244 归属地标签 + 船东紧凑行 */
.tag-home{background:rgba(29,78,216,.20)!important;border:1px solid #3b82f6!important;color:#bfdbfe!important}
.sh-owner-line{display:flex;flex-wrap:nowrap;gap:12px;margin-top:6px;font-size:12px;color:#b6c8dc;overflow:hidden}
.sh-owner-line span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.sh-owner-line a{color:#7dd3fc;text-decoration:none;white-space:nowrap;flex:none}
#sheet.m-peek:not(.m-expanded) .sh-owner-line{font-size:11px;margin-top:4px;gap:9px}

/* ===== v245 取证单 / FAB / 轨迹关闭钮 ===== */
#ev-fab{position:fixed;right:14px;bottom:calc(60px + env(safe-area-inset-bottom));z-index:900;width:58px;height:58px;border-radius:50%;border:2px solid #93c5fd;background:#1d4ed8;color:#fff;font-size:19px;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.45);padding:0;cursor:pointer}
#ev-fab span{font-size:10px;line-height:1;margin-top:1px;font-weight:700}
.track-close{position:absolute;top:12px;right:12px;z-index:600;display:flex;gap:6px;align-items:center}
.track-close button{background:rgba(15,39,66,.9);color:#fff;border:1px solid #3b82f6;border-radius:20px;padding:7px 14px;font-size:13px;cursor:pointer}
.tk-ranges{display:flex;background:rgba(15,39,66,.9);border:1px solid #3b82f6;border-radius:20px;padding:2px}
.tk-ranges button{border:0;background:transparent;color:#bfdbfe;border-radius:20px;padding:5px 11px;font-size:12.5px;font-weight:700}
.tk-ranges button.on{background:#0e7490;color:#fff}
.tk-x{padding:7px 11px!important}
.evf-sheet{display:flex;flex-direction:column;width:100%;max-width:520px;height:100%;max-height:96vh;background:#0b1f36;border-radius:14px;overflow:hidden;margin:auto}
.evf-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#0f2742;border-bottom:1px solid #1d4163;font-weight:700;font-size:16px}
.evf-head button{background:none;border:none;color:#cbd5e1;font-size:20px;cursor:pointer}
.evf-body{flex:1;overflow-y:auto;padding:10px 16px}
.evf-sec{font-size:13px;color:#93c5fd;font-weight:700;margin:14px 0 7px}
.evf-ship{width:100%;font-size:15px}
.evf-tgt{font-size:12px;color:#b6c8dc;margin-top:7px;line-height:1.6}
.evf-tgt-no{color:#fbbf24}
.evf-behs{display:flex;gap:9px}
.evf-beh{flex:1;padding:9px 0;border-radius:9px;border:1px solid #2b4a6b;background:#122c49;color:#c9d8ea;font-size:14px;font-weight:700;cursor:pointer}
.evf-beh.on{background:#1d4ed8;border-color:#60a5fa;color:#fff}
.evf-note{width:100%;margin-top:9px;font-size:13px}
.evf-sech{font-size:12.5px;color:#93c5fd;margin:11px 0 6px;font-weight:700}
.evf-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}
.evf-grid-v{grid-template-columns:repeat(2,1fr)}
.evf-cell{position:relative}
.evf-cell img,.evf-cell video{width:100%;height:74px;object-fit:cover;border-radius:6px;background:#0f2742;display:block}
.evf-grid-v video{height:112px}
.evf-cdel{position:absolute;top:-7px;right:-5px;background:#dc2626;color:#fff;border-radius:50%;width:20px;height:20px;font-size:11px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.evf-foot{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:10px 14px calc(12px + env(safe-area-inset-bottom));background:#0f2742;border-top:1px solid #1d4163}
.evf-foot button{display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 2px;border-radius:11px;border:1px solid #2b4a6b;background:#16365a;color:#dbeafe;font-size:18px;cursor:pointer}
.evf-foot button span{font-size:11.5px;font-weight:700}
.evf-foot button.primary{background:#1d4ed8;border-color:#60a5fa}

/* ===== v246 悬浮钮圆形图标化 / 可拖动 / 轨迹关闭钮层级 ===== */
#m-hail{width:48px;height:48px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center;gap:0}
#m-hail svg{width:25px;height:25px}
#ev-fab{position:absolute;z-index:650;right:9px;bottom:210px;width:48px;height:48px;border-radius:50%;
  border:none;background:linear-gradient(135deg,#1e6fe3,#1447a8);color:#fff;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 14px rgba(20,71,168,.5);padding:0;cursor:pointer}
#ev-fab svg{width:25px;height:25px}
.track-close{z-index:1000!important}

/* ===== v247 取证单汇总卡 / 底部五钮 / 弹窗样式 ===== */
.evf-sumcard{background:#102a47;border:1px solid #20436a;border-radius:11px;padding:4px 13px;margin-top:10px}
.evf-sumrow{display:flex;gap:10px;padding:8px 0;font-size:14px;line-height:1.45;border-bottom:1px solid #1b3a5c}
.evf-sumrow:last-child{border-bottom:none}
.evf-sumrow .es-k{flex:none;width:64px;color:#8fb6dd;font-weight:700}
.evf-sumrow .es-v{flex:1;color:#e6effa;word-break:break-all}
.evf-sumrow .es-v em{color:#fbbf24;font-style:normal}
.evf-sumrow.no .es-v{color:#fbbf24}
.evf-foot{grid-template-columns:repeat(5,1fr)!important;gap:6px!important;padding-left:9px!important;padding-right:9px!important}
.evf-foot button{font-size:17px;padding:8px 1px}
.evf-foot button svg{width:21px;height:21px}
.evf-foot button span{font-size:10.5px}
.evf-bchips{display:flex;gap:8px;margin:10px 2px 4px}
.evf-bchip{flex:1;padding:8px 0;border-radius:9px;border:1px solid #2b4a6b;background:#122c49;
  color:#c9d8ea;font-size:14px;font-weight:700;cursor:pointer}
.evf-bchip.on{background:#1d4ed8;border-color:#60a5fa;color:#fff}
#evf-popnote{width:calc(100% - 4px);margin-top:8px;font-size:13px}
.evf-pop{max-height:92vh;overflow-y:auto}

/* ===== v251 ===== */
#me-pgps.me-sign-on{background:#16a34a;color:#fff}

/* v379：位置在左（从左排、固定宽），状态在右（从右排、固定宽），同一行 */
.sh-state-loc{flex-direction:row!important;align-items:center!important;
  justify-content:space-between!important;gap:8px!important}
.sh-state-loc .sl-loc{flex:1 1 auto!important;min-width:0!important;width:auto!important;
  max-width:54%!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-state-loc .st-pill{flex:none!important;white-space:nowrap;text-align:center;min-width:120px}
.sh-state-loc .tag.stale-tag{flex:none!important}

/* v261：清船导航分组 */
.mnav-glb{font-size:10px;font-weight:800;color:#7fb0dd;letter-spacing:1.5px;
  padding:7px 2px 3px}
.mnav-glb:first-child{padding-top:1px}
#mship-nav .mnav-grid-4{grid-template-columns:repeat(4,1fr)!important}
#mship-nav .mnav-grid-3{grid-template-columns:repeat(3,1fr)!important}
.mnav-reset{width:100%;margin-top:8px;min-height:34px;border:1px solid #2b4d72;
  background:#122c48;color:#b9d4ec;border-radius:9px;font-size:12px;font-weight:700;cursor:pointer}
.mnav-reset.disabled{opacity:.45}

/* v263：船只抽屉规范化 */
.icn{width:15px;height:15px;flex:none}
.pb-btn b{display:inline-flex;align-items:center;gap:6px}
.pb-btn .icn{width:17px;height:17px}
.sh-title-row .sh-prim{flex:none;display:inline-flex}
.sh-title-row .sh-prim .tag{font-size:11.5px;padding:2px 7px;border-radius:6px;white-space:nowrap}
.sh-aux{display:flex;flex-wrap:nowrap;gap:5px;overflow:hidden;margin-top:5px}
.sh-aux .tag{font-size:10.5px;padding:1px 7px;border-radius:5px;white-space:nowrap;flex:none}
.sh-owner-line{align-items:center}
.sh-owner-line .icn{width:14px;height:14px}
#sheet.m-peek:not(.m-expanded) .sh-addr{display:none}
#sheet.m-peek:not(.m-expanded) .sh-title-row .sh-name{font-size:15.5px}

/* v268 弱机性能：详情抽屉全屏时停海图脉冲动画，延迟 marker 重建，滚动不卡 */
body.sheet-expanded .leaflet-marker-icon,
body.sheet-expanded .leaflet-marker-icon::before,
body.sheet-expanded .leaflet-marker-icon::after { animation: none !important; }
body.sheet-expanded .leaflet-control { opacity: .5; }
#sheet-body { -webkit-overflow-scrolling: touch; }
#sheet-body > .infocard, #sheet-body > .sheet-fold.det-meta { content-visibility: auto; contain-intrinsic-size: auto 220px; }

/* ===== v270 违法取证单：执法笔录纸面 + 底部三行操作区 ===== */
.evf-sheet{background:#f1f5f9!important;max-height:97vh}
.evf-head{background:#fff!important;border-bottom:1px solid #e2e8f0!important;color:#0f172a}
.evf-head .evf-ht{font-size:16px;font-weight:800}
.evf-head button{color:#475569!important}
.evf-body{background:#f1f5f9!important;padding:10px 13px}
.er-paper{background:#fff;border:1px solid #cbd5e1;border-radius:8px;padding:2px 12px 8px;
  box-shadow:0 1px 2px rgba(15,23,42,.06)}
.er-title{text-align:center;font-weight:800;font-size:15px;color:#0f172a;padding:10px 0 8px;
  border-bottom:2px solid #0f172a;margin-bottom:4px;letter-spacing:2px}
.er-row{display:flex;gap:8px;padding:7px 0;border-bottom:1px dashed #e2e8f0;font-size:13.5px;line-height:1.5}
.er-row:last-child{border-bottom:none}
.er-k{flex:none;width:66px;color:#334155;font-weight:700}
.er-v{flex:1;color:#0f172a;word-break:break-all}
.er-v em{color:#94a3b8;font-style:normal}
.er-coord{font-weight:700}
.er-copy{margin-left:8px;border:1px solid #cbd5e1;background:#f8fafc;border-radius:6px;
  font-size:11px;padding:1px 9px;color:#334155}
.evf-sec{color:#0f172a!important;display:flex;align-items:center;justify-content:space-between;
  margin:14px 2px 7px;font-size:13px;font-weight:700}
.evf-addsnap{border:1px solid #cbd5e1;background:#fff;border-radius:6px;font-size:11px;
  padding:2px 9px;color:#475569}
.evf-sech{color:#1e3a8a!important}
.evf-cell img,.evf-cell video{background:#e2e8f0}
.evf-foot{background:#fff!important;border-top:1px solid #e2e8f0;display:flex!important;
  flex-direction:column;gap:8px!important;padding:9px 12px calc(10px + env(safe-area-inset-bottom))!important}
.evf-bchips{display:grid!important;grid-template-columns:repeat(4,1fr)!important;gap:6px}
.evf-bchip{border:1px solid #cbd5e1;background:#f8fafc;color:#334155;border-radius:8px;
  padding:7px 0;font-size:13px;font-weight:700;cursor:pointer}
.evf-bchip.on{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
.evf-actions{display:grid;grid-template-columns:1fr 1.35fr 1fr;gap:7px}
.evf-actions button{display:flex;flex-direction:column;align-items:center;gap:1px;border-radius:10px;
  border:1px solid #cbd5e1;background:#f8fafc;color:#0f172a;font-size:13px;font-weight:700;
  padding:8px 2px;cursor:pointer}
.evf-actions button.primary{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
.evf-seg{font-size:9.5px;font-weight:500;opacity:.85}
.evf-savebtn{border:none;background:#0f766e;color:#fff;border-radius:10px;font-size:15px;font-weight:800;
  padding:11px 0;cursor:pointer}
.cam-album svg,.cam-flip svg,.cam-hail-btn svg{width:21px;height:21px}
.cam-album{display:flex;align-items:center;gap:3px}

/* ===== v272 取证单：去表头 + 相机底部拇指控制条 + 录像醒目 ===== */
.evf-sheet{border-radius:14px 14px 0 0;overflow:hidden}
.evf-body{padding:calc(10px + env(safe-area-inset-top)) 13px 12px}
.er-title{font-size:16px;letter-spacing:4px;padding:8px 0 9px}
/* 相机底部控制条 */
.cam-ctrl{display:flex;align-items:center;justify-content:space-between;
  padding:0 20px;gap:10px}
.cc-left,.cc-right{display:flex;align-items:center;gap:16px;flex:none}
.cc-mini{border:0;background:transparent;color:#fff;display:flex;flex-direction:column;
  align-items:center;gap:3px;font-size:11px;font-weight:700;padding:4px}
.cc-mini svg{width:25px;height:25px}
.cc-mini.playing{color:#fde047;animation:hailpulse 1.1s ease-in-out infinite}
.cam-shutter{width:76px;height:76px;flex:none}
.cam-shutter.recording{border-radius:20px;background:#e11d48;border-color:#fecdd3;
  animation:none}
/* 录像指示条 */
.cam-recbar{position:absolute;left:50%;transform:translateX(-50%);
  bottom:calc(env(safe-area-inset-bottom,0px) + 128px);z-index:5;align-items:center;gap:7px;
  background:rgba(15,23,42,.72);color:#fff;border:1px solid rgba(254,202,202,.5);
  border-radius:999px;padding:7px 16px;font-size:14px;font-weight:700}
.cam-recbar b{font-variant-numeric:tabular-nums}
.recdot{width:11px;height:11px;border-radius:50%;background:#ef4444;display:inline-block;
  animation:recdotp 1s steps(2,start) infinite}
@keyframes recdotp{50%{opacity:.15}}
/* 录像红框 */
#cam-wrap.recording video{outline:4px solid rgba(225,29,72,.95);outline-offset:-4px}
.cam-hint{bottom:calc(env(safe-area-inset-bottom,0px) + 118px);font-size:12.5px;padding:0 26px}
.cam-hail-panel{bottom:calc(env(safe-area-inset-bottom,0px) + 128px)}

/* ===== v287 文字帽 / 工具栏 / 测距（手机端） ===== */
@media (max-width:820px){
  .tabbtn-center .tic svg{width:23px;height:23px;color:#fff;display:block}
  /* 文字帽 */
  .mhats{position:absolute;left:50%;bottom:100%;transform:translateX(-50%);
    display:flex;flex-direction:column-reverse;align-items:center;gap:2px;
    pointer-events:none;white-space:nowrap;z-index:5}
  .mhat{font-style:normal;font-size:8.5px;line-height:1.15;font-weight:800;
    color:#fff;padding:1px 4px;border-radius:6px;letter-spacing:.2px;
    box-shadow:0 1px 3px rgba(0,0,0,.4)}
  .mh-r{background:#dc2626}
  .mh-o{background:#ea580c}
  .mh-p{background:#7c3aed}
  .mh-n{background:#16a34a}
  .mh-s{background:#0f172a;color:#facc15}
  .mh-m{background:#b45309;color:#fef3c7}
  .mh-boat{background:#f97316}
  /* 标记船只弹窗 */
  .mmark-ship{display:flex;flex-direction:column;gap:8px;padding:4px 2px}
  .mmark-ship b{font-size:16px;color:#0f172a}
  .mmark-ship small{color:#64748b;font-size:12px}
  .mmark-ship textarea{width:100%;min-height:74px;resize:vertical;border:1px solid #cbd5e1;
    border-radius:10px;padding:10px;font-size:14px;line-height:1.5;color:#0f172a;
    font-family:inherit;box-sizing:border-box}
  .mmark-ship textarea:focus{outline:none;border-color:#d97706;box-shadow:0 0 0 3px rgba(217,119,6,.15)}
  .mmark-btns{display:flex;gap:8px;flex-wrap:wrap}
  .mmark-btns button{flex:1;min-width:84px;border:none;border-radius:10px;padding:11px 8px;
    font-size:14px;font-weight:700}
  .mmark-save{background:#d97706;color:#fff}
  .mmark-del{background:#fee2e2;color:#b91c1c}
  .mmark-close{background:#f1f5f9;color:#334155}
  .mf-item .mf-mark{display:flex;align-items:center;color:#d97706}
  .mf-item .mf-mark .icn{width:20px;height:20px}
  /* v293 模式开关 + 巡逻面板 */
  .mode-switch{display:flex;gap:6px;padding:10px 10px 4px}
  .msw-btn{flex:1;border:1px solid #274863;background:#13293f;color:#9db4c8;
    border-radius:9px;padding:8px 4px;font-size:13px;font-weight:700}
  .msw-btn.on{background:#0e7490;border-color:#22b8cf;color:#fff}
  #patrol-panel{display:none;flex-direction:column;gap:7px;padding:6px 10px 2px}
  #patrol-panel.show{display:flex}
  .pp-row{display:flex;align-items:center;gap:8px}
  .pp-lb{font-size:12px;color:#8fb0cc;width:34px;flex:none}
  .pp-seg{display:flex;gap:5px;flex:1}
  .pp-seg button{flex:1;border:1px solid #274863;background:#13293f;color:#9db4c8;
    border-radius:8px;padding:6px 2px;font-size:11.5px;font-weight:700}
  .pp-seg button.on{background:#0e7490;border-color:#22b8cf;color:#fff}
  .pp-chips{display:flex;flex-wrap:wrap;gap:5px;flex:1}
  .pp-chip{border:1px solid #274863;background:#13293f;color:#9db4c8;
    border-radius:20px;padding:4px 10px;font-size:11.5px;font-weight:700}
  .pp-chip.on{background:#b45309;border-color:#d97706;color:#fef3c7}
  .mkwrap.dim,.mkc.dim{opacity:.14!important;transition:opacity .25s}
  .mkwrap,.mkc{transition:opacity .25s}
  .pr-pt{width:24px;height:24px;border-radius:50%;background:#0369a1;
    border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4);
    display:flex;align-items:center;justify-content:center}
  .pr-pt b{font-size:11px;color:#fff;font-weight:800;font-style:normal}
  /* 工具栏遮罩与抽屉（右侧 1/3） */
  #m-tools-mask{position:fixed;inset:0;z-index:1550;background:rgba(0,0,0,.45);display:none}
  body.m-tools #m-tools-mask{display:block}
  #m-tools-drawer{display:none;flex-direction:column;position:fixed;z-index:1600;top:0;right:0;
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
    width:min(236px,50vw);
    background:#0e2238;transform:translateX(105%);transition:transform .22s ease;
    border-radius:16px 0 0 16px;box-shadow:0 0 36px rgba(0,0,0,.5);
    padding:calc(12px + env(safe-area-inset-top)) 7px 12px;
    overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.m-tools #m-tools-drawer{display:flex!important;transform:none}
  .tools-head{display:flex;align-items:center;gap:4px}
  .tools-head b{color:#eaf2fb;font-size:14px}
  .tools-hint{font-size:9px;color:#84a9c8;flex:1;line-height:1.2}
  .tools-list{display:flex;flex-direction:column;gap:7px;margin-top:10px}
  .tool-row{display:flex;align-items:center;gap:2px;background:#12304d;
    border:1px solid #21476b;border-radius:11px;padding:5px 3px;touch-action:manipulation;
    transition:transform .12s ease}
  .tool-row.dragging{opacity:.92;transform:scale(1.04);outline:2px solid #38bdf8;
    box-shadow:0 8px 18px rgba(0,0,0,.5)}
  .tool-drag{display:flex;align-items:center;color:#6f93b5;flex:0 0 11px}
  .tool-drag svg{width:11px;height:18px}
  .tool-run-btn{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;
    gap:4px;background:none;border:none;color:#dbeafe;padding:0;min-width:0}
  .tool-ico{display:flex;align-items:center;color:#7dd3fc}
  .tool-ico svg{width:18px;height:18px}
  .tool-lb{font-size:11px;font-weight:700;color:#d7e7f7;white-space:nowrap;letter-spacing:-.3px}
  .tool-sw{flex:0 0 24px;height:15px;border-radius:9px;border:none;padding:2px;
    background:#334155;display:flex;align-items:center;transition:background .15s}
  .tool-sw.on{background:#16a34a}
  .tsw-kn{width:11px;height:11px;border-radius:50%;background:#e2e8f0;
    transform:translateX(0);transition:transform .15s}
  .tool-sw.on .tsw-kn{transform:translateX(9px);background:#fff}
  /* 通用工具悬浮钮 */
  .tool-fab{position:absolute;width:42px;height:42px;border-radius:50%;border:none;
    background:linear-gradient(135deg,#1e3a5f,#0e2238);color:#7dd3fc;z-index:900;
    display:flex;align-items:center;justify-content:center;
    box-shadow:0 4px 12px rgba(0,0,0,.45);touch-action:none}
  .tool-fab svg{width:21px;height:21px}
  /* 测距标签 */
  .meas-seg{background:rgba(180,83,9,.92);border:none;color:#fff;font-size:10px;
    font-weight:700;padding:1px 5px;border-radius:7px;box-shadow:none}
  .meas-seg::before{display:none}
  .meas-tip{background:#b45309;border:none;color:#fff;font-size:11px;font-weight:800;
    padding:3px 7px;border-radius:8px;box-shadow:0 2px 6px rgba(0,0,0,.4)}
  .meas-tip::before{display:none}
}

#meas-done{display:none;position:fixed;left:50%;bottom:78px;transform:translateX(-50%);
 z-index:1300;background:#f59e0b;color:#fff;border:none;border-radius:22px;
 padding:10px 22px;font-size:14px;font-weight:600;box-shadow:0 4px 14px rgba(245,158,11,.4);}
/* v297 统计报表 */
#report .rpt-loading{padding:40px;text-align:center;color:#64748b}
.rpt-seg{display:flex;gap:6px;flex-wrap:wrap}
.rpt-seg button{flex:1;min-width:70px;border:1px solid #cbd5e1;background:#f8fafc;
  color:#475569;border-radius:8px;padding:7px 4px;font-size:13px;font-weight:700;cursor:pointer}
.rpt-seg button.on{background:#0e7490;border-color:#0e7490;color:#fff}
.rpt-dates{margin-top:8px;font-size:12.5px;color:#64748b}
.rpt-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:12px 0}
.rpt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:14px 10px;text-align:center}
.rpt-card b{display:block;font-size:20px;color:#0f172a;font-weight:800}
.rpt-card span{font-size:12.5px;color:#64748b}
.rpt-fuel b{display:block;margin-bottom:8px}
.rpt-fuel label{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#475569;margin-right:16px}
.rpt-fuel input{width:80px;padding:5px 8px;border:1px solid #cbd5e1;border-radius:7px}
.rpt-fuel-hint{font-size:12px;color:#94a3b8;margin-top:6px}
.rpt-sec h3{margin:0 0 10px;font-size:15px;color:#0f172a}
.rpt-sumline{font-size:13px;color:#0e7490;font-weight:700;margin-bottom:10px}
.rpt-tablewrap{overflow-x:auto}
.rpt-table{width:100%;border-collapse:collapse;font-size:13px}
.rpt-table th{background:#f1f5f9;color:#475569;font-weight:700;text-align:left;
  padding:7px 10px;white-space:nowrap}
.rpt-table td{padding:7px 10px;border-top:1px solid #eef2f7;white-space:nowrap}
.rpt-ships{display:flex;flex-direction:column;gap:10px}
.rpt-ship{display:flex;justify-content:space-between;gap:10px;
  border:1px solid #e2e8f0;border-radius:10px;padding:10px 12px}
.rpt-ship-l{min-width:0;flex:1}
.rpt-ship-l b{font-size:14px;color:#0f172a}
.rpt-sub{display:block;font-size:12px;color:#64748b;margin-top:2px}
a.rpt-sub{color:#0e7490;text-decoration:none}
.rpt-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.rtag{font-size:11px;background:#f1f5f9;color:#475569;border-radius:6px;padding:2px 7px;font-weight:700}
.rtag.mem{background:#dcfce7;color:#15803d}
.rtag.zone{background:#e0f2fe;color:#0369a1}
.rpt-ship-r{display:flex;gap:12px;flex:none;align-items:flex-start}
.rpt-ship-r b{font-size:16px;color:#0f172a;font-weight:800;text-align:center;min-width:44px}
.rpt-ship-r b span{display:block;font-size:10.5px;color:#94a3b8;font-weight:600}
.rpt-detail{margin-top:7px}
.rpt-detail summary{font-size:12.5px;color:#0e7490;cursor:pointer}
.rpt-detail .rpt-table{margin-top:6px}
@media(max-width:640px){
  .rpt-ship{flex-direction:column}
  .rpt-ship-r{justify-content:flex-end}
  .rpt-fuel label{display:flex;margin-bottom:8px}
}
/* ===== 手机端 ===== */
/* v300 短抽屉：船名字号加大、归属地/镇村常显 */
#sheet.m-peek:not(.m-expanded) .sh-title-row .sh-name{font-size:17px}
#sheet.m-peek:not(.m-expanded) .sh-owner-line{font-size:12px;flex-wrap:wrap;gap:4px 10px}
#sheet.m-peek:not(.m-expanded) .sh-owner-line .sh-addr{display:inline}
#sheet.m-peek:not(.m-expanded) .sh-aux .tag{font-size:12px}

/* v302 适配：顶栏间距；“我的”改为底部弹窗（菜单仍左出、工具仍右出） */
@media (max-width:760px), (pointer:coarse) and (max-width:1100px){
  #m-topbar{gap:11px}
  #m-me-drawer{width:auto!important;left:0;right:0;top:auto!important;height:auto;
    max-height:82vh;border-radius:18px 18px 0 0;
    transform:translateY(108%);transition:transform .24s ease;
    padding:8px 14px calc(14px + env(safe-area-inset-bottom));
    bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom))!important}
  #m-me-drawer::before{content:"";width:42px;height:4px;border-radius:2px;
    background:#5b7a99;margin:2px auto 8px;flex:none}
  body.m-me #m-me-drawer{transform:none;display:flex!important}
}

/* ===== v310 低端机性能模式（UG905 等）：海图持续动画让路给抽屉操作 ===== */
/* 抽屉/大列表打开时，任何设备都停掉海图脉冲动画，避免开合卡顿 */
body.sheet-expanded .mk.pulse::after,
body.m-drawer .mk.pulse::after,
body.m-me .mk.pulse::after,
body.m-search .mk.pulse::after,
body.m-me-modal .mk.pulse::after,
body.sheet-expanded .mkc-pen::after,
body.m-drawer .mkc-pen::after,
body.m-me .mkc-pen::after,
body.m-search .mkc-pen::after,
body.m-me-modal .mkc-pen::after{display:none !important}
/* 低端机：永久关闭海图上的脉冲/信标动画，红色重点改为静态描边（只重绘一次） */
html.lowend .mk.pulse::after,
html.lowend .mkc-pen::after{display:none !important}
html.lowend .mk.pulse{box-shadow:0 0 0 2px rgba(239,68,68,.85)}
html.lowend .pbeacon,
html.lowend .mkc-pen,
html.lowend .mk.patrol,
html.lowend .gpulse,
html.lowend .netg-pulse,
html.lowend .guard-ring{animation:none !important}
/* 低端机：抽屉弹出动画缩短，减少掉帧感 */
html.lowend .sheet{animation:sheetUp .1s ease-out}

/* ===== 归属地标记 ===== */
.tag-place{font:inherit;line-height:1.2;cursor:pointer;padding:2px 8px}
.mhome-pick>b{font-size:15px;color:#eaf2fb}
.mhome-pick>small{display:block;color:#84a9c8;font-size:11.5px;margin:5px 0 8px}
.mhome-chips{display:flex;flex-wrap:wrap;gap:7px;padding:4px 2px}
.mhome-chips button{padding:7px 13px;border-radius:9px;border:1px solid #2a527a;background:#13304d;color:#dcebfb;font-size:13px;font-weight:700}
.mhome-btns{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
.mhome-btns button{padding:8px 16px;border-radius:9px;border:1px solid #2a527a;background:#0a1c30;color:#dcebfb;font-size:13px}

/* 船只标注设置弹窗 */
#ms-overlay{position:fixed;inset:0;z-index:2000;background:rgba(6,16,28,.55);
  display:none;align-items:flex-end;justify-content:center}
#ms-overlay.show{display:flex}
.ms-box{width:100%;max-width:520px;max-height:92vh;background:#f4f7fb;
  border-radius:18px 18px 0 0;display:flex;flex-direction:column;
  box-shadow:0 -10px 40px rgba(0,0,0,.4);overflow:hidden}
.ms-h{display:flex;align-items:center;justify-content:space-between;
  padding:14px 16px;border-bottom:1px solid #e2e8f0;background:#fff}
.ms-h b{font-size:16px;color:#0f2740}
.ms-h button{width:30px;height:30px;border:none;border-radius:50%;background:#eef2f7;
  font-size:18px;color:#475569;line-height:1}
.ms-body{padding:12px 16px;overflow-y:auto;-webkit-overflow-scrolling:touch}
.ms-sec-h{font-size:13px;font-weight:800;color:#0f2740;margin:14px 0 8px;
  display:flex;align-items:center;justify-content:space-between}
.ms-row{display:flex;align-items:center;justify-content:space-between;
  padding:7px 2px;font-size:13px;color:#334155}
.ms-row input{width:96px;padding:6px 8px;border:1px solid #cbd5e1;border-radius:8px;
  font-size:14px;text-align:center}
.ms-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ms-col{display:flex;flex-direction:column;align-items:center;gap:4px;
  background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:8px 4px;font-size:11px;color:#475569}
.ms-col input{width:38px;height:26px;padding:0;border:none;background:none}
.ms-hks{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.ms-chk{display:flex;align-items:center;gap:7px;background:#fff;border:1px solid #e2e8f0;
  border-radius:10px;padding:9px 10px;font-size:13px;color:#334155}
.ms-chk input{width:17px;height:17px}
.ms-pf{display:flex;gap:6px;align-items:center;margin-bottom:7px}
.ms-pf input{flex:1;padding:7px 9px;border:1px solid #cbd5e1;border-radius:8px;font-size:13px;min-width:0}
.ms-del{flex:0 0 28px;height:28px;border:none;border-radius:50%;background:#fee2e2;
  color:#dc2626;font-size:16px;line-height:1}
.ms-add{border:1px solid #16a34a;background:#f0fdf4;color:#15803d;border-radius:8px;
  font-size:12px;padding:4px 10px;font-weight:700}
.ms-foot{display:flex;gap:8px;padding:12px 16px;border-top:1px solid #e2e8f0;background:#fff}
.ms-btn{flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:10px;background:#f8fafc;
  color:#334155;font-size:14px;font-weight:700}
.ms-btn.primary{background:#1565c0;border-color:#1565c0;color:#fff}

/* ===== 船只详情头部：左信息 + 右功能钮 ===== */
.sh-head-grid{display:flex;gap:10px;align-items:flex-start}
.sh-head-left{flex:1 1 auto;min-width:0}
.sh-actions{flex:0 0 38px;display:flex;flex-direction:column;gap:7px;padding-top:2px}
.sh-act{width:38px;height:38px;border-radius:11px;border:1px solid #dbe3ee;background:#f4f7fb;
  color:#33507a;display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer}
.sh-act svg{width:19px;height:19px}
.sh-act:active{background:#e7eef8}
.sh-act.on{background:#e7f0fe;color:#1565c0;border-color:#a9c8f0}
.sh-title-row .sh-name{font-size:18px;font-weight:700}
.sh-aux{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;align-items:center}
@media (min-width:600px){
  .sh-actions{flex-basis:42px}.sh-act{width:42px;height:42px}
}

/* ===== 喊话面板 v3（对象/场景/话术/底部拇指区） ===== */
.hail-v3{gap:9px}
.hail-v3 .hail-obj-row{justify-content:space-between}
.hail-v3 .hail-obj-val{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:7px;
  background:#f1f5fb;border:1px solid #dbe3ee;border-radius:12px;padding:9px 11px;text-align:left}
.hail-v3 .hail-obj-lb{font-size:12px;color:#64748b;flex:none}
.hail-v3 .hail-obj-box{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px;
  font-weight:800;color:#1e3a5f;font-size:16px}
.hail-v3 #hail-obj-val{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hail-v3 .hail-obj-edit{color:#94a3b8;font-size:13px}
.hail-v3 .hail-bt-pill{flex:0 0 auto;border:1px solid #f3b7b7;background:#fdeeee;color:#c0392b;
  border-radius:999px;padding:7px 12px;font-size:13px;font-weight:700}
.hail-v3 .hail-bt-pill .bt-dot{width:9px;height:9px;border-radius:50%;background:#e04b4b;display:inline-block}
.hail-v3 .hail-bt-pill.on{background:#e9f8ef;border-color:#a7ddbd;color:#15803d}
.hail-v3 .hail-bt-pill.on .bt-dot{background:#22a057}
.hail-v3 .hail-scnrow{flex:none}
.hail-v3 .hail-scn{display:flex;gap:7px;overflow-x:auto;padding-bottom:2px}
.hail-v3 .hail-scn .hs-tab{flex:0 0 auto;border:1px solid #d5deea;background:#f5f8fc;color:#475569;
  border-radius:11px;padding:9px 15px;font-size:14px;font-weight:700}
.hail-v3 .hail-scn .hs-tab.on{background:#0f766e;color:#fff;border-color:#0f766e}
.hail-v3 .hail-tiles-wrap{flex:1 1 auto;min-height:96px;display:flex;align-items:flex-start;gap:7px}
.hail-v3 .hail-tiles{flex:1 1 auto;min-height:0;max-height:100%;overflow-y:auto;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;
  grid-auto-rows:minmax(50px,auto);padding-right:2px}
.hail-v3 .hail-add-tp{flex:0 0 30px;width:30px;height:30px;border-radius:9px;border:1px dashed #94a3b8;
  background:#f8fafc;color:#64748b;font-size:18px;line-height:1;display:flex;
  align-items:center;justify-content:center;align-self:flex-end;padding:0}
.hail-v3 .hail-bottom{flex:none;display:flex;flex-direction:column;gap:8px;
  padding-bottom:calc(6px + env(safe-area-inset-bottom));position:relative}
.hail-v3 .hail-bot-row{display:flex;gap:8px}
.hail-v3 .hail-vio-btn,.hail-v3 .hail-num-btn{flex:1 1 0;display:flex;align-items:center;
  justify-content:space-between;gap:6px;background:#f1f5fb;border:1px solid #dbe3ee;border-radius:12px;
  padding:10px 12px;font-size:13px;color:#64748b;font-weight:700}
.hail-v3 .hvb-v,.hail-v3 .hnb-v{color:#1e3a5f;font-size:14px;font-weight:800;max-width:55%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hail-v3 .hail-play-center{border:none;border-radius:14px;
  background:linear-gradient(180deg,#e84435,#c93024);color:#fff;font-weight:900;font-size:18px;padding:15px;
  display:flex;align-items:center;justify-content:center;gap:9px}
.hail-v3 .hail-play-center small{font-weight:700;font-size:12px;opacity:.9}
.hail-v3 .hail-play-center .hp-tri{border-left-color:#fff;margin-right:2px}
.hail-v3 .hail-play-center.playing{background:linear-gradient(180deg,#475569,#334155)}
.hail-v3 .hail-play-center.playing .hps-sq{width:12px;height:12px;background:#fff;border-radius:2px}
.hail-v3 .hail-close-xs{position:absolute;top:-3px;right:2px;border:none;background:transparent;
  color:#94a3b8;font-size:12px;padding:4px}
.hp-edit .he-tones{display:flex;gap:7px}
.hp-edit .he-tone{flex:1;border:1px solid #d5deea;background:#f5f8fc;color:#475569;border-radius:10px;
  padding:9px 4px;font-size:13px;font-weight:700}
.hp-edit .he-tone.on{background:#e7f0fe;color:#1565c0;border-color:#a9c8f0}
.hp-del-xs{border:none;background:transparent;color:#b0b8c4;font-size:12px;padding:6px 8px;text-decoration:underline}
.hp-vio .hail-vio{display:flex;flex-wrap:wrap;gap:8px}
.hp-vio .hv-chip{border:1px solid #d5deea;background:#f5f8fc;border-radius:10px;padding:9px 16px;
  font-weight:700;color:#475569;font-size:14px}
.hp-vio .hv-chip.on{background:#1565c0;color:#fff;border-color:#1565c0}

.na-run-btn{width:100%;border:1px dashed #94a3b8;background:#f8fafc;color:#475569;border-radius:11px;
padding:12px;font-size:14px;font-weight:700}
.na-run-btn:active{background:#eef2f7}

/* ===== v322 喊话：船号弹窗重构 + 取证折叠区 ===== */
.hp-num2{gap:7px;padding:11px 13px calc(12px + env(safe-area-inset-bottom))}
.hp-x{margin-left:auto;border:none;background:transparent;color:#94a3b8;font-size:16px;padding:2px 4px}
.hp-sumcard{background:#f1f5fb;border:1px solid #dbe3ee;border-radius:12px;padding:7px 10px;flex:none;display:flex;flex-direction:column;gap:5px}
.hp-sumrow{display:flex;align-items:center;gap:8px;font-size:13px}
.hsr-k{color:#64748b;font-weight:800;flex:none;min-width:30px}
.hsr-v{color:#0f2438;font-weight:900;font-size:16px;letter-spacing:1px;word-break:break-all}
.hsr-v.ph{color:#94a3b8;font-size:13px;font-weight:700;letter-spacing:0}
.hp-vchips{display:flex;flex-wrap:wrap;gap:6px}
.hp-vchip{border:1px solid #cbd5e1;background:#f8fafc;border-radius:9px;padding:6px 12px;
  font-size:13px;font-weight:800;color:#475569;touch-action:manipulation}
.hp-vchip.on{background:#1565c0;border-color:#1565c0;color:#fff}
.hp-prefix2{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;flex:none}
.hp-chip2{border:1.3px solid #cbd5e1;background:#f8fafc;border-radius:9px;padding:5px 0;
  font-size:13px;font-weight:800;color:#475569;touch-action:manipulation}
.hp-chip2.on{border-color:#1d4ed8;background:#dbeafe;color:#1d4ed8}
.hp-keypad5{display:flex;flex-direction:column;gap:6px;flex:none}
.hk5-row{display:flex;gap:6px}
.hk5-btn{flex:1 1 0;border:1px solid #cbd5e1;background:#f8fafc;color:#1f2937;
  border-radius:10px;font-size:18px;font-weight:900;padding:8px 0;touch-action:manipulation}
.hk5-btn:active{background:#e2e8f0}
.hk5-btn.util{background:#f1f5f9;font-size:15px;font-weight:800;color:#475569}
.hk5-btn.hk5-wide{flex:2 1 0;background:#fef3c7;font-size:15px}

/* 取证折叠区 */
.hail-fold{flex:none;border:1px solid #dbe3ee;border-radius:12px;overflow:hidden;background:#fff}
.hail-fold-h{width:100%;display:flex;align-items:center;gap:8px;padding:10px 13px;
  background:#f8fafc;border:none;touch-action:manipulation}
.hail-fold-h .hfh-lb{font-size:13.5px;font-weight:800;color:#334155}
.hail-fold-h .hfh-ic{margin-left:auto;color:#64748b;font-size:14px}
.hail-fold-body{padding:9px 11px calc(10px + env(safe-area-inset-bottom));border-top:1px solid #eef2f7}
.hfb-row{display:flex;gap:8px}
.hfb-btn{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:5px;
  border:1px solid #d5deea;background:#f5f8fc;border-radius:11px;padding:10px 4px;
  color:#334155;font-size:12.5px;font-weight:800;touch-action:manipulation}
.hfb-btn svg{color:#1d4e89}
.hfb-btn:active{background:#eaf0f8}
.hfb-guard{color:#475569}
.hfb-guard.rec{background:#fee2e2;border-color:#f0a8a8;color:#b91c1c}
.hfb-guard.busy{opacity:.6}

/* 底部船号·违法汇总钮 */
.hail-v3 .hail-sumbtn{display:flex;align-items:center;gap:9px;background:#f1f5fb;
  border:1px solid #dbe3ee;border-radius:12px;padding:10px 13px;touch-action:manipulation}
.hail-v3 .hail-sumbtn .hsb-k{color:#64748b;font-size:12.5px;font-weight:800;flex:none}
.hail-v3 .hail-sumbtn .hsb-v{color:#1e3a5f;font-size:14px;font-weight:800;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}

/* ===== v323 闯入船号弹窗：拉高·只读号大显示·违法移底部 ===== */
.hp-num2{max-height:92%;gap:8px;padding:11px 13px calc(12px + env(safe-area-inset-bottom))}
.hp-head2{font-size:16px}
.hp-readout{background:#0f2438;color:#7dd3fc;border-radius:11px;font-size:23px;font-weight:900;
  letter-spacing:3px;text-align:center;padding:11px;min-height:50px;word-break:break-all;flex:none}
.hp-readout.ph{color:#64748b;font-size:14px;font-weight:700;letter-spacing:1px}
.hp-prefix2{gap:5px}
.hp-chip2{padding:5px 0;font-size:12.5px}
.hp-keypad5{gap:5px}
.hk5-btn{font-size:18px;padding:8px 0}
.hp-viorow{display:flex;align-items:center;gap:8px;flex:none;flex-wrap:wrap}
.hp-vio-k{color:#64748b;font-size:12.5px;font-weight:800;flex:none}
.hp-viorow .hp-vchips{flex:1;display:flex;flex-wrap:wrap;gap:6px}
.hp-viorow .hp-vchip{padding:6px 13px;font-size:13px}
.hp-num2 .hp-actions{position:static}

/* ===== v323 执法记录仪简洁遥控 ===== */
.grs{display:flex;flex-direction:column;gap:9px}
.grs-st{display:flex;align-items:center;gap:9px;font-size:15px;color:#1f2937}
.grs-st b{font-size:16px}
.grs-dot{width:11px;height:11px;border-radius:50%;flex:none}
.grs-dot.on{background:#16a34a}
.grs-dot.off{background:#9ca3af}
.grs-dot.rec{background:#dc2626;animation:grsrecpulse 1.1s ease-in-out infinite}
@keyframes grsrecpulse{0%,100%{opacity:1}50%{opacity:.35}}
.grs-refresh{margin-left:auto;border:1px solid #d5deea;background:#f5f8fc;border-radius:8px;
  font-size:12px;color:#475569;padding:5px 10px;font-weight:700;touch-action:manipulation}
.grs-btns{display:flex;gap:9px}
.grs-recbtn{flex:1.4;border:none;border-radius:12px;padding:14px 6px;font-size:16px;font-weight:900;
  color:#fff;background:#16a34a;touch-action:manipulation}
.grs-recbtn.rec{background:#dc2626}
.grs-recbtn.off{background:#94a3b8}
.grs-savebtn{flex:1;border:1px solid #1d4e89;background:#eaf2fc;color:#1d4e89;border-radius:12px;
  padding:14px 6px;font-size:15px;font-weight:900;touch-action:manipulation}
.grs-note{font-size:12px;color:#94a3b8;line-height:1.6}
/* 主海图弹窗 */
.grs-modal{background:#fff;border-radius:16px;width:min(420px,92vw);padding:14px 15px calc(15px + env(safe-area-inset-bottom))}
.grs-modal-h{display:flex;align-items:center;margin-bottom:11px}
.grs-modal-h b{font-size:16px;color:#0f2438}
.grs-modal-x{margin-left:auto;border:1px solid #d5deea;background:#f5f8fc;border-radius:9px;
  font-size:13px;color:#475569;padding:7px 13px;font-weight:800}
/* 折叠体内边距微调 */
.hail-fold-body .grs-btns{flex-direction:row}

/* ===== v324 话术面板：头部小钮 / chips / 更多折叠 / 多行正文 ===== */
.hp-head-x{display:flex;align-items:center;gap:8px}
.hpx-btns{margin-left:auto;display:flex;gap:7px;align-items:center}
.hpx-edit,.hpx-x{width:32px;height:32px;border-radius:50%;border:1px solid #d5deea;
  background:#f5f8fc;color:#475569;font-size:14px;font-weight:800;line-height:1;
  display:flex;align-items:center;justify-content:center;touch-action:manipulation}
.hpx-edit{color:#1d4e89;border-color:#b9cde6;background:#eef4fc}
.hp-actions-x{justify-content:flex-start;gap:9px}
/* 多选/单选 chips */
.hp-edit .he-chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:2px}
.hp-edit .he-chip{border:1px solid #d5deea;background:#f5f8fc;color:#475569;
  border-radius:999px;padding:8px 15px;font-size:13.5px;font-weight:800;touch-action:manipulation}
.hp-edit .he-chip.on{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
/* 多行正文 */
.hp-edit textarea.he-textarea{width:100%;font-size:15px;line-height:1.6;padding:12px 13px;
  border:1px solid #94a3b8;border-radius:10px;background:#f8fafc;color:#0f172a;
  min-height:130px;resize:vertical}
.hp-edit .he-lab{font-size:13.5px;font-weight:800;color:#0f2438;margin:14px 0 6px}
/* 更多话术折叠条 */
.hail-more{grid-column:1/-1;border:1px dashed #cbd5e1;border-radius:11px;overflow:hidden}
.hail-more-h{width:100%;display:flex;align-items:center;padding:9px 13px;background:#f8fafc;
  font-size:13.5px;font-weight:800;color:#475569}
.hail-more-h b{margin-left:auto;font-size:13px}
.hail-more-body{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;
  padding:8px;border-top:1px solid #e5ebf2}
.hail-add-xs{grid-column:1/-1;border:1px dashed #7dd3fc;background:#f0f9ff;color:#0284c7;
  border-radius:10px;padding:10px;font-size:13.5px;font-weight:800}
/* 通用话术入口 */
.hail-tile.hail-tile-recs{border-color:#7dd3fc;background:#f0f9ff;color:#0369a1}
.hail-tile.hail-tile-recs .ht-ds{color:#0284c7}
/* 详情/编辑弹窗高度 */
.hp-detail,.hp-edit{max-height:88%;display:flex;flex-direction:column}
.hp-detail .hail-detail-text{flex:1 1 auto;overflow-y:auto}
.hp-edit{overflow-y:auto}
/* v325 */
/* 场景标签：四个一屏均分 */
.hail-scnrow{margin:0 0 7px}
.hail-scn{display:flex;gap:6px;overflow:visible}
.hail-v3 .hail-scn .hs-tab{flex:1 1 0;min-width:0;padding:8px 2px;font-size:14px;
 text-align:center;white-space:nowrap;border-radius:8px}
/* 对象行小笔（自己写备注） */
.hail-obj-note{flex:0 0 auto;width:38px;height:42px;border-radius:10px;
 background:#f1f5f9;color:#475569;font-size:16px;display:flex;align-items:center;
 justify-content:center}
/* 话术横滑翻页 */
.hail-pager-wrap{margin-bottom:2px}
.hail-pager{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;
 scrollbar-width:none;-ms-overflow-style:none}
.hail-pager::-webkit-scrollbar{display:none}
.hail-page{flex:0 0 100%;scroll-snap-align:start;display:grid;
 grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,minmax(50px,auto));
 gap:7px}
.hail-pager-dots{display:flex;gap:5px;justify-content:center;margin-top:6px;height:6px}
.hail-pager-dots i{width:5px;height:5px;border-radius:50%;background:#cbd5e1;
 transition:all .15s}
.hail-pager-dots i.on{background:#0d9488;width:13px;border-radius:3px}
/* 新增话术格 */
.hail-tile-add{border:1.5px dashed #94a3b8;background:#f8fafc;color:#475569}
.hail-tile-add .ht-lb{color:#0d9488}
.hail-tile-add .ht-ds{color:#94a3b8}
/* 手机取证收起条 */
.hail-fold-link{margin-bottom:7px}
.hail-fold-link b{font-size:18px;color:#94a3b8;font-weight:400}
/* 记录仪折叠关闭钮 */
.hail-fold-x{float:right;font-size:12px;color:#64748b;background:#f1f5f9;
 border-radius:8px;padding:4px 10px;margin-bottom:6px}
/* v326 同排工具卡片 */
.hail-toolcards{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:7px}
.htc{display:flex;align-items:center;justify-content:center;gap:6px;padding:11px 4px;
 border-radius:11px;font-size:14px;font-weight:700;border:1px solid transparent}
.htc-ico{width:19px;height:19px;flex:0 0 auto;display:flex}
.htc b{font-weight:400;font-size:17px}
.htc-ev{background:#ecfdf5;color:#047857;border-color:#a7f3d0}
.htc-ev b{color:#34d399}
.htc-guard{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe}
.htc-guard b{color:#93c5fd}
.htc-guard.on{background:#1d4ed8;color:#fff;border-color:#1d4ed8}
.htc-guard.on b{color:#bfdbfe}
/* 记录仪展开块独立样式 */
#hail-fold-body{margin:0 0 7px;border:1px solid #dbe3ee;border-radius:12px;background:#fff;
 padding:9px 11px calc(10px + env(safe-area-inset-bottom))}
/* 取证操作页紧凑头部 */
.evf-chead{border:1px solid #e2e8f0;border-radius:11px;background:#f8fafc;
 padding:8px 11px;margin-bottom:9px}
.evf-chrow{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#64748b;line-height:1.35}
.evf-chrow+.evf-chrow{margin-top:3px}
.evf-chr1 b{font-size:16px;color:#0f172a;font-weight:800}
.evf-chbeh{margin-left:auto;background:#dbeafe;color:#1e40af;border-radius:7px;
 padding:2px 9px;font-size:12px;font-weight:700}
.evf-chcopy{margin-left:auto;font-size:11px;color:#475569;background:#f1f5f9;
 border-radius:7px;padding:2px 9px}
.evf-chr3{color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* ===== v327锛氬枈璇濋潰鏉库€斺€旈敋瀹氳埞鍙峰脊绐?/ 鎵╅煶鍣ㄥ浘鏍?/ 璁板綍浠姸鎬佺偣 / 璁板綍浠瑙?===== */
.hail-v3{position:relative}

/* 绗簩灞傦細閬僵 + 绱ц创鍠婅瘽瀵硅薄琛岀殑鍗＄墖寮圭獥 */
.hail-pop-layer .hp-scrim{position:absolute;left:0;right:0;bottom:0;pointer-events:auto;
 background:rgba(10,24,42,.5)}
.hail-pop-layer .hp-sheet{position:absolute;left:0;right:0;pointer-events:auto;
 background:#fff;border-radius:14px 14px 0 0;box-shadow:0 -10px 32px rgba(2,12,27,.25);
 max-height:72%;overflow-y:auto}
.hail-pop-layer .hp-sheet.hp-num2{max-height:72%}
.hail-pop-layer .hp-x2{position:absolute;top:8px;right:10px;border:none;background:transparent;
 color:#94a3b8;font-size:17px;padding:4px 6px;z-index:3}

/* 鎵╅煶鍣ㄧ揣鍑戠姸鎬佸浘鏍?*/
.hail-v3 .hail-bt-ic{position:relative;flex:0 0 auto;width:42px;height:40px;border-radius:10px;
 background:#f1f5f9;color:#94a3b8;display:flex;align-items:center;justify-content:center;border:1px solid #e2e8f0}
.hail-v3 .hail-bt-ic svg{width:21px;height:21px}
.hail-v3 .hail-bt-ic .hbi-badge{position:absolute;top:-6px;right:-6px;min-width:15px;height:15px;
 border-radius:8px;background:#ef4444;color:#fff;font-size:9px;font-weight:800;
 display:flex;align-items:center;justify-content:center;padding:0 3px}
.hail-v3 .hail-bt-ic.on{background:#ecfdf5;color:#059669;border-color:#a7f3d0}
.hail-v3 .hail-bt-ic.on .hbi-badge{display:none}

/* 璁板綍浠崱鐗囩姸鎬佺偣 */
.hail-v3 .htc-dot{width:10px;height:10px;border-radius:50%;background:#9ca3af;flex:none;margin-left:2px}
.hail-v3 .htc-dot.ok{background:#16a34a}
.hail-v3 .htc-dot.rec{background:#dc2626;animation:grsrecpulse 1.1s ease-in-out infinite}

/* 鑸瑰彿路杩濇硶 鍗＄墖鎸夐挳 */
.hail-v3 .hail-numcard{flex:none;display:flex;align-items:center;gap:9px;width:100%;
 background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:13px 14px;
 font-size:14px;color:#475569}
.hail-v3 .hail-numcard .hnc-k{font-weight:800;color:#64748b;flex:none}
.hail-v3 .hail-numcard .hnc-v{margin-left:auto;color:#0f172a;font-weight:800;font-size:15px;
 overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hail-v3 .hail-numcard b{color:#94a3b8;font-weight:400;font-size:19px;flex:none}

/* 搴曢儴锛氬紑濮嬪枈璇?+ 鍏抽棴 */
.hail-v3 .hail-bottom{flex:none;display:grid;grid-template-columns:2fr 1fr;gap:8px;align-items:stretch}
.hail-v3 .hail-closebtn{border:1px solid #e2e8f0;border-radius:14px;background:#f1f5f9;
 color:#475569;font-size:15px;font-weight:800;padding:10px}

/* 璁板綍浠脊绐楋細瀹炴椂棰勮 */
.grs-preview{display:flex;flex-direction:column;gap:8px}
.grs-pvbtn{border:1px dashed #94a3b8;background:#f8fafc;color:#475569;border-radius:10px;
 padding:10px;font-size:13.5px;font-weight:700}
.grs-pvbox{position:relative;border-radius:10px;overflow:hidden;background:#0f172a}
#grs-pvframe{width:100%;aspect-ratio:16/9;border:0;display:block}
.grs-pvclose{position:absolute;top:6px;right:6px;border:none;border-radius:8px;
 background:rgba(15,23,42,.72);color:#fff;font-size:12px;font-weight:700;padding:5px 10px}

/* ===== v328锛歷327 瑙嗚鏀剁揣 ===== */
/* 璁板綍浠脊绐楋細涓嶆媺浼告弧灞忥紝搴曢儴/灞呬腑璐村唴瀹?*/
#grs-mask{align-items:flex-end}
@media(min-width:900px){#grs-mask{align-items:center}}
#grs-mask .grs-modal{max-height:90vh;overflow-y:auto}

/* 鑸瑰彿寮圭獥锛氭暣浣撴敹绱э紝纭畾閽笉鎶樺彔 */
.hail-pop-layer .hp-sheet.hp-num2{gap:5px;padding:9px 12px calc(10px + env(safe-area-inset-bottom))}
.hail-pop-layer .hp-num2 .hp-readout{font-size:20px;padding:8px 10px}
.hail-pop-layer .hp-num2 .hp-prefix2{gap:4px}
.hail-pop-layer .hp-num2 .hp-chip2{padding:4px 0}
.hail-pop-layer .hp-num2 .hp-keypad5{gap:4px}
.hail-pop-layer .hp-num2 .hk5-row{gap:5px}
.hail-pop-layer .hp-num2 .hk5-btn{font-size:17px;padding:6px 0}
.hail-pop-layer .hp-num2 .hk5-btn.util{font-size:14px;padding:7px 0}
.hail-pop-layer .hp-num2 .hp-viorow{gap:6px}
.hail-pop-layer .hp-num2 .hp-vchip{padding:5px 12px;font-size:12.5px}
.hail-pop-layer .hp-num2 .hp-actions3{padding:4px 0 1px}
.hail-pop-layer .hp-num2 .hp-actions3 .btn{padding:9px 4px;font-size:13.5px}
.hail-pop-layer .hp-num2 .hp-x2{top:6px}

/* ===== v329锛氳埞鍙峰脊绐楁暣闈㈡澘鍘嬫殫锛屽眰娆℃竻鏅?===== */
#hail-mask.pop-open #hail-body{background:rgba(10,24,42,.55)}
#hail-mask.pop-open .hp-scrim{display:none}
#hail-mask.pop-open .hail-v3 > *:not(.hail-pop-layer){pointer-events:none}
.hail-pop-layer .hp-sheet{box-shadow:0 12px 36px rgba(2,12,27,.32)}

/* ===== v330锛氬枈璇濆璞￠暱鏉?/ 鎵╅煶鍣ㄥ弶瑕嗙洊 / 寮圭獥鎷夐暱 ===== */
.hail-v3 .hail-obj-long{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:7px;
 background:#f8fafc;border:1px solid #e2e8f0;border-radius:11px;padding:12px 14px;text-align:left}
.hail-v3 .hail-obj-long #hail-obj-val{font-size:17px;font-weight:900;color:#0f2438;
 flex:0 1 auto;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hail-v3 .hail-obj-long .hol-vio{font-size:12.5px;color:#64748b;font-weight:700;flex:none}

/* 鎵╅煶鍣細鏈繛鎺ユ椂鍙夊彿鐩存帴鐩栧湪鍥炬爣涓?*/
.hail-v3 .hail-bt-ic{width:46px;height:46px}
.hail-v3 .hail-bt-ic .hbi-cross{position:absolute;inset:0;display:flex;align-items:center;
 justify-content:center;color:#dc2626;font-size:25px;font-weight:800;text-shadow:0 0 4px #fff}
.hail-v3 .hail-bt-ic.on .hbi-cross{display:none}

/* 寮圭獥娴湪鏆楀簳涓婏細鍥涜鍦嗭紝鎷夐暱 */
.hail-pop-layer .hp-sheet.hp-num2{border-radius:14px}

/* ===== v332 鍠婅瘽闈㈡澘锛氭祬鑹插簳 + 鐢诲儚琛?+ 鍥涘鏍兼搷浣滄澘 ===== */
#hail-mask #hail-body{background:#eef2f7}
#hail-mask.pop-open #hail-body{background:rgba(10,24,42,.55)}

/* 鐢诲儚琛?*/
.hail-portrait{background:#fff;border:1px solid #e2e8f0;border-radius:12px;
 padding:9px 11px;margin-bottom:8px}
.hail-portrait .hpr-lb{font-size:11px;color:#94a3b8;font-weight:800;margin-bottom:5px}
.hail-portrait .hpr-chips{display:flex;flex-wrap:wrap;gap:5px}
.hpr-chip{font-size:12px;font-weight:700;color:#334155;background:#f1f5f9;
 border-radius:6px;padding:3px 8px}
.hpr-chip.red{background:#fee2e2;color:#b91c1c}
.hpr-chip.amber{background:#fef3c7;color:#92400e}
.hpr-chip.green{background:#dcfce7;color:#15803d}

/* 鍥涘鏍兼搷浣滄澘锛堝崄瀛楀垎闅旂嚎锛?*/
.hail-pad{display:grid;grid-template-columns:1fr 1fr;background:#fff;
 border:1px solid #dbe3ec;border-radius:14px;overflow:hidden;margin-top:8px}
.hp-cell{position:relative;display:flex;flex-direction:column;align-items:center;
 justify-content:center;gap:2px;padding:12px 6px;background:#fff}
.hp-cell:nth-child(1),.hp-cell:nth-child(2){border-bottom:1px solid #e2e8f0}
.hp-cell:nth-child(1),.hp-cell:nth-child(3){border-right:1px solid #e2e8f0}
.hp-cell svg{width:23px;height:23px;color:#334155}
.hp-cell .hpc-lb{font-size:13.5px;font-weight:800;color:#1e293b;margin-top:2px}
.hp-cell .hpc-st{font-size:11px;color:#64748b}
.hp-cell .hpc-st.rec{color:#dc2626;font-weight:800}
.hp-cell .hpc-st.on{color:#16a34a;font-weight:800}
.hp-cell:active{background:#f1f5f9}

/* 鎵╅煶鍣ㄧ姸鎬?pill */
.hail-v332 .hail-bt-pill{display:flex;align-items:center;gap:4px;flex:none;
 border:1px solid #e2e8f0;border-radius:11px;background:#f8fafc;padding:0 10px;height:46px}
.hail-v332 .hail-bt-pill svg{width:21px;height:21px;color:#64748b}
.hail-v332 .hail-bt-pill #hail-bt-tx{font-size:12px;font-weight:800;color:#dc2626}
.hail-v332 .hail-bt-pill.on{background:#dcfce7;border-color:#86efac}
.hail-v332 .hail-bt-pill.on svg{color:#16a34a}
.hail-v332 .hail-bt-pill.on #hail-bt-tx{color:#16a34a}

/* 寮圭獥锛氭媺浼稿埌搴曢儴锛屾搷浣滃尯鍥哄畾绐楀彛涓嬫部 */
.hp-sheet.hp-num2,.hp-sheet.hp-dispose{display:flex;flex-direction:column}
.hp-sheet.hp-num2 .hp-actions3{margin-top:8px}
.hp-dhead{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.hp-dhead b{font-size:16px;color:#0f2438}
.hp-dhead span{font-size:11.5px;color:#64748b}

/* 寮圭獥鍐呭満鏅?chips锛堣嚜鍔ㄩ珮浜紝鍙墜鏀癸級 */
.hp-scnrow2{margin-top:7px}
.hp-scnrow2 .hp-rwlb{font-size:11.5px;color:#64748b;font-weight:800;display:block;margin-bottom:5px}
.hp-scnchips{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.hp-scnchip{border:1px solid #e2e8f0;background:#f8fafc;border-radius:8px;
 font-size:12px;font-weight:800;color:#475569;padding:7px 2px}
.hp-scnchip.on{background:#0d9488;border-color:#0d9488;color:#fff}

/* 澶勭疆寮圭獥 */
.hd-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.hd-opt{display:flex;flex-direction:column;gap:2px;border:1px solid #e2e8f0;
 border-radius:11px;padding:11px;background:#f8fafc}
.hd-opt b{font-size:15px;color:#1e293b}
.hd-opt span{font-size:11px;color:#64748b}
.hd-opt.hd-exp{background:#f0fdf4;border-color:#86efac}
.hd-opt.hd-ref{background:#fef2f2;border-color:#fca5a5}
.hd-opt.hd-pol{background:#fff7ed;border-color:#fdba74}
.hd-opt.hd-tr{background:#eff6ff;border-color:#93c5fd}
.hp-note2{width:100%;border:1px solid #e2e8f0;border-radius:10px;padding:9px;
 font-size:13px;margin-top:8px;resize:none}

/* 鎷掍笉閰嶅悎搴撳垪琛?*/
.rl-row{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid #e2e8f0;
 border-radius:12px;padding:10px 12px;margin-bottom:8px}
.rl-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.rl-main b{font-size:14.5px;color:#0f2438}
.rl-meta{font-size:11.5px;color:#64748b}
.rl-call,.rl-go{flex:none;border:1px solid #cbd5e1;background:#f8fafc;border-radius:9px;
 font-size:12.5px;font-weight:800;color:#1e293b;padding:7px 11px;text-decoration:none}
.rl-call{background:#dcfce7;border-color:#86efac;color:#15803d}


/* v332 fix: 弹窗拉到底 */
.hail-pop-layer .hp-sheet.hp-num2,.hail-pop-layer .hp-sheet.hp-dispose{max-height:none}
.hail-pop-layer .hp-sheet.hp-num2 .hp-actions3{margin-top:auto}
.hail-pop-layer .hp-sheet.hp-dispose .hp-actions{margin-top:auto}
/* ===== v333 缁熶竴灏哄路绱у噾路寮圭獥瑙勮寖 ===== */
:root{--std-sheet:76dvh}

/* 涓€绾у枈璇濋潰鏉匡細鍥哄畾楂樺害锛屽唴閮?flex 鍒嗛厤锛堟瘮渚嬬粺涓€锛?*/
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #hail-mask .modal-sheet{height:var(--std-sheet);max-height:var(--std-sheet);
    margin-bottom:calc(var(--tabbar-h,64px) + env(safe-area-inset-bottom) + 4px)!important;
    align-self:flex-end}
}
#hail-mask .modal-body{display:flex;flex-direction:column}
.hail-v332{flex:1;min-height:0;display:flex;flex-direction:column;gap:7px}
.hail-v332 .hail-obj-row{flex:none}
.hail-v332 .hail-portrait{flex:none;margin-bottom:0}
.hail-v332 .hail-pager-wrap{flex:1 1 auto;min-height:72px;display:flex;flex-direction:column}
.hail-v332 .hail-pager{flex:1;min-height:0}
.hail-v332 .hail-pad{flex:none;margin-top:0}
.hail-v332 .hail-bottom{flex:none}

/* 鐢诲儚锛氭棤鏍囬銆佹棤鍙峰嵆钘?*/
.hail-portrait{padding:8px 10px}
.hail-portrait .hpr-lb{display:none}

/* 鍥涘鏍兼敹绱э紙鎷囨寚浣嶃€佸皯鍗犺锛?*/
.hail-pad .hp-cell{padding:9px 6px;gap:1px}
.hail-pad .hp-cell svg{width:21px;height:21px}
.hail-pad .hp-cell .hpc-lb{font-size:13px;margin-top:1px}
.hail-pad .hp-cell .hpc-st{font-size:10.5px}

/* 杩濇硶琛岀疆浜庡脊绐椾笂閮?*/
.hp-viorow-top{margin-top:2px;margin-bottom:2px}

/* 娓呰埞娓呯綉涓€绾ф娊灞夛細缁熶竴楂樺害锛坧eek 鐭娊灞変繚鎸佷笉鍙橈級 */
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #sheet:not(.m-peek){height:var(--std-sheet);max-height:var(--std-sheet)}
}

/* 鎷掍笉閰嶅悎搴擄細涓庝竴绾ч潰鏉跨瓑楂?*/
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #refuse-mask .modal-sheet{height:var(--std-sheet);max-height:var(--std-sheet);
    border-radius:18px 18px 0 0}
  #refuse-mask .modal-body{overflow-y:auto}
}

/* ===== v334 抽屉三档尺寸 + 取证工作台 + 紧凑 OSD ===== */
:root{--sheet-short:30dvh;--sheet-mid:64dvh;--sheet-tall:92dvh}

@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  /* 中档：喊话面板 / 清船清网 / 我的 / 拒不配合库，全部等高 */
  #hail-mask .modal-sheet{height:var(--sheet-mid);max-height:var(--sheet-mid)}
  #sheet:not(.m-peek){height:var(--sheet-mid);max-height:var(--sheet-mid)}
  #m-me-drawer{height:var(--sheet-mid);max-height:var(--sheet-mid)}
  #refuse-mask .modal-sheet{height:var(--sheet-mid);max-height:var(--sheet-mid)}
  /* 短档：记录仪遥控 */
  #grs-mask .grs-modal{height:var(--sheet-short);max-height:var(--sheet-short);
    overflow:hidden;display:flex;flex-direction:column}
  #grs-modal-body{overflow-y:auto;min-height:0}
  /* 高档：取证工作台 */
  #evf-mask .evf-sheet{height:var(--sheet-tall);max-height:var(--sheet-tall)}
}

/* ===== 取证工作台：表头 + 三框体 + 底部操作 ===== */
#evf-mask .evf-sheet{display:flex;flex-direction:column;background:#eef2f7;
  border-radius:18px 18px 0 0;overflow:hidden}
.evf-headcard{flex:none;margin:9px 10px 2px;padding:9px 11px;background:#fff;
  border:1px solid #e2e8f0;border-radius:12px}
.eh-top{display:flex;align-items:center;gap:8px}
.eh-ship{font-size:19px;flex:1;min-width:0;color:#0f172a}
.eh-hail{font-size:12px;padding:5px 12px;border:1px solid #cbd5e1;border-radius:20px;
  background:#f8fafc;color:#334155;flex:none}
.eh-rows{display:flex;flex-wrap:wrap;gap:2px 14px;margin-top:5px;
  font-size:11.5px;color:#475569}
.eh-rows span{white-space:nowrap}

/* 三框体：均分剩余高度，每行内横滑 */
.et-row{flex:1 1 0;min-height:96px;display:flex;flex-direction:column;justify-content:center;
  padding:2px 0;border-top:1px dashed #dbe3ee}
.et-lb{font-size:12px;color:#334155;padding:0 12px;display:flex;gap:6px;align-items:center;flex:none}
.et-n{color:#94a3b8;font-weight:400}
.et-strip{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;
  padding:5px 12px;touch-action:pan-x;align-items:center;flex:none}
.et-strip::-webkit-scrollbar{display:none}
.et-cell{position:relative;flex:0 0 auto;width:104px;height:80px;border-radius:8px;
  overflow:hidden;background:#e2e8f0}
.et-cell img,.et-cell video{width:100%;height:100%;object-fit:cover;display:block}
.et-del{position:absolute;top:3px;right:3px;width:19px;height:19px;border-radius:50%;
  background:rgba(15,23,42,.72);color:#fff;font-size:11px;line-height:19px;text-align:center;padding:0}
.et-add{flex:0 0 auto;width:64px;height:80px;border-radius:8px;border:1.5px dashed #94a3b8;
  color:#475569;font-size:22px;background:transparent}
.et-add.alb{width:52px;font-size:12px}
.et-max{font-size:12px;color:#94a3b8;padding-left:4px}

/* 底部操作区：拇指位 */
.evf-foot{flex:none;border-top:1px solid #e2e8f0;background:#fff;
  padding:8px 10px calc(10px + env(safe-area-inset-bottom))}
.evf-foot .evf-actions{display:flex;gap:8px}
.evf-foot .evf-actions button{flex:1;font-size:14px;padding:10px 4px;border-radius:10px}
.evf-foot .evf-bchips{display:flex;gap:7px;margin:8px 0}
.evf-foot .evf-bchips .evf-bchip{flex:1;padding:8px 0;font-size:13.5px;border-radius:9px;
  background:#f1f5f9;border:1px solid #e2e8f0;color:#334155}
.evf-foot .evf-bchips .evf-bchip.on{background:#1d4ed8;color:#fff;border-color:#1d4ed8}
.evf-saverow{display:flex;gap:8px}
.evf-cancel{flex:0 0 84px;border-radius:10px;background:#f1f5f9;border:1px solid #e2e8f0;
  font-size:14px;color:#334155}
.evf-savebtn{flex:1;padding:13px;border-radius:10px;background:#dc2626;color:#fff;
  font-size:16px;font-weight:700}

/* ===== 相机/录像 OSD：船号大字，其余小字 ===== */
.cam-osd{top:10px!important;left:10px!important;right:10px!important;
  background:transparent!important;padding:0!important;max-width:none!important}
.osd-ship{display:block;font-size:17px;color:#fff;background:rgba(8,20,34,.62);
  padding:6px 11px;border-radius:8px;margin-bottom:4px}
.osd-rows{display:flex;flex-wrap:wrap;gap:2px 12px;background:rgba(8,20,34,.55);
  padding:5px 11px;border-radius:8px;font-size:11.5px;color:#e2e8f0}

/* ===== 话术：空白格 + 记录仪录像中脉冲 ===== */
.hail-tile-blank{visibility:hidden}
#hpc-guard-cell.rec{animation:hpRecPulse 1.1s infinite}
#hpc-guard-cell.rec #hpc-guard-st{color:#ef4444}
@keyframes hpRecPulse{0%{box-shadow:0 0 0 0 rgba(239,68,68,.55)}
  100%{box-shadow:0 0 0 9px rgba(239,68,68,0)}}
/* ===== v334b 收紧：记录仪短档 + 取证框体 ===== */
@media (max-width:760px),(pointer:coarse) and (max-width:1100px){
  #grs-mask .grs-modal-h{padding:9px 14px}
  #grs-modal-body{padding:6px 14px 8px}
  #grs-modal-body .grs-st{margin-bottom:7px}
  #grs-modal-body .grs-btns{gap:8px;margin-bottom:0}
  #grs-modal-body .grs-btns button{padding:9px 6px}
  #grs-modal-body .grs-preview{margin-top:8px}
  #grs-modal-body .grs-pvbtn{padding:8px}
  #grs-modal-body .grs-note{margin-top:8px;font-size:11px;line-height:1.4}
}
.et-cell{width:112px;height:88px}
.et-add{height:88px}
.et-hint{flex:1 1 auto;font-size:12px;color:#94a3b8;padding-left:2px;white-space:nowrap}
/* ===== v335 记录仪紧凑遥控：卡片往上弹 ===== */
/* 喊话内嵌弹层：底边贴四宫格 */
#hail-mask.pop-open .hail-v332 > *:not(.hail-pop-layer){pointer-events:none}
.hgrs-pop{background:#fff;border:1px solid #e2e8f0;border-radius:15px;
  box-shadow:0 16px 50px rgba(2,12,27,.4);padding:12px 13px;z-index:40}
.hgrs-top{display:flex;align-items:center;gap:9px}
.hgrs-top b{font-size:16px;color:#0f172a}
.hgrs-st{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:#475569}
.hgrs-ref{margin-left:auto;font-size:12px;padding:5px 11px;border-radius:20px;
  border:1px solid #cbd5e1;background:#f8fafc;color:#334155}
.hgrs-btns{display:flex;gap:9px;margin:10px 0 9px}
.hgrs-btns button{flex:1;padding:11px 6px;border-radius:10px;font-size:14px}
.hgrs-pvbtn{width:100%;padding:9px;border-radius:10px;border:1px dashed #94a3b8;
  background:#f8fafc;font-size:13px;color:#475569}
.hgrs-close{width:100%;padding:11px;border-radius:10px;background:#334155;color:#fff;
  font-size:15px;margin-top:9px}

/* 独立记录仪弹窗：同样紧凑，标题行内联，关闭在底部 */
#grs-mask .grs-modal{height:auto;max-height:82dvh;overflow:hidden;
  display:flex;flex-direction:column}
#grs-mask .grs-modal-h{display:none}
#grs-modal-body{overflow-y:auto;min-height:0;padding:12px 14px}
.grs-hrow{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.grs-hrow b{font-size:16px;color:#0f172a}
.grs-st2{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:#475569}
.grs-refresh{margin-left:auto;font-size:12px;padding:5px 11px;border-radius:20px;
  border:1px solid #cbd5e1;background:#f8fafc;color:#334155}
.grs-btns{display:flex;gap:9px;margin-bottom:9px}
.grs-btns button{flex:1;padding:11px 6px;border-radius:10px;font-size:14px}
.grs-preview{margin-bottom:8px}
.grs-pvbtn{width:100%;padding:9px;border-radius:10px;border:1px dashed #94a3b8;
  background:#f8fafc;font-size:13px;color:#475569}
.grs-pvbox{margin-top:8px}
.grs-pvbox iframe{width:100%;height:190px;border-radius:10px;background:#0b1b2d;
  border:1px solid #e2e8f0}
.grs-pvclose{margin-top:7px;width:100%;padding:8px;font-size:13px;border-radius:9px;
  background:#f1f5f9;border:1px solid #e2e8f0;color:#334155}
.grs-note{font-size:11px;color:#94a3b8;line-height:1.5;margin-bottom:9px}
.grs-closebtn{width:100%;padding:11px;border-radius:10px;background:#334155;color:#fff;
  font-size:15px}
/* ===== v336 桌面端还原记录仪弹窗原样（手机端不受影响） ===== */
@media (min-width:900px){
  #grs-mask .grs-modal-h{display:flex}
  .grs-hrow b{display:none}
  .grs-closebtn{display:none}
  #grs-mask .grs-modal{max-height:90vh}
}
/* ===== v337 修复记录仪弹层按钮点不动 ===== */
#hail-mask.pop-open .hail-pop-layer,
#hail-mask.pop-open .hail-pop-layer *{pointer-events:auto}
/* 与后面白色面板拉开层次 */
.hgrs-pop{box-shadow:0 18px 44px rgba(2,12,27,.5),0 0 0 1px rgba(2,12,27,.04)}
/* ===== v338 喊话面板精修 ===== */
/* 对象长条：船号大字，违法行为固定右侧等宽 */
.hail-obj-long{display:flex;align-items:center;gap:8px}
.hail-obj-long b{flex:1 1 auto;font-size:21px;font-weight:800;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;text-align:left}
.hol-vio{flex:0 0 70px;width:70px;text-align:right;font-size:14px;font-weight:600;color:#64748b}

/* 播放按钮：任何状态不换行、不变形 */
.hail-play{display:flex;align-items:center;justify-content:center;gap:8px;
  white-space:nowrap;overflow:hidden}
.hail-play .hpl-lb{white-space:nowrap}
.hail-play small{white-space:nowrap;overflow:hidden;text-overflow:clip}

/* 前缀选择加大 */
.hp-prefix2{gap:9px}
.hp-chip2{font-size:16px;font-weight:700;padding:11px 4px;border-radius:11px}

/* 数字键盘加大；清空2格、退格3格 */
.hp-keypad5 .hk5-row{gap:8px}
.hk5-btn{font-size:21px;font-weight:700;min-height:55px}
.hk5-row .util{flex:2 1 0}
.hk5-row .hk5-wide{flex:3 1 0}
.hk5-row .util,.hk5-row .hk5-wide{font-size:18px;min-height:53px}

/* 备注弹窗 */
.hp-rmk-t{font-size:16px;font-weight:700;margin:6px 0 12px}
.hp-rmk-in{padding:13px 12px;font-size:16px;border-radius:10px}

/* 记录仪预览：画面在按钮上方，关闭画面=右上角小胶囊 */
.grs-preview,.hgrs-pv{margin-bottom:9px}
.grs-pvbox{position:relative}
.grs-pvbox iframe{width:100%;height:200px;border-radius:10px;background:#0b1b2d;
  border:1px solid #e2e8f0;display:block}
.grs-pvclose{position:absolute;top:7px;right:7px;width:auto;margin:0;
  padding:4px 12px;font-size:12px;border-radius:16px;line-height:1.4;
  background:rgba(15,23,42,.72);color:#fff;border:1px solid rgba(255,255,255,.25)}
.grs-pvbtn,.hgrs-pvbtn{width:100%;padding:10px;border-radius:10px;
  border:1px dashed #94a3b8;background:#f8fafc;font-size:14px;color:#475569}
/* ===== v339 对象条钉右侧 + 船号大字 + 连播小字不挤位 ===== */
.hail-obj-row .hail-obj-long{flex:1 1 auto;min-width:0}
#hail-obj-val{font-size:20px}
.hail-play{position:relative}
.hail-play small{position:absolute;right:10px;top:50%;transform:translateY(-50%)}
/* ===== v340 对象条：船号撑满、违法钉右、字号20 ===== */
.hail-v3 .hail-obj-long #hail-obj-val{flex:1 1 auto;font-size:20px}
.hail-v3 .hail-obj-long .hol-vio{flex:0 0 70px;width:70px;
  text-align:right;font-size:14px}
/* ===== v341 红条右侧为连播小字预留空间 ===== */
.hail-play{padding-left:14px;padding-right:62px}
.hail-play small{font-size:11px}
.hail-play.playing{padding-right:14px}
/* ===== v342 底部对调后：关闭1份、喊话2份 ===== */
.hail-v3 .hail-bottom{grid-template-columns:1fr 2fr}
/* ===== v343 记录仪弹窗：全盖 + 框内离线提示 ===== */
.hgrs-pop{display:flex;flex-direction:column;padding:13px 14px}
.hgrs-obj{font-size:13px;color:#334155;background:#f1f5f9;border-radius:9px;
  padding:8px 11px;margin:9px 0 0}
.hgrs-pop .hgrs-pv{margin-top:10px}
.grs-pvmsg{height:200px;border-radius:10px;background:#0b1b2d;border:1px solid #e2e8f0;
  color:#cbd5e1;padding:22px;text-align:center;display:flex;
  align-items:center;justify-content:center}
.hgrs-close{margin-top:14px}

/* 独立记录仪弹窗（手机端）：底部全宽弹层，下沿盖过导航栏 */
@media (max-width:760px){
  #grs-mask .grs-modal{position:fixed;left:0;right:0;bottom:0;top:auto;
    transform:none!important;margin:0 auto;width:100%;max-width:480px;
    border-radius:16px 16px 0 0;height:auto;max-height:96dvh}
}
/* ===== v344 关闭钮沉底 ===== */
.hgrs-pop .hgrs-close{margin-top:auto}
/* ===== v345 内嵌弹窗关闭钮恢复常规间距 ===== */
.hgrs-pop .hgrs-close{margin-top:14px}
/* ===== v347 键盘第一行：前缀 + 声音/关闭侧列 ===== */
.hp-prefix-wrap{display:flex;gap:8px;align-items:stretch}
.hp-prefix-wrap .hp-prefix2{flex:1 1 auto;min-width:0}
.hp-pfside{display:flex;flex-direction:column;gap:7px;flex:0 0 47px;width:47px}
.hp-snd,.hp-x2b{flex:1 1 auto;border-radius:9px;border:1px solid #cbd5e1;
  background:#f8fafc;color:#334155;font-size:12px;font-weight:800;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  min-height:42px;padding:2px}
.hp-snd svg{width:19px;height:19px}
.hp-snd.muted{color:#94a3b8;background:#f1f5f9}
.hp-x2b{font-size:16px}
/* ===== v349 备注弹窗：大输入框、按钮收窄贴底 ===== */
.hp-remark2{display:flex;flex-direction:column}
.hp-rmk-t{margin:4px 0 11px}
.hp-rmk-in{min-height:104px;resize:none;line-height:1.5;
  font-size:17px;padding:14px}
.hp-remark2 .hp-actions3{margin-top:auto;justify-content:center;
  gap:20px;padding:14px 34px 16px}
.hp-remark2 .hp-actions3 .btn{flex:1 1 auto;max-width:130px}
/* ===== v349 备注弹窗：输入框拉高、按钮收窄、避让键盘 ===== */
.hp-remark2{padding:14px 16px 16px;gap:12px}
.hp-rmk-in{min-height:96px;border-radius:11px;padding:12px 13px;font-size:16px;
  line-height:1.5;resize:none;width:100%;box-sizing:border-box}
.hp-actions-rmk{display:flex;gap:14px;justify-content:center;margin-top:auto}
.hp-actions-rmk .btn{flex:0 1 140px;min-width:118px}
/* ===== v350 备注弹窗：键盘上输入框撑满、按钮钉在键盘上方 ===== */
.hp-remark2 .hp-rmk-in{flex:1 1 auto;min-height:96px}
/* ===== v354 取证页：浮动可拖拽关闭钮、底部按钮半透底色 ===== */
#chp-x{position:fixed;width:46px;height:46px;border-radius:50%;
  border:1px solid rgba(253,224,71,.7);background:rgba(15,23,42,.72);
  color:#fde047;font-size:19px;z-index:8;display:flex;align-items:center;
  justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.45)}
.cc-mini{background:rgba(15,23,42,.38);border-radius:14px;padding:8px 13px;gap:4px}
/* ===== v356 取证页改版 ===== */
#evf-mask .evf-sheet{position:relative}
#evf-mask .evf-headcard{padding:0;overflow:hidden;background:#eaf1f8;
  border:1px solid #c2d2e4;flex:none;margin:9px 10px 2px}
#evf-mask .eh-top{background:#16355c;color:#fff;padding:10px 14px;display:flex;align-items:center;gap:8px}
#evf-mask .eh-ship{font-size:19px;font-weight:800;color:#fff;flex:1;min-width:0}
#evf-mask .eh-rows{padding:9px 14px;display:flex;flex-wrap:wrap;gap:3px 16px}
#evf-mask .eh-rows span{font-size:12.5px;color:#334155;white-space:nowrap}
#evf-mask .eh-rows em{color:#94a3b8;font-style:normal}
.et-row-fix{flex:0 0 auto;min-height:0;margin:5px 0}
.et-fixed2{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:0 12px}
.et-cell.et-fix{width:auto;height:auto;aspect-ratio:4/3;border:1px solid #cbd5e1;overflow:hidden}
.et-cell.et-pending{width:auto;height:auto;aspect-ratio:4/3;border:1px dashed #94a3b8;border-radius:10px;
  background:#f8fafc;color:#64748b;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;font-size:13px;font-weight:700}
.et-pending small{font-size:10.5px;font-weight:400}
.et-addsm{flex:none;width:44px;height:80px;align-self:center;border:1px dashed #94a3b8;
  border-radius:9px;background:#f8fafc;color:#475569;font-size:20px}
.evf-foot .evf-actions3{display:grid!important;grid-template-columns:1fr 1.25fr 1fr;gap:9px}
.evf-foot .evf-actions3 button{min-height:60px;font-size:15px}
.evf-foot .evf-actions3 small{font-size:10.5px;font-weight:400;opacity:.9}
#evf-prog{position:absolute;inset:0;background:rgba(238,242,247,.86);z-index:30;
  display:flex;align-items:center;justify-content:center;border-radius:14px}
.ep-box{width:80%;max-width:320px;background:#fff;border:1px solid #dbe3ee;border-radius:14px;padding:20px;
  display:flex;flex-direction:column;gap:12px;box-shadow:0 12px 34px rgba(15,39,66,.2)}
.ep-spin{width:28px;height:28px;border-radius:50%;border:3px solid #cbd5e1;border-top-color:#2563eb;
  margin:0 auto;animation:eprot .8s linear infinite}
@keyframes eprot{to{transform:rotate(360deg)}}
.ep-tx{font-size:14px;color:#1e3a5f;text-align:center}
.ep-bar{height:8px;border-radius:6px;background:#e2e8f0;overflow:hidden}
.ep-bar i{display:block;height:100%;width:0;background:#2563eb;transition:width .25s}
.ep-done{font-size:16px;font-weight:800;color:#0f766e;text-align:center;padding:6px 0}
/* ===== v357 取证页：中部材料区滚动，头/底固定 ===== */
#evf-mask .evf-mid{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;
  display:flex;flex-direction:column;scrollbar-width:thin}
#evf-mask .evf-mid .et-row{flex:none;min-height:0;margin:6px 0}
#evf-mask .evf-mid .et-row .et-strip{padding-bottom:2px}
/* ===== v358 记录仪小图标 ===== */
.g-pin2{position:relative;width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1d4ed8,#1e3a8a);
  border:1.5px solid #fff;box-shadow:0 1px 4px rgba(15,23,42,.35)}
.g-pin2.off{background:linear-gradient(135deg,#64748b,#475569)}
.g-pin2::after{content:"";position:absolute;bottom:-5px;left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#1e3a8a}
.g-pin2.off::after{border-top-color:#475569}
.g-dot{position:absolute;right:-2px;top:-2px;width:9px;height:9px;border-radius:50%;
  background:#22c55e;border:1.5px solid #fff}
/* ===== v359 取证页：三等份小缩略图、弹层停在导航栏上、灯箱 ===== */
@media (max-width:899px){
  #evf-mask{align-items:flex-end}
  #evf-mask .evf-sheet{
    height:calc(100dvh - var(--tabbar-h) - env(safe-area-inset-bottom) - 6px);
    max-height:calc(100dvh - var(--tabbar-h) - env(safe-area-inset-bottom) - 6px);
    margin-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
    border-radius:16px 16px 0 0}
}
#evf-mask .eh-top{flex-wrap:wrap;gap:8px}
#eh-shipbtn{background:none;border:none;padding:0;cursor:pointer;flex:1 1 auto;min-width:120px}
.eh-type{flex:none;font-size:11.5px;font-weight:700;background:rgba(96,165,250,.22);
  border:1px solid rgba(147,197,253,.5);color:#eaf4ff;border-radius:20px;padding:4px 11px}
/* 材料三等份 */
#evf-mask .evf-mid .et-row{flex:1 1 0;min-height:0;display:flex;flex-direction:column;
  padding:3px 0;margin:0}
#evf-mask .evf-mid .et-strip{flex:1 1 auto;align-items:center;min-height:0}
button.et-cell{padding:0;border:1px solid #cbd5e1;border-radius:9px;overflow:hidden;
  position:relative;background:#f1f5f9;flex:0 0 auto;width:92px;height:68px;cursor:pointer}
.et-cell img,.et-cell video{width:100%;height:100%;object-fit:cover;display:block}
button.et-cell.et-pending{border-style:dashed;background:#f8fafc;color:#64748b;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;font-size:12.5px;font-weight:700}
.et-pending small{font-size:10px;font-weight:400}
.et-del{position:absolute;right:3px;top:3px;width:18px;height:18px;border-radius:50%;
  background:rgba(15,23,42,.62);color:#fff;font-style:normal;font-size:10px;
  display:flex;align-items:center;justify-content:center;z-index:2}
.et-addsm{flex:none;width:44px;height:68px;border:1px dashed #94a3b8;border-radius:9px;
  background:#f8fafc;color:#475569;font-size:20px;cursor:pointer}
/* 底部两大钮 */
.evf-foot .evf-actions2{display:grid;grid-template-columns:1fr 1.2fr;gap:9px}
/* 灯箱 */
#evf-lb{display:flex;align-items:center;justify-content:center;background:rgba(8,15,28,.62)}
.evf-lb-box{position:relative;max-width:94vw;max-height:88vh}
.evf-lb-box img,.evf-lb-box video{max-width:94vw;max-height:82vh;border-radius:10px;display:block}
.evf-lb-x{position:absolute;top:10px;right:10px;background:rgba(15,23,42,.72);color:#fff;
  border:none;border-radius:20px;padding:7px 16px;font-size:13px;cursor:pointer}
/* ===== v360 取证页：三行压矮、正方形缩略图、标签在左 ===== */
#evf-mask .evf-mid .et-row{flex:none;min-height:0;height:64px;margin:2px 0;
  display:flex;flex-direction:row;align-items:center}
#evf-mask .evf-mid .et-lb{flex:0 0 72px;flex-direction:row;gap:3px;
  align-items:baseline;padding:0 6px 0 2px;font-size:12px}
#evf-mask .evf-mid .et-strip{flex:1 1 auto;flex-direction:row;align-items:center;
  min-height:0;gap:7px;padding:0 2px}
#evf-mask button.et-cell{width:58px;height:58px;border-radius:9px}
#evf-mask .et-cell.et-pending{font-size:11px;gap:2px}
#evf-mask .et-pending small{font-size:9px}
#evf-mask .et-addsm{width:58px;height:58px;font-size:20px}
.evf-foot .evf-actions3{display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:8px}
/* ===== v361 船只画像上抽屉 ===== */
@media (max-width:899px){
  .hol-vio{display:none!important}
  .hail-portrait{display:none!important}
}
.hps-up{position:fixed;z-index:1250;display:flex;flex-direction:column;
  border-radius:14px 14px 0 0;overflow:hidden;
  background:#e7eef8;border:1px solid #b7cde6;border-bottom:none;
  box-shadow:0 -6px 22px rgba(10,30,60,.2)}
.hps-head{display:flex;align-items:center;gap:8px;width:100%;
  background:linear-gradient(135deg,#1d4576,#16355c);color:#fff;
  border:none;padding:10px 13px;cursor:pointer;text-align:left}
.hps-ti{font-size:14px;font-weight:800;flex:none}
.hps-sum{flex:1 1 auto;font-size:11.5px;opacity:.93;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hps-chev{flex:none;font-size:12px}
.hps-body{padding:10px 13px 13px;overflow-y:auto;background:#e7eef8}
.hps-grid{display:grid;grid-template-columns:64px 1fr;gap:5px 8px;
  font-size:12px;align-items:center}
.hps-k{color:#5b718c;font-weight:700}
.hps-v{color:#172942;word-break:break-word}
.hps-v em{color:#94a3b8;font-style:normal}
.hps-hist{margin-top:9px;width:100%;border:1px solid #9db8dd;background:#f2f7fd;
  border-radius:9px;padding:8px 10px;font-size:12px;font-weight:700;color:#1c4580;
  cursor:pointer;text-align:left}
.hps-hist.open{background:#dde9f8}
.hps-acts{margin-top:7px;display:flex;flex-direction:column;gap:4px}
.hps-act{display:flex;gap:8px;background:#f6f9fd;border:1px solid #d4e1f1;
  border-radius:8px;padding:6px 9px;font-size:11px;align-items:baseline}
.hps-act span{color:#637c9b;flex:none;font-variant-numeric:tabular-nums}
.hps-act b{color:#1e3355;font-weight:700}
.hps-act i{color:#64748b;font-style:normal;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.hps-no{font-size:11px;color:#94a3b8;padding:4px}
@media (min-width:900px){.hps-up{display:none!important}}
/* ===== v362 画像上抽屉：沿用现有浅色风格，折叠态隐藏正文 ===== */
.hps-up{background:#ffffff;border:1px solid #e2e8f0;
  box-shadow:0 10px 26px rgba(15,36,56,.14)}
.hps-head{background:#fbfdff;color:#0f2438;border-bottom:1px solid #eef2f7}
.hps-ti{color:#0f2438}
.hps-sum{color:#64748b}
.hps-chev{color:#2563eb}
.hps-body{background:#ffffff}
.hps-up:not(.open) .hps-body{display:none}
.hps-up:not(.open) .hps-head{border-bottom:none}
.hps-hist{background:#f8fafc;border:1px solid #e2e8f0;color:#1c4580}
.hps-hist.open{background:#eef4fc}
.hps-act{background:#f8fafc;border:1px solid #eef1f5}
.hps-act span{color:#64748b}
.hps-act b{color:#1e3355}
/* ===== v363 船号位：默认占位小字淡色 ===== */
#hail-mask .hail-obj-long #hail-obj-val.placeholder{
  font-size:14px;font-weight:500;color:#94a3b8;flex:1 1 auto}
/* ===== v364 画像全高：浅蓝底、历史案件铺开 ===== */
.hps-up .hps-body{display:flex;flex-direction:column;background:#eef4fb}
.hps-sec{flex:none;font-size:11.5px;font-weight:800;color:#1c4580;margin:9px 0 5px}
.hps-evlist{flex:1 1 auto;min-height:70px;overflow-y:auto;
  display:flex;flex-direction:column;gap:4px}
.hps-ev{display:flex;gap:6px;align-items:center;background:#ffffff;
  border:1px solid #dbe5f1;border-radius:8px;padding:5px 7px;font-size:10.5px}
.he-dt{color:#64748b;flex:none;font-variant-numeric:tabular-nums}
.he-zo{color:#2563eb;flex:none;font-weight:700}
.he-et{color:#1e3355;font-weight:700;flex:1 1 auto;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.he-st{font-style:normal;flex:none;font-size:10px;border-radius:10px;padding:2px 7px}
.st-pen{background:#fef3c7;color:#92400e}
.st-cl{background:#dcfce7;color:#166534}
.st-conf{background:#dbeafe;color:#1e40af}
.st-rev{background:#e0e7ff;color:#3730a3}
.st-other{background:#e2e8f0;color:#475569}
.hps-acts2{flex:none;max-height:124px;overflow-y:auto;
  display:flex;flex-direction:column;gap:4px}
/* ===== v368 画像：风险标签 + 喊话建议 ===== */
.hps-risk{flex:none;display:flex;gap:6px;align-items:center;flex-wrap:wrap;
  margin-top:9px}
.rk-tag{flex:none;font-size:12px;font-weight:800;border-radius:12px;padding:3px 11px}
.rk-init{background:#dcfce7;color:#166534}
.rk-rep{background:#fef3c7;color:#92400e}
.rk-hab{background:#fee2e2;color:#991b1b}
.rk-days{flex:1 1 auto;font-size:11.5px;color:#475569;font-weight:700;min-width:0}
.rk-ref{flex:none;font-size:11.5px;color:#64748b;font-weight:700;
  background:#f1f5f9;border-radius:10px;padding:3px 9px}
.rk-ref.on{background:#fee2e2;color:#b91c1c}
.hps-adv{flex:none;display:flex;gap:7px;align-items:center;margin-top:8px;
  background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:7px 9px}
.ha-lb{flex:none;font-size:11px;font-weight:800;color:#1d4ed8}
.hps-adv b{flex:1 1 auto;font-size:11.5px;color:#1e3a8a;font-weight:700;min-width:0}
.ha-btn{flex:none;border:none;background:#2563eb;color:#fff;font-size:11.5px;
  font-weight:800;border-radius:9px;padding:6px 13px}
.ha-btn:active{background:#1d4ed8}
/* ===== v369 画像：标签化 + 手风琴历史 + 关闭钮 ===== */
.hps-head{display:flex;align-items:center;gap:8px;
  background:#fbfdff;border-bottom:1px solid #eef2f7;padding:11px 13px}
.hps-xbtn{flex:none;margin-left:auto;border:1px solid #cbd5e1;background:#f8fafc;
  color:#475569;font-size:12px;font-weight:800;border-radius:9px;padding:5px 13px}
.hps-xbtn:active{background:#e2e8f0}
.hps-tags{flex:none;display:flex;flex-wrap:wrap;gap:6px;padding:10px 2px 2px}
.htag{font-size:11.5px;font-weight:800;border-radius:11px;padding:4px 10px;
  background:#f1f5f9;color:#334155}
.t-place{background:#dbeafe;color:#1e40af}
.t-nature{background:#e0e7ff;color:#3730a3}
.t-coop-on{background:#dcfce7;color:#166534}
.t-cur{background:#fef9c3;color:#854d0e}
.t-sus{background:#ffedd5;color:#c2410c}
.t-state{background:#f1f5f9;color:#475569}
.hps-acc{flex:none;display:flex;align-items:center;justify-content:space-between;
  width:100%;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;
  padding:8px 11px;font-size:12px;font-weight:800;color:#1c4580;margin-top:8px}
.hps-acc b{font-weight:900;transition:transform .18s ease}
.hps-acc.open b{transform:rotate(90deg)}
.hps-accbody{flex:none;max-height:168px;overflow-y:auto;
  display:flex;flex-direction:column;gap:4px;margin-top:5px}
.hps-accbody[hidden]{display:none}
/* v371：统一键盘中间加长钮 + 无号备注快捷项 */
.hp-actions3 .hp-midlong{flex:1.5;font-size:13px;font-weight:700}
.hrmk-quick{display:flex;flex-wrap:wrap;gap:8px;flex:none}
.hrmk-q{border:1.5px dashed #b8c5d6;background:#fff;color:#5a6a82;
  border-radius:10px;padding:8px 14px;font-size:16px;font-weight:600}
.hrmk-q.sel{border:1.5px solid #2f6fed;background:#e9f1fe;color:#1d4ed8}
.hrmk-tick{color:#1d4ed8;font-weight:800;margin-right:5px}
.hrmk-q:active{background:#f3f7fc}
/* v371 备注模态文本域 + 弹层头部吸顶 */
.hp-rmk-mid{width:100%;min-height:128px;resize:none;line-height:1.5;
  border-radius:11px;padding:12px 13px;font-size:16px}
.evf-pop .hp-head{position:sticky;top:0;background:#fff;padding:2px 0 6px;z-index:2}
/* v371 五列键盘短屏兜底：内容超高时内部滚动，动作行保持吸底可见 */
.hp-num2{overflow-y:auto}
/* v371 五列键盘动作行强制吸底（覆盖 .hp-num2 .hp-actions static） */
.hp-num2 .hp-actions3{position:sticky;bottom:0}
/* ===== v372 ===== */
/* 船号白框固定高度，内容变化不变形、不挤压下方 */
.hail-v332 .hail-obj-long{min-height:56px}
/* 船号后尾随备注小字 */
.hov-rmk{font-size:14px;font-weight:600;color:#b45309}
/* 无号备注：标签单行横滑 */
.hrmk-hint{font-size:11px;color:#8a97a6;font-weight:400;margin-left:8px}
.hrmk-scrollwrap{position:relative}
.hrmk-scroll{display:grid;grid-template-rows:repeat(2,minmax(40px,auto));grid-auto-flow:column;grid-auto-columns:max-content;gap:8px 9px;overflow-x:auto;scroll-snap-type:x proximity;
  padding:3px 2px 9px;-webkit-overflow-scrolling:touch}
.hrmk-scroll::-webkit-scrollbar{display:none}
.hrmk-scroll .hrmk-q{width:100%;scroll-snap-align:start;position:relative;white-space:nowrap;
  min-height:40px}
.hrmk-q.add{border-style:dashed!important;color:#7a8aa0;border-color:#c2cdda!important;
  background:#f7fafd;font-size:20px;font-weight:700;min-width:48px;padding:8px 0}
.hrmk-addrow{display:flex;gap:8px;align-items:center;background:#f6f9fd;border:1px solid #dde5ef;
  border-radius:10px;padding:8px;flex-wrap:wrap}
.hrmk-addin{flex:1;min-width:120px;border:1px solid #cdd8e6;border-radius:8px;padding:9px 11px;
  font-size:16px;background:#fff}
.hrmk-addok{border:none;background:#16a34a;color:#fff;border-radius:8px;padding:9px 14px;font-weight:700;font-size:15px}
.hrmk-adddel{border:none;background:#dc2626;color:#fff;border-radius:8px;padding:9px 12px;font-weight:700;font-size:14px}
.hrmk-addcancel{border:1px solid #cdd8e6;background:#fff;color:#5a6a82;border-radius:8px;padding:9px 12px;font-size:14px}
.hrmk-ren-in{width:96px;font-size:15px;border:1px solid #c3ccd8;border-radius:8px;
  padding:7px 9px}
.hrmk-ok{color:#16a34a;font-weight:800;padding:0 3px}
.hrmk-del{color:#dc2626;font-size:12px;white-space:nowrap}
.hrmk-arrow{position:absolute;right:-2px;top:50%;transform:translateY(-50%);display:none;
  background:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,.9) 45%);border-radius:0;color:#9aa7b8;
  padding:18px 4px 18px 20px;border:none;opacity:.72;
  -webkit-tap-highlight-color:transparent}
.hrmk-arrow:active{opacity:1}
/* 无号备注：全宽底部弹层，贴键盘 */
.hail-pop-layer .hp-sheet.hp-remark-sheet{border-radius:16px 16px 0 0;display:flex;flex-direction:column;
  gap:9px;padding:12px 14px calc(10px + env(safe-area-inset-bottom));overflow-y:auto}
.rmk-head{display:flex;align-items:center;gap:8px}
.rmk-head b{font-size:18px;color:#10243c}
.rmk-x{margin-left:auto;border:none;background:transparent;color:#94a3b8;font-size:18px;padding:4px 6px}
.hp-remark-sheet .hp-rmk-mid{min-height:84px}
.hp-remark-sheet .hp-actions{margin-top:2px}

/* v372fix: 通用弹窗改浅色，深色底上更醒目 */
#m-me-modal{background:rgba(2,10,22,.62)!important}
#m-me-modal .mmm-box{background:#ffffff;border:1px solid #e2e8f0;max-width:380px;
  box-shadow:0 22px 70px rgba(2,10,24,.55)}
#m-me-modal .mmm-head{color:#0f172a;border-bottom:1px solid #e8eef5;padding:14px 16px}
#m-me-modal .mmm-body{color:#1f2937;padding:14px 16px 18px}
#m-me-modal .mmm-ul li b{color:#0f172a}
#m-me-modal .mf-item{background:#f8fafc;border:1px solid #e2e8f0}
#m-me-modal .mf-item b{color:#0f172a}
#m-me-modal .mf-item small{color:#64748b}
#m-me-modal .mempty{color:#94a3b8}
/* 标记/修改船名：大号输入框 */
.mmark-ship{gap:10px}
.mmark-ship b{font-size:18px}
.mmark-ship input{width:100%;min-height:56px;font-size:17px;color:#0f172a;
  border:1.5px solid #cbd5e1;border-radius:12px;padding:13px 14px;background:#fff;
  -webkit-appearance:none;appearance:none}
.mmark-ship input:focus{outline:none;border-color:#d97706;
  box-shadow:0 0 0 3px rgba(217,119,6,.16)}
.mmark-btns{margin-top:2px}
.mmark-btns button{padding:13px 8px;font-size:15px}

/* v373: 小屏弹窗适配——底部锚定、按内容向上生长、超高内滚；画像不遮面板、弹层打开时隐藏 */
@media (max-width:899px){
  body.hail-pop-open #hail-prof-sheet{display:none!important}
  .hail-pop-layer .hp-sheet{top:auto!important;bottom:0;left:0;right:0;
    height:auto;max-height:100%!important;overflow-y:auto}
  .hail-pop-layer .hp-sheet.hp-num2,
  .hail-pop-layer .hp-sheet.hp-dispose{display:flex;flex-direction:column}
  .hail-pop-layer .hp-num2 .hp-actions3,
  .hail-pop-layer .hp-dispose .hp-actions{margin-top:8px!important;
    position:sticky;bottom:0;background:#fff;z-index:2}
}

/* v373b */
#hail-prof-sheet .hps-body{flex:1 1 auto;min-height:0}

/* ===== v379 ===== */
/* 搜索：输入框内联顶栏，点搜索只弹键盘；下拉仅结果，遮罩不压暗地图 */
#m-search-edit{display:none;flex:1;height:40px;border-radius:12px;background:#fff;align-items:center;gap:7px;padding:0 6px 0 12px;box-shadow:0 2px 8px rgba(0,0,0,.18)}
#m-search-edit .ms-ico{flex:none;color:#1565c0;display:flex}
#m-search-edit input{flex:1;min-width:0;height:40px;border:none;outline:none;background:transparent;font-size:13px;color:#0f2438}
#m-search-edit #msp-cancel{flex:none;border:none;background:transparent;color:#1565c0;font-size:13px;padding:4px 6px}
body.m-search #m-search{display:none}
body.m-search #m-search-edit{display:flex}
#m-search-mask{background:transparent!important}
/* 图层面板：功能海区4格、海区界线3格，等分齐边，去眼睛图标 */
#lg-tog-area{display:grid!important;grid-template-columns:repeat(4,1fr);flex-wrap:nowrap!important}
#lg-tog-line{display:grid!important;grid-template-columns:repeat(3,1fr);flex-wrap:nowrap!important}
#lg-tog-area .lg-toggle,#lg-tog-line .lg-toggle{justify-content:center;padding:7px 2px;text-align:center;font-size:11.5px}
#lg-tog-area .lg-toggle .eye,#lg-tog-line .lg-toggle .eye{display:none}
.swatch.wind{background:#c084fc}
/* 详情抽屉：位置左、状态右，同一行 */
#sheet .sh-state-loc{flex-direction:row!important;align-items:center!important;justify-content:space-between!important;gap:6px!important}
#sheet .sh-state-loc .sl-loc{flex:1 1 auto!important;width:auto!important;max-width:none!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#sheet .sh-state-loc .st-pill{flex:none!important;align-self:auto!important;white-space:nowrap}
/* 详情抽屉眉头加深、眉眼线下沉 */
.sh-head{background:#0b2036!important;border-color:#1a3a5c!important;border-bottom-color:#2f6090!important}

/* ===== v380 ===== */
/* 社员绿帽（最下一层帽子，替代属地） */
.mhat.mh-wl{background:#16a34a;color:#fff}
/* 喊话面板显号框：紧凑单行（原 min-height56 + 大 padding 显得空荡过高） */
.hail-v332 .hail-obj-long{min-height:0!important;padding:9px 14px!important}

/* ===== v382 风电塔 ===== */
.wt-ic-wrap{background:transparent!important;border:none!important}
.wt-ic{position:relative;width:20px;height:30px}
.wt-ic svg{position:absolute;left:0;top:8px;display:block;filter:drop-shadow(0 0 1px rgba(255,255,255,.85))}
.wt-num{position:absolute;left:50%;top:-11px;transform:translateX(-50%);height:10px;min-width:8px;padding:0;
 background:transparent;color:#374151;font-size:8.5px;line-height:10px;text-align:center;font-style:normal;font-weight:600;
 font-family:-apple-system,"Segoe UI",Roboto,sans-serif;white-space:nowrap;
 text-shadow:0 1px 1.5px #fff,0 -1px 1.5px #fff,1px 0 1.5px #fff,-1px 0 1.5px #fff}
.wt-cdot{position:absolute;left:8px;top:27px;width:4px;height:4px;border-radius:50%;
 background:#6b7280;box-shadow:0 0 0 1px rgba(255,255,255,.85)}
.wt-num{display:none}
.wt-hats .wt-num{display:block}

/* v392 升压站标注 */
.wsub-ic-wrap{background:transparent!important;border:none!important}
.wsub-ic{position:relative;width:130px;height:20px;display:flex;flex-direction:row;align-items:center}
.wsub-sq{width:10px;height:10px;background:#dc2626;border:1px solid #7f1d1d;border-radius:1px;
 box-shadow:0 0 0 1px rgba(255,255,255,.9);flex:0 0 auto}
.wsub-leader{width:9px;height:0;border-top:1px solid #b91c1c;flex:0 0 auto}
.wsub-tx{font-size:12px;line-height:13px;color:#991b1b;font-weight:700;white-space:nowrap;
 font-family:-apple-system,"Segoe UI",Roboto,sans-serif;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 2px #fff}

/* v384 离线地图行 */
.lg-offline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:2px 0 6px}
.lg-offline #offtile-status{font-size:12px;color:#475569}
.lg-offline .shot-btn{white-space:nowrap}
.lg-offline .shot-btn:disabled{opacity:.6}


/* v386 手机端船标缩小（html.m-ui 仅手机端；电脑端不命中、保持原样）。
   .mk.patrol/.mk.net 特异性(0,2,0)高于 html.m-ui .mk(0,1,1)，不受影响。 */
html.m-ui .mkwrap{width:27px;height:27px}
html.m-ui .mk{width:23px;height:23px;font-size:10px}


/* v387 风电塔尺度：基础整体放大(1.15)，地图容器带 wt-big（z>=14）时再大一档(1.4)。
   变换原点为底部圆心(50% 100%)，锚点（立杆底圆心点）不动，图标只向上放大。 */
.wt-ic{transform:scale(var(--wt-scale,1));transform-origin:50% 100%;}
.m-ui .wt-ic{transform:scale(.95);}
.m-ui.wt-hats .wt-ic{transform:scale(1.08);}
.m-ui.wt-big .wt-ic{transform:scale(1.4);}

/* _v431 船只概览色点：缩小只看分布，按身份配色 */
.sdot-wrap{width:14px;height:14px}
.sdot{position:absolute;left:50%;top:50%;border-radius:50%;transform:translate(-50%,-50%);
 box-shadow:0 0 0 1px rgba(255,255,255,.78)}
.sdot-ord{width:6px;height:6px;background:#7a8aa0}
.sdot-wl{width:6px;height:6px;background:#16a34a}
.sdot-big{width:9px;height:9px;background:#475569}
.sdot-foreign{width:8px;height:8px;background:#f59e0b}
.sdot-hot{width:9px;height:9px;background:#dc2626}
.sdot-patrol{width:10px;height:10px;background:#2563eb;box-shadow:0 0 0 2px rgba(37,99,235,.35)}
.sdot-pen{box-shadow:0 0 0 1.5px #ef4444}
/* _v431 工作档紧凑船标：v463 起尺寸统一交给 --mks 按缩放档位控制，这里只负责隐帽 */
.mk-compact{display:inline-block;line-height:0}
.mk-compact .mhats{display:none}

/* ===== v440 分级聚合：重叠网位仪数字标 + 重叠点底部列单 ===== */
/* v464c：重叠网位仪=八辐轮+右上角小数字角标（替代旧紫色虚线大圆） */
.ns-stack{position:relative}
.ns-badge{position:absolute;top:-4px;right:-6px;min-width:13px;height:13px;padding:0 2px;
 border-radius:7px;background:#475569;border:1px solid #fff;color:#fff;font-size:9px;
 font-weight:700;line-height:11px;text-align:center;font-variant-numeric:tabular-nums;
 box-shadow:0 1px 3px rgba(0,0,0,.4);box-sizing:border-box}
.ns-badge.ns-bad{background:#dc2626}
.ns-badge.ns-ok{background:#16a34a}
#stack-sheet{position:fixed;inset:0;z-index:1100;display:none}
#stack-sheet.open{display:block}
#stack-sheet .ss-mask{position:absolute;inset:0;background:rgba(4,12,24,.45)}
#stack-sheet .ss-card{position:absolute;left:0;right:0;
 bottom:calc(var(--tabbar-h,0px) + env(safe-area-inset-bottom));
 background:#0e2238;border-radius:16px 16px 0 0;max-height:52vh;display:flex;flex-direction:column;
 box-shadow:0 -8px 30px rgba(0,0,0,.45);animation:sheetUp .18s ease-out}
#stack-sheet .ss-grip{width:42px;height:4px;border-radius:2px;background:#33567d;margin:8px auto 2px;flex:none}
#stack-sheet .ss-head{display:flex;align-items:center;gap:10px;padding:8px 14px 10px;flex:none}
#stack-sheet .ss-title{flex:1;font-size:15px;font-weight:700;color:#e8f2fe}
#stack-sheet .ss-x{flex:none;width:30px;height:30px;border-radius:50%;border:none;background:#1d4163;
 color:#cfe3fb;font-size:20px;line-height:1;padding:0}
#stack-sheet .ss-list{overflow-y:auto;padding:0 10px 14px;-webkit-overflow-scrolling:touch}
#stack-sheet .ss-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;
 background:#102a43;border:1px solid #1d4163;border-radius:10px;padding:11px 12px;margin-bottom:8px;
 color:#e8f2fe;font-size:15px;font-family:inherit}
#stack-sheet .ss-item:active{background:#133553}
#stack-sheet .ss-dot{flex:none;width:11px;height:11px;border-radius:50%;
 box-shadow:0 0 0 1px rgba(255,255,255,.78)}
#stack-sheet .ss-name{flex:1;font-weight:600;word-break:break-all}
#stack-sheet .ss-sub{flex:none;font-size:12px;color:#93c5fd;background:#0b2c4d;border:1px solid #1d4163;
 border-radius:6px;padding:2px 7px}


/* ===== _v399 回路 ===== */
.lg-circuits{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;padding:2px 0 6px}
.lg-cir{padding:7px 0;font-size:12px;line-height:1;border:1px solid #cbd5e1;border-radius:6px;
 background:#f1f5f9;color:#334155;font-family:-apple-system,"Segoe UI",Roboto,sans-serif}
.lg-cir.on{background:#0284c7;border-color:#0369a1;color:#fff}
.lg-mini-sw{margin-left:6px;padding:2px 8px;font-size:11px;line-height:16px;border:1px solid #cbd5e1;
 border-radius:9px;background:#f1f5f9;color:#475569;font-family:-apple-system,"Segoe UI",Roboto,sans-serif;vertical-align:middle}
.lg-mini-sw.on{background:#0284c7;border-color:#0369a1;color:#fff}
.cir-lb-wrap{background:transparent!important;border:none!important}
.cir-lb{background:#0284c7;color:#fff;font-size:10.5px;line-height:17px;padding:0 7px;border-radius:9px;
 white-space:nowrap;box-shadow:0 0 0 1px rgba(255,255,255,.85);
 font-family:-apple-system,"Segoe UI",Roboto,sans-serif}

/* v406 四家滩涂养殖姓名标签：直接嵌在宗地内，无底框 */
.aq4-lb-wrap{background:transparent!important;border:none!important}
.aq4-lb{font-size:8px;font-weight:500;color:#5b6b82;line-height:11px;white-space:nowrap;
 text-shadow:0 0 2px rgba(255,255,255,.9),0 0 1.5px rgba(255,255,255,.9)}
.aqx-lb{font-size:7.5px;font-weight:500;color:#8a94a6;line-height:11px;white-space:nowrap;text-decoration:line-through;
 text-shadow:0 0 2px rgba(255,255,255,.9),0 0 1.5px rgba(255,255,255,.9)}
/* v414 永久 Tooltip 标签：去除 Leaflet 默认底色/边框/箭头，只保留居中文字 */
.aq-lb-tip{background:transparent!important;border:0!important;box-shadow:none!important;
 padding:0!important;color:inherit}
.aq-lb-tip:before,.aq-lb-tip:after{display:none!important}
.aq-lb-tip .tooltip-arrow,.aq-lb-tip .aq-lb-tip-arrow{display:none!important}

/* v408 宗海档案弹窗（仅电脑端管理员） */
.pa-cur{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:6px}
.pa-cur th{text-align:left;width:110px;color:#475569;font-weight:600;padding:4px 8px 4px 0;vertical-align:top}
.pa-cur td{padding:4px 0;color:#1A1B1C}
.pa-note{color:#92400e!important}
.pa-sec{font-size:13px;font-weight:600;color:#1e3a5f;margin:10px 0 6px}
.pa-wrap{max-height:46vh;overflow:auto;border:1px solid #e4e3dd;border-radius:8px}
.pa-tbl{width:100%;border-collapse:collapse;font-size:12px}
.pa-tbl th{position:sticky;top:0;background:#f1f5f9;color:#334155;text-align:left;
 padding:6px 8px;font-weight:600;white-space:nowrap}
.pa-tbl td{padding:5px 8px;border-top:1px solid #eceae4;vertical-align:top}
.pa-tbl .pa-ha{text-align:right;white-space:nowrap}
.pa-st{padding:1px 7px;border-radius:10px;font-size:11px;white-space:nowrap}
.pa-ok{background:#dcfce7;color:#166534}
.pa-no{background:#fee2e2;color:#991b1b}
.pa-warn{background:#fef3c7;color:#92400e}
.pa-adv{border-radius:8px;padding:8px 10px;font-size:12.5px;line-height:1.55;margin:4px 0 8px}
.pa-adv b{display:block;margin-bottom:2px}
.pa-adv-ok{background:#f0fdf4;border:1px solid #bbf7d0;color:#14532d}
.pa-adv-warn{background:#fefce8;border:1px solid #fde68a;color:#854d0e}
.pa-adv-no{background:#f9fafb;border:1px solid #e5e7eb;color:#4b5563}
.pa-doubt{color:#b91c1c!important}
.aqm-lb{color:#b91c1c;font-size:11px;font-weight:600;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 3px #fff;white-space:nowrap}

/* ===== v437 记录仪：状态横幅 + 双框修复 ===== */
/* 关键修复：作者样式 display:flex 会覆盖 hidden，导致多出一个空画面框 */
.grs-pvmsg[hidden]{display:none!important}
.hgrs-bannerwrap{margin:2px 0 4px}
.grs-banner{display:flex;align-items:center;gap:10px;padding:12px 14px;
  border-radius:12px;background:#f1f5f9;border:1px solid #e2e8f0;margin:4px 0 10px}
.grs-banner .grs-dot{width:11px;height:11px;border-radius:50%;background:#94a3b8;flex:0 0 auto}
.grs-banner .grs-blb{font-size:15px;font-weight:600;color:#334155}
.grs-banner .grs-elapsed{margin-left:auto;font-variant-numeric:tabular-nums;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:20px;font-weight:700;color:#334155}
.grs-banner .grs-elapsed.off{color:#94a3b8;font-size:15px;font-weight:600}
.grs-banner.rec{background:#fef2f2;border-color:#fecaca}
.grs-banner.rec .grs-blb{color:#dc2626}
.grs-banner.rec .grs-elapsed{color:#dc2626}
.grs-banner.rec .grs-dot{background:#ef4444;animation:grspulse 1.4s ease-in-out infinite}
.grs-banner.on{background:#f0fdf4;border-color:#bbf7d0}
.grs-banner.on .grs-blb{color:#16a34a}
.grs-banner.on .grs-dot{background:#22c55e}
@keyframes grspulse{0%{opacity:1}50%{opacity:.3}100%{opacity:1}}

/* v438 远程本机录停按钮 */
.grs-ctrl{display:flex;gap:10px;margin:10px 0 4px;}
.grs-btn{flex:1;padding:12px 10px;border-radius:10px;border:1px solid #2b6cb0;
  font-size:15px;font-weight:600;background:#eef5ff;color:#1a4f8b;-webkit-appearance:none;}
.grs-btn-start{background:#1f9d57;border-color:#178146;color:#fff;}
.grs-btn-stop{background:#e0533c;border-color:#c2412c;color:#fff;}
.grs-btn[disabled]{opacity:.6;}
.grs-btn.busy{opacity:.75;}

/* v439 局域网直连行 + 标题内读秒 */
.grs-netrow{display:flex;align-items:center;gap:8px;margin:8px 0 2px;}
.grs-netinfo{flex:1;min-width:0;font-size:13px;color:#475569;background:#f1f5f9;
  border:1px solid #e2e8f0;border-radius:9px;padding:9px 11px;}
.grs-netinfo b{color:#0369a1}
.grs-netinfo span{color:#64748b;word-break:break-all}
.grs-wifibtn{flex:0 0 auto;border:0;background:#0369a1;color:#fff;font-size:13.5px;
  font-weight:700;border-radius:9px;padding:10px 13px;}
.grs-wifibtn:active{transform:scale(.96)}
.gwifi-adv{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:11px 12px;
  margin-bottom:10px}
.gwifi-adv span{font-size:12.5px;color:#64748b;display:block;margin-bottom:6px}
.gwifi-adv input{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:9px;
  padding:11px;font-size:14px;color:#0f172a;background:#fff}
.gwifi-adv input::placeholder{color:#94a3b8}
.grs-hrow .grs-elapsed{font-weight:700;color:#c2412c;margin-left:6px;font-variant-numeric:tabular-nums;}
.hgrs-top .grs-elapsed{font-weight:700;color:#c2412c;margin-left:6px;font-variant-numeric:tabular-nums;}

/* v452: 底拖网禁渔区线逐段标注 */
.leaflet-marker-icon.trawl-lbl{border:none;background:transparent;overflow:visible;}
.trawl-lbl-tx{position:absolute;left:0;top:0;display:inline-block;white-space:nowrap;
  font-size:10px;font-weight:700;color:#dc2626;letter-spacing:.3px;pointer-events:none;
  background:rgba(255,255,255,.6);border-radius:4px;padding:0 3px;line-height:1.4;
  text-shadow:0 0 2px #fff,0 0 2px #fff,0 0 2px #fff;transform-origin:center center;}


/* ===== 无号备注分页标签（v457 重做为分页 3×2 网格） ===== */
.hrmk-hint{font-size:11px;color:#9aa7b6;font-weight:400;margin-left:auto}
.hrmk-pagerwrap{position:relative}
.hrmk-pager{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;padding:2px 0 4px}
.hrmk-pager::-webkit-scrollbar{display:none}
.hrmk-page{flex:0 0 100%;scroll-snap-align:center;display:grid;
  grid-template-columns:repeat(3,1fr);grid-auto-rows:42px;gap:9px 10px;padding:0 2px}
.hrmk-q{border:1.6px dashed #b8c5d6;background:#fff;color:#5a6a82;border-radius:10px;
  font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:center;
  white-space:nowrap;padding:0 6px;position:relative}
.hrmk-q.sel{border-style:solid;border-color:#2f6fed;background:#e9f1fe;color:#1d4ed8}
.hrmk-tick{color:#1d4ed8;font-weight:800;margin-right:4px;font-size:14px}
.hrmk-q.add{border-color:#9db4d6;color:#6d8099;font-size:24px;font-weight:700;background:#f7fafd}
.hrmk-dots{display:flex;justify-content:center;gap:6px;height:8px;align-items:center}
.hrmk-dots i{width:6px;height:6px;border-radius:50%;background:#d3dce8}
.hrmk-dots i.on{background:#2f6fed}
.hrmk-arrow{position:absolute;right:0;top:0;bottom:12px;width:32px;display:none;align-items:center;
  justify-content:center;background:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,.82));
  border:none;color:#a6b3c5;opacity:.5;-webkit-tap-highlight-color:transparent}
.hrmk-arrow:active{opacity:.9}

/* ===== v463 电脑端帽子恢复 + 养殖标签可读 + 图标分档配套 ===== */
@media (min-width:761px){
  .mhats{position:absolute;left:50%;bottom:100%;transform:translateX(-50%);
    display:flex;flex-direction:column-reverse;align-items:center;gap:2px;
    pointer-events:none;white-space:nowrap;z-index:5}
  .mhat{font-style:normal;font-size:10.5px;line-height:1.2;font-weight:800;
    color:#fff;padding:1px 5px;border-radius:6px;letter-spacing:.2px;
    box-shadow:0 1px 3px rgba(0,0,0,.4)}
  .mh-r{background:#dc2626}
  .mh-o{background:#ea580c}
  .mh-n{background:#16a34a}
  .mh-s{background:#0f172a;color:#facc15}
  .mh-m{background:#b45309;color:#fef3c7}
  .mh-boat{background:#f97316}
  /* 养殖用海姓名标签：电脑端加大到清晰可读 */
  .aq4-lb{font-size:11px;line-height:14px}
  .aqx-lb{font-size:10.5px;line-height:14px}
  .aqm-lb{font-size:12px}
}
/* 手机端养殖标签同步略放大（原 8/7.5px 太小） */
html.m-ui .aq4-lb{font-size:9.5px;line-height:12px}
html.m-ui .aqx-lb{font-size:9px;line-height:12px}

/* v467 电脑端缩放控件：+/- 中间插入当前级数（半透明阴影框，不可点） */
.leaflet-control-zoom a.leaflet-control-zoom-level{display:flex;align-items:center;justify-content:center;
 width:30px;height:26px;line-height:26px;padding:0;margin:0;border:none;border-radius:0;
 background:rgba(10,28,50,.62);color:#fff;font-size:12px;font-weight:800;cursor:default;
 font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.leaflet-control-zoom a.leaflet-control-zoom-level:hover{background:rgba(10,28,50,.62);color:#fff}

/* ===== v474 语音找船 ===== */
#m-search-edit #msp-mic{flex:none;width:34px;height:34px;border:none;border-radius:50%;
 background:#eef5fc;color:#1565c0;display:flex;align-items:center;justify-content:center;padding:0}
#m-search-edit #msp-mic:active{background:#d6e8fb}
#m-search-edit #msp-mic.rec{background:#dc2626;color:#fff;animation:vpulse 1.1s ease-in-out infinite}
@keyframes vpulse{0%{box-shadow:0 0 0 0 rgba(220,38,38,.45)}70%{box-shadow:0 0 0 9px rgba(220,38,38,0)}100%{box-shadow:0 0 0 0 rgba(220,38,38,0)}}
.voice-panel{display:flex;flex-direction:column;align-items:center;gap:12px;padding:34px 22px 20px;text-align:center}
.voice-mic{font-size:46px;width:84px;height:84px;line-height:84px;border-radius:50%;
 background:#eef5fc;color:#1565c0;display:flex;align-items:center;justify-content:center;margin:0 auto}
.voice-mic.pulse{background:#dc2626;color:#fff;animation:vpulse 1.1s ease-in-out infinite}
.voice-interim{min-height:44px;font-size:17px;color:#eaf3fb;font-weight:700;max-width:100%;word-break:break-all}
.voice-hint{font-size:12.5px;color:#8aa3bb;line-height:1.7}
.voice-stop{border:none;border-radius:22px;background:#dc2626;color:#fff;font-size:15px;font-weight:700;
 padding:11px 34px;margin-top:4px}
.voice-cand{position:relative}
.voice-cand::after{content:'\1F3A4';position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:13px;opacity:.55}

/* ---- 图斑绘制/测量引擎：底部工具条/表单/吸附菜单（v479） ---- */
.plot-bar{position:absolute;left:50%;bottom:70px;transform:translateX(-50%);z-index:1200;max-width:96vw;}
.plot-bar-in{display:flex;flex-direction:column;gap:6px;background:rgba(15,23,42,.93);color:#e2e8f0;border-radius:12px;padding:8px 12px;box-shadow:0 4px 16px rgba(0,0,0,.35);}
.plot-bar-read{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.plot-bar-btns{display:flex;gap:8px;justify-content:center;}
.pbtn{border:0;border-radius:8px;padding:9px 16px;font-size:14px;background:#334155;color:#fff;}
.pbtn.primary{background:#0ea5e9;}
.pbtn.danger{background:#ef4444;}
.plot-vtx{display:block;width:14px;height:14px;border-radius:50%;background:#22d3ee;border:2px solid #0e7490;box-sizing:border-box;}
#plot-form{position:absolute;right:8px;top:60px;z-index:1200;width:236px;background:#fff;border-radius:12px;padding:12px;box-shadow:0 6px 20px rgba(0,0,0,.25);display:flex;flex-direction:column;gap:8px;}
#plot-form .pf-title{font-weight:600;font-size:14px;}
#plot-form input,#plot-form select,#plot-form textarea{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:8px;padding:7px;font-size:13px;font-family:inherit;}
.pf-btns{display:flex;gap:8px;justify-content:flex-end;}
#plot-snap{position:absolute;left:8px;top:60px;z-index:1201;width:236px;max-height:60vh;overflow:auto;background:#fff;border-radius:12px;padding:8px;box-shadow:0 6px 20px rgba(0,0,0,.25);}
#plot-snap .ps-title{font-size:13px;font-weight:600;margin-bottom:6px;}
#plot-snap .ps-empty{font-size:12px;color:#64748b;padding:4px;}
.ps-item{display:block;width:100%;text-align:left;border:0;background:#f1f5f9;border-radius:8px;padding:8px;margin-bottom:4px;font-size:12px;}
.ps-x{background:#fee2e2 !important;}
