:root{
  --bg:#e6ebf4;
  --bg2:#f3f0f7;
  --card:rgba(255,255,255,.78);
  --card-solid:rgba(255,255,255,.92);
  --line:rgba(28,40,72,.08);
  --line2:rgba(28,40,72,.14);
  --txt:#141c2e;
  --sub:#5a6788;
  --sub2:#8b95b0;
  --acc:#5b6cff;
  --acc2:#9b5de8;
  --acc3:#ef5da8;
  --mint:#12b886;
  --mint2:#20c997;
  --amber:#f59e0b;
  --rose:#f43f5e;
  --grad:linear-gradient(135deg,#5b6cff 0%,#8b5cf6 48%,#ef5da8 100%);
  --grad2:linear-gradient(135deg,#12b886,#0ca678);
  --grad3:linear-gradient(135deg,#f59e0b,#f43f5e);
  --shadow:0 4px 6px rgba(28,40,72,.03),0 12px 32px rgba(28,40,72,.08);
  --shadow2:0 8px 16px rgba(28,40,72,.06),0 24px 48px rgba(28,40,72,.12);
  --r:22px;
  --font:"Outfit","Noto Sans SC","PingFang SC","HarmonyOS Sans SC",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  background:
    radial-gradient(1200px 600px at 12% -10%,rgba(91,108,255,.16),transparent 55%),
    radial-gradient(900px 500px at 92% 8%,rgba(239,93,168,.12),transparent 50%),
    radial-gradient(800px 480px at 70% 100%,rgba(18,184,134,.10),transparent 55%),
    linear-gradient(180deg,var(--bg),var(--bg2));
  color:var(--txt);overflow-x:hidden;
  font-family:var(--font);
  font-size:15px;line-height:1.55;font-weight:500;
  letter-spacing:.01em;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}

/* 氛围背景 */
.bg{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.blob{position:absolute;border-radius:50%;filter:blur(80px);opacity:.45;
  animation:float 22s ease-in-out infinite;will-change:transform}
.blob.b1{width:560px;height:560px;background:#a5b4fc;top:-200px;left:-140px}
.blob.b2{width:480px;height:480px;background:#f0abfc;top:-80px;right:-140px;animation-delay:-5s}
.blob.b3{width:440px;height:440px;background:#99e9f2;bottom:-160px;left:15%;animation-delay:-10s}
.blob.b4{width:400px;height:400px;background:#fcc2d7;bottom:-140px;right:5%;animation-delay:-15s}
@keyframes float{0%,100%{transform:translate(0,0) scale(1)}
  33%{transform:translate(24px,-20px) scale(1.05)}
  66%{transform:translate(-18px,16px) scale(.97)}}
.mesh{position:absolute;inset:0;opacity:.35;
  background-image:
    linear-gradient(rgba(91,108,255,.045) 1px,transparent 1px),
    linear-gradient(90deg,rgba(91,108,255,.045) 1px,transparent 1px);
  background-size:48px 48px;
  mask-image:radial-gradient(ellipse 80% 60% at 50% 20%,#000,transparent 75%);
  -webkit-mask-image:radial-gradient(ellipse 80% 60% at 50% 20%,#000,transparent 75%)}
.noise{position:absolute;inset:0;opacity:.035;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

.app{position:relative;z-index:1;max-width:1560px;margin:0 auto;padding:10px 10px 28px}

/* ===== 顶栏 ===== */
header{
  display:flex;flex-direction:column;gap:12px;
  padding:14px 16px;border-radius:var(--r);
  background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(255,255,255,.78));
  backdrop-filter:blur(24px) saturate(1.35);-webkit-backdrop-filter:blur(24px) saturate(1.35);
  border:1px solid rgba(255,255,255,.78);
  box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.95);
  margin-bottom:10px;position:sticky;top:6px;z-index:50;
}
.h-top{display:flex;align-items:center;gap:12px;min-width:0}
.avat{width:48px;height:48px;border-radius:15px;flex:0 0 auto;
  background:var(--grad);display:grid;place-items:center;font-size:24px;
  box-shadow:0 8px 20px rgba(91,108,255,.32);position:relative;overflow:hidden}
.avat::after{content:"";position:absolute;inset:0;border-radius:15px;
  background:linear-gradient(125deg,rgba(255,255,255,.55),transparent 42%)}
.hinfo{min-width:0;flex:1 1 auto}
.h-name-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}
.hinfo h1{font-size:18px;font-weight:800;letter-spacing:-.02em;line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1 1 auto}
.hinfo h1 em{font-style:normal;background:var(--grad);-webkit-background-clip:text;
  background-clip:text;color:transparent}

/* 右上：在线 + 电量 + 刷新 */
.h-status{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.h-status .chip{padding:5px 10px;font-size:11px}
.h-status .batt{padding:5px 9px 5px 7px}
.btn-refresh{
  width:30px;height:30px;border-radius:10px;border:1px solid var(--line2);
  background:rgba(255,255,255,.85);color:var(--sub);font:inherit;font-size:15px;font-weight:700;
  cursor:pointer;display:grid;place-items:center;flex:0 0 auto;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:transform .15s,border-color .15s,color .15s}
.btn-refresh:hover{transform:rotate(-30deg);border-color:rgba(91,108,255,.35);color:#4338ca}
.btn-refresh:active{transform:rotate(-180deg)}

.hguard{display:flex;align-items:center;gap:6px;margin-top:3px;min-width:0}
.hg-label{flex:0 0 auto;font-size:11px;font-weight:700;color:var(--sub2)}
.hg-phone{
  min-width:0;border:0;background:transparent;padding:0;
  font:inherit;font-size:13px;font-weight:700;font-family:ui-monospace,monospace;
  color:var(--sub);cursor:pointer;text-align:left;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hg-phone:hover:not(:disabled){color:#4338ca}
.hg-phone:disabled{cursor:default;opacity:.7}
.hguard.no-phone .hg-phone{opacity:.55}

/* 呼叫 + 设备：并排简洁按钮 */
.h-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.act-btn{
  display:flex;align-items:center;justify-content:center;gap:10px;
  min-height:48px;padding:10px 14px;border-radius:14px;cursor:pointer;
  font:inherit;border:1px solid transparent;position:relative;overflow:hidden;
  transition:transform .16s,box-shadow .16s,border-color .16s,filter .16s;line-height:1}
.act-btn:hover:not(:disabled){transform:translateY(-1px)}
.act-btn:active:not(:disabled){transform:translateY(0)}
.act-btn:disabled{cursor:default;opacity:.5;filter:grayscale(.2)}
.act-ico{
  flex:0 0 auto;width:34px;height:34px;border-radius:11px;
  display:grid;place-items:center;font-size:15px;line-height:1;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}
.act-label{font-size:14px;font-weight:800;letter-spacing:.02em;white-space:nowrap;line-height:1}

.act-btn.call{
  color:#065f46;
  border-color:rgba(16,185,129,.22);
  background:linear-gradient(145deg,rgba(255,255,255,.96),rgba(236,253,245,.92));
  box-shadow:0 6px 16px rgba(16,185,129,.12),inset 0 1px 0 #fff;
  animation:callBreathe 2.8s ease-in-out infinite}
.act-btn.call .act-ico{
  color:#fff;
  background:linear-gradient(145deg,#34d399,#10b981 55%,#059669);
  box-shadow:0 4px 12px rgba(16,185,129,.32),inset 0 1px 0 rgba(255,255,255,.4);
  animation:callIcoBreathe 2.8s ease-in-out infinite}
.act-btn.call:hover:not(:disabled){
  border-color:rgba(16,185,129,.4);
  animation:none;
  box-shadow:0 8px 22px rgba(16,185,129,.2),inset 0 1px 0 #fff}
.act-btn.call:hover:not(:disabled) .act-ico{animation:none}
.act-btn.call:disabled{animation:none}
.act-btn.call:disabled .act-ico{animation:none}
@keyframes callBreathe{
  0%,100%{
    box-shadow:0 6px 16px rgba(16,185,129,.1),inset 0 1px 0 #fff;
    border-color:rgba(16,185,129,.18)}
  50%{
    box-shadow:0 8px 22px rgba(16,185,129,.22),0 0 0 3px rgba(16,185,129,.08),inset 0 1px 0 #fff;
    border-color:rgba(16,185,129,.32)}
}
@keyframes callIcoBreathe{
  0%,100%{box-shadow:0 4px 12px rgba(16,185,129,.28),inset 0 1px 0 rgba(255,255,255,.4);transform:scale(1)}
  50%{box-shadow:0 6px 16px rgba(16,185,129,.42),inset 0 1px 0 rgba(255,255,255,.5);transform:scale(1.04)}
}
@media (prefers-reduced-motion: reduce){
  .act-btn.call,.act-btn.call .act-ico{animation:none}
}

.act-btn.device{
  color:#3730a3;
  border-color:rgba(99,102,241,.18);
  background:linear-gradient(145deg,rgba(255,255,255,.96),rgba(238,242,255,.92));
  box-shadow:0 6px 16px rgba(99,102,241,.08),inset 0 1px 0 #fff}
.act-btn.device .act-ico{
  color:#fff;
  background:linear-gradient(145deg,#818cf8,#6366f1 50%,#8b5cf6);
  box-shadow:0 4px 12px rgba(99,102,241,.3),inset 0 1px 0 rgba(255,255,255,.4)}
.act-btn.device:hover{
  border-color:rgba(99,102,241,.32);
  box-shadow:0 8px 20px rgba(99,102,241,.14),inset 0 1px 0 #fff}
.act-btn.device.offline{
  border-color:rgba(244,63,94,.2)}
.act-btn.device.offline .act-ico{
  background:linear-gradient(145deg,#a78bfa,#7c3aed 55%,#6d28d9);
  box-shadow:0 4px 12px rgba(124,58,237,.28),inset 0 1px 0 rgba(255,255,255,.35)}

.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;
  font-size:12.5px;font-weight:700;border:1px solid var(--line2);
  background:rgba(255,255,255,.7);white-space:nowrap;transition:.2s;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.8)}
.chip .dot{width:7px;height:7px;border-radius:50%;background:var(--sub2)}
.chip.on{color:#fff;background:var(--grad2);border-color:transparent;
  box-shadow:0 4px 12px rgba(18,184,134,.28)}
.chip.on .dot{background:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.28);animation:blink 1.8s infinite}
.chip.off{color:#fff;background:var(--grad3);border-color:transparent;
  box-shadow:0 4px 12px rgba(244,63,94,.24)}
.chip.off .dot{background:#fff}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
.btn{padding:9px 15px;border-radius:12px;border:1px solid var(--line2);
  background:rgba(255,255,255,.88);color:var(--txt);font-size:13px;font-weight:700;
  cursor:pointer;transition:.18s;font-family:inherit;display:inline-flex;
  align-items:center;gap:6px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow);
  border-color:rgba(91,108,255,.35)}
.btn:active{transform:translateY(0)}
.btn:disabled{opacity:.4;cursor:default;transform:none;box-shadow:none}
.btn.pri{background:var(--grad);border-color:transparent;color:#fff;
  box-shadow:0 8px 20px rgba(91,108,255,.32)}
.btn.sm{padding:8px 12px;font-size:12.5px}
.btn.ico{padding:9px 12px}

/* 地图日期：上一日 / 标签 / 下一日（按有数据的日期切换） */
.daynav{display:inline-flex;align-items:center;gap:4px;min-width:0;
  background:rgba(255,255,255,.72);border:1px solid var(--line2);border-radius:12px;
  padding:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.daynav-btn{width:32px;height:32px;border:0;border-radius:9px;background:transparent;
  color:var(--txt);font-size:20px;line-height:1;font-weight:700;cursor:pointer;
  font-family:inherit;transition:.15s;flex:0 0 auto}
.daynav-btn:hover:not(:disabled){background:rgba(91,108,255,.1);color:#4338ca}
.daynav-btn:disabled{opacity:.28;cursor:default}
.daynav-label{
  border:0;background:transparent;padding:4px 10px;min-width:0;max-width:100%;
  font:inherit;color:var(--txt);cursor:pointer;border-radius:8px;flex:1 1 auto;
  display:inline-flex;flex-direction:column;align-items:center;justify-content:center;
  gap:1px;transition:background .15s}
.daynav-label:hover{background:rgba(91,108,255,.08)}
.daynav-label .dnl-main{font-size:12.5px;font-weight:800;line-height:1.2;white-space:nowrap}
.daynav-label .dnl-week{font-size:10.5px;font-weight:700;color:var(--sub);line-height:1.1}

/* 精美日历弹层 */
.calpick-layer{
  position:fixed;inset:0;z-index:1100;display:flex;align-items:flex-end;justify-content:center;
  pointer-events:none;opacity:0;transition:opacity .28s ease}
.calpick-layer.show{pointer-events:auto;opacity:1}
.calpick-mask{position:absolute;inset:0;background:rgba(16,22,40,.42);backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .28s ease}
.calpick-layer.show .calpick-mask{opacity:1}
.calpick{
  position:relative;width:min(420px,100%);
  background:linear-gradient(180deg,#ffffff 0%,#f5f7ff 55%,#eef8f4 100%);
  border-radius:22px 22px 0 0;padding:8px 16px calc(14px + env(safe-area-inset-bottom));
  box-shadow:0 -12px 40px rgba(16,22,40,.16);
  transform:translateY(110%);transition:transform .32s cubic-bezier(.22,1,.36,1)}
.calpick-layer.show .calpick{transform:translateY(0)}
.calpick-handle{width:40px;height:4px;border-radius:99px;background:rgba(28,40,72,.14);
  margin:4px auto 12px}
.calpick-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
.calpick-title{font-size:16px;font-weight:800;letter-spacing:.02em}
.calpick-nav{
  width:36px;height:36px;border-radius:12px;border:1px solid var(--line2);
  background:rgba(255,255,255,.85);color:var(--txt);font-size:20px;font-weight:700;
  cursor:pointer;font-family:inherit;line-height:1;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);transition:.15s}
.calpick-nav:hover:not(:disabled){border-color:rgba(91,108,255,.4);color:#4338ca}
.calpick-nav:disabled{opacity:.28;cursor:default}
.calpick-weeks{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:6px}
.calpick-weeks span{
  text-align:center;font-size:11px;font-weight:800;color:var(--sub2);padding:4px 0}
.calpick-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.calpick-day{
  aspect-ratio:1;border:0;border-radius:14px;background:transparent;cursor:default;
  font:inherit;display:flex;align-items:center;justify-content:center;
  padding:2px;color:var(--sub2);position:relative;transition:.15s}
.calpick-day .n{font-size:14px;font-weight:800;line-height:1}
.calpick-day.mute{opacity:.28}
.calpick-day.has{
  cursor:pointer;color:var(--txt);
  background:rgba(255,255,255,.75);border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.calpick-day.has:hover{border-color:rgba(91,108,255,.35);transform:translateY(-1px);
  box-shadow:0 6px 14px rgba(91,108,255,.12)}
.calpick-day.today:not(.act)::after{
  content:"";position:absolute;bottom:5px;width:4px;height:4px;border-radius:50%;
  background:var(--acc)}
.calpick-day.act{
  cursor:pointer;color:#fff;border:0;
  background:var(--grad);
  box-shadow:0 8px 18px rgba(91,108,255,.3)}
.calpick-day.act.today::after{display:none}
.calpick-tip{margin:12px 0 8px;text-align:center;font-size:11.5px;font-weight:600;color:var(--sub)}
.calpick-close{
  width:100%;padding:12px;border:0;border-radius:12px;background:rgba(28,40,72,.05);
  color:var(--sub);font-size:14px;font-weight:700;cursor:pointer;font-family:inherit}
.calpick-close:hover{background:rgba(28,40,72,.09)}

/* 电量：胶囊 + 电池图标填充 */
.batt{
  display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;
  padding:7px 12px 7px 10px;border-radius:999px;
  background:rgba(255,255,255,.72);border:1px solid var(--line2);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85);color:var(--txt);
  transition:border-color .25s,background .25s}
.batt-ico{display:inline-flex;align-items:center;gap:0;position:relative}
.batt-body{
  width:26px;height:13px;border:1.6px solid currentColor;border-radius:3.5px;
  padding:1.5px;box-sizing:border-box;opacity:.88;display:block}
.batt-nub{
  width:2.5px;height:6px;margin-left:1.5px;border-radius:0 2px 2px 0;
  background:currentColor;opacity:.88}
.batt-fill{
  display:block;height:100%;width:0%;border-radius:1.5px;
  background:linear-gradient(90deg,#34d399,#12b886);
  box-shadow:0 0 8px rgba(18,184,134,.35);
  transition:width .65s cubic-bezier(.22,1,.36,1),background .3s}
.batt.full{color:#0f766e;border-color:rgba(18,184,134,.28);
  background:linear-gradient(180deg,rgba(18,184,134,.10),rgba(255,255,255,.75))}
.batt.full .batt-fill{background:linear-gradient(90deg,#34d399,#0ca678)}
.batt.low{color:#b45309;border-color:rgba(245,158,11,.35);
  background:linear-gradient(180deg,rgba(245,158,11,.12),rgba(255,255,255,.75))}
.batt.low .batt-fill{background:linear-gradient(90deg,#fbbf24,#f59e0b);box-shadow:0 0 8px rgba(245,158,11,.35)}
.batt.crit{color:#be123c;border-color:rgba(244,63,94,.35);
  background:linear-gradient(180deg,rgba(244,63,94,.12),rgba(255,255,255,.75))}
.batt.crit .batt-fill{background:linear-gradient(90deg,#fb7185,#f43f5e);box-shadow:0 0 8px rgba(244,63,94,.35)}
.batt-pct{font-size:12.5px;font-weight:800;font-variant-numeric:tabular-nums;
  letter-spacing:-.02em;min-width:2.6em}

/* ===== 卡片 ===== */
.grid{display:grid;gap:10px;grid-template-columns:repeat(12,1fr)}
.card{
  background:linear-gradient(165deg,rgba(255,255,255,.88),rgba(255,255,255,.70));
  backdrop-filter:blur(22px) saturate(1.25);-webkit-backdrop-filter:blur(22px) saturate(1.25);
  border:1px solid rgba(255,255,255,.72);border-radius:var(--r);padding:14px;
  box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.95);
  position:relative;overflow:hidden;
  animation:up .5s cubic-bezier(.22,1,.36,1) both}
.card:nth-child(1){animation-delay:.02s}
.card:nth-child(2){animation-delay:.06s}
.card:nth-child(3){animation-delay:.10s}
.card:nth-child(4){animation-delay:.14s}
.card:nth-child(5){animation-delay:.18s}
@keyframes up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.card::before{content:"";position:absolute;top:0;left:12%;right:12%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.95),transparent)}
.card::after{content:"";position:absolute;top:0;left:0;width:3px;bottom:0;
  background:var(--grad);opacity:.85;border-radius:var(--r) 0 0 var(--r)}
.card.g2::after{background:var(--grad2)}
.card.g3::after{background:linear-gradient(180deg,#f59e0b,#f97316)}
.card h2{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--sub);font-weight:800;margin-bottom:10px;display:flex;
  align-items:center;gap:8px}
.card h2 .ic{font-size:15px;filter:saturate(1.15);line-height:1;
  display:inline-flex;align-items:center}
.card h2 .ic-svg{
  width:15px;height:15px;flex:0 0 auto;display:block;
  color:var(--acc);opacity:.92}
.card h2 .r{margin-left:auto;font-size:12px;font-weight:700;color:var(--sub2);
  text-transform:none;letter-spacing:0;font-variant-numeric:tabular-nums}
.c3{grid-column:span 3}.c4{grid-column:span 4}.c5{grid-column:span 5}
.c6{grid-column:span 6}.c7{grid-column:span 7}.c8{grid-column:span 8}
.c9{grid-column:span 9}.c12{grid-column:span 12}

/* ===== KV ===== */
.kv{display:flex;justify-content:space-between;gap:12px;padding:10.5px 0;
  border-bottom:1px dashed var(--line);font-size:13.5px;align-items:center}
.kv:last-child{border-bottom:0;padding-bottom:0}
.kv .k{color:var(--sub);flex:0 0 auto;display:flex;align-items:center;gap:7px}
.kv .k .ic{font-size:13px;opacity:.8}
.kv .v{font-weight:800;text-align:right;word-break:break-all}
.v.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}

/* ===== 地图 ===== */
#map{height:clamp(360px,56vh,640px);border-radius:18px;overflow:hidden;
  background:#d5dce8;z-index:1;margin-top:12px;
  box-shadow:inset 0 0 0 1px var(--line),0 8px 28px rgba(28,40,72,.08)}
.maptop{display:flex;flex-direction:column;gap:10px}
.mapbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.mapbar-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0;flex:1 1 auto}
.addrclick{cursor:pointer;text-decoration:none;border-bottom:1px dotted rgba(91,108,255,.45);
  text-underline-offset:3px;transition:color .15s}
.addrclick:hover{color:var(--acc)}
.distpill{display:inline-flex;align-items:center;padding:8px 13px;border-radius:999px;cursor:pointer;
  background:rgba(91,108,255,.08);color:#4338ca;font-size:12px;font-weight:700;
  border:1px solid rgba(91,108,255,.16);transition:all .2s;white-space:nowrap;flex:0 0 auto}
.distpill:hover{transform:translateY(-1px);background:rgba(91,108,255,.12);
  box-shadow:0 6px 16px rgba(91,108,255,.15)}
.distpill.loading{background:rgba(148,163,184,.12);color:#94a3b8;border-color:rgba(148,163,184,.2)}
.distpill.err{background:rgba(244,63,94,.08);color:#e11d48;border-color:rgba(244,63,94,.2)}
.merow{display:flex;align-items:center;gap:8px;min-width:0}
.merow .btn{flex:1 1 auto;justify-content:center;min-width:0}
.seg{display:inline-flex;align-items:center;background:rgba(255,255,255,.7);border:1px solid var(--line2);
  border-radius:13px;padding:3px;gap:3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.seg button{
  border:0;background:transparent;color:var(--sub);font-family:inherit;
  font-size:12.5px;font-weight:700;height:34px;padding:0 12px;border-radius:10px;cursor:pointer;
  transition:.18s;white-space:nowrap;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;line-height:1}
.seg button .seg-ic{
  flex:0 0 auto;width:14px;height:14px;display:block;margin:0;padding:0;
  overflow:visible;vertical-align:middle}
.seg button .seg-txt{
  display:block;line-height:14px;height:14px;font-size:12.5px;font-weight:700}
.seg button.act{background:var(--grad);color:#fff;
  box-shadow:0 6px 16px rgba(91,108,255,.28)}
.addr{display:flex;gap:8px;align-items:center;margin-top:12px;padding:11px 13px;
  border-radius:14px;background:rgba(91,108,255,.06);cursor:pointer;
  border:1px solid rgba(91,108,255,.12);font-size:13px;min-width:0}
.addr:hover{background:rgba(91,108,255,.09);border-color:rgba(91,108,255,.2)}
.addr .ic{color:var(--acc);flex:0 0 auto;font-size:14px}
.addr #addrTxt{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;line-height:1.35;font-weight:600}
.addr .ago{flex:0 0 auto;font-size:11px;font-weight:700;color:var(--sub);
  background:rgba(255,255,255,.75);padding:4px 9px;border-radius:999px;white-space:nowrap;
  max-width:46%;overflow:hidden;text-overflow:ellipsis;border:1px solid var(--line)}
.maplegend{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:11.5px;
  color:var(--sub);font-weight:600}
.maplegend span{display:inline-flex;align-items:center;gap:5px}
.maplegend i{width:9px;height:9px;border-radius:50%;display:block;box-shadow:0 0 0 2px rgba(255,255,255,.7)}
/* 地图上自定义标记 */
.mk-cur{position:relative;width:30px;height:30px}
.mk-cur .pulse{position:absolute;inset:-14px;border-radius:50%;
  background:radial-gradient(circle,rgba(91,108,255,.5),transparent 68%);
  animation:pl 1.9s ease-out infinite}
.mk-cur .core{position:absolute;inset:6px;border-radius:50%;background:#fff;
  box-shadow:0 3px 12px rgba(0,0,0,.28)}
.mk-cur .core::after{content:"";position:absolute;inset:4px;border-radius:50%;
  background:var(--grad)}
@keyframes pl{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.7);opacity:0}}
.mk-pt{position:relative;width:26px;height:26px;border-radius:50%;background:#fff;
  border:2.5px solid #5b6cff;box-shadow:0 3px 10px rgba(0,0,0,.22);
  display:grid;place-items:center;font-size:10px;font-weight:800;color:#4338ca;
  transition:transform .25s cubic-bezier(.22,1,.36,1),border-color .2s,box-shadow .25s;
  animation:mkPop .35s cubic-bezier(.22,1,.36,1) both}
.mk-pt span{position:relative;z-index:1}
.mk-pt i{display:none}
.mk-pt.on{transform:scale(1.22);border-color:#ef5da8;color:#be185d;
  box-shadow:0 6px 18px rgba(239,93,168,.4);z-index:2}
.mk-pt.on i{display:block;position:absolute;inset:-10px;border-radius:50%;
  border:2px solid rgba(239,93,168,.55);animation:mkRing 1.2s ease-out infinite}
.mk-se{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  color:#fff;font-size:13px;font-weight:800;box-shadow:0 4px 14px rgba(0,0,0,.26);
  transition:transform .25s cubic-bezier(.22,1,.36,1);animation:mkPop .4s cubic-bezier(.22,1,.36,1) both}
.mk-se.s{background:linear-gradient(135deg,#12b886,#0ca678)}
.mk-se.e{background:linear-gradient(135deg,#ef5da8,#f43f5e)}
.mk-se.on{transform:scale(1.2);box-shadow:0 0 0 6px rgba(91,108,255,.22),0 8px 20px rgba(0,0,0,.28)}
@keyframes mkPop{from{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}
@keyframes mkRing{0%{transform:scale(.7);opacity:.85}100%{transform:scale(1.55);opacity:0}}
.amap-logo,.amap-copyright{opacity:.4}

/* ===== 成员 ===== */
.members{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
@media(min-width:900px){
  .members{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
}
.person{display:flex;gap:10px;align-items:center;padding:11px 12px;border-radius:16px;
  background:rgba(255,255,255,.65);border:1px solid var(--line);transition:.22s;
  position:relative;overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.8);min-width:0}
.person:hover{transform:translateY(-2px);box-shadow:var(--shadow);
  border-color:rgba(91,108,255,.28)}
.person .av{width:42px;height:42px;border-radius:50%;flex:0 0 auto;overflow:hidden;
  background:linear-gradient(135deg,#e0e7ff,#fae8ff);display:grid;place-items:center;
  font-size:17px;font-weight:800;color:#fff;box-shadow:0 4px 12px rgba(28,40,72,.12)}
.person .av img{width:100%;height:100%;object-fit:cover}
.person .bd{min-width:0;flex:1 1 auto}
.person .nm{font-size:13.5px;font-weight:800;line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.person .rl{font-size:11px;color:var(--sub);font-weight:600;margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.person .ph{font-size:10.5px;color:var(--sub2);margin-top:2px;
  font-family:ui-monospace,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.person.me{background:linear-gradient(135deg,rgba(91,108,255,.12),rgba(239,93,168,.06));
  border-color:rgba(91,108,255,.3)}
.person.me .nm .me-tag{display:inline-block;margin-left:5px;font-size:10px;font-weight:800;
  color:#fff;background:var(--grad);padding:1px 6px;border-radius:7px;vertical-align:middle}
.person.devic{background:linear-gradient(135deg,rgba(18,184,134,.1),rgba(12,166,120,.05));
  border-color:rgba(18,184,134,.28)}

/* ===== 能力 ===== */
.caps{display:flex;flex-wrap:wrap;gap:8px}
.cap{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:800;
  padding:7px 13px;border-radius:999px;background:rgba(255,255,255,.7);
  border:1px solid var(--line);color:var(--sub)}
.cap.yes{color:#047857;background:rgba(16,185,129,.13);
  border-color:rgba(16,185,129,.35)}
.cap.no{opacity:.4}
.cap .s{font-size:10px}

/* ===== 轨迹：按月浏览 + 日卡片 ===== */
.cal{margin-bottom:4px}
.cal-nav{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:10px}
.cal-btn{width:34px;height:34px;border:1px solid var(--line2);border-radius:11px;
  background:rgba(255,255,255,.75);color:var(--txt);font-size:20px;line-height:1;
  font-weight:700;cursor:pointer;font-family:inherit;transition:.15s;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9)}
.cal-btn:hover:not(:disabled){border-color:rgba(91,108,255,.4);color:#4338ca;
  transform:translateY(-1px)}
.cal-btn:disabled{opacity:.28;cursor:default;transform:none}
.cal-title{
  min-width:118px;text-align:center;font-size:14px;font-weight:800;
  letter-spacing:.2px;color:var(--txt);border:0;background:transparent;
  cursor:pointer;font-family:inherit;padding:6px 10px;border-radius:10px;
  transition:background .15s,color .15s}
.cal-title:hover{background:rgba(91,108,255,.08);color:#4338ca}
.daily{display:flex;gap:5px;overflow-x:auto;padding:2px 2px 8px;
  scrollbar-width:thin;scroll-snap-type:x proximity}
.daily::-webkit-scrollbar{height:6px}
.daily::-webkit-scrollbar-thumb{background:rgba(99,102,241,.28);border-radius:9px}
.daily .empty.soft{padding:14px;flex:1;text-align:center;font-size:12.5px;color:var(--sub)}
.dcard{flex:0 0 auto;min-width:48px;padding:7px 8px 8px;border-radius:12px;
  text-align:center;background:rgba(255,255,255,.68);border:1px solid var(--line);
  cursor:pointer;transition:.2s;box-shadow:inset 0 1px 0 rgba(255,255,255,.85);
  display:flex;flex-direction:column;align-items:center;gap:0;font:inherit;
  color:inherit;scroll-snap-align:start}
.dcard:hover{transform:translateY(-2px);box-shadow:var(--shadow);
  border-color:rgba(91,108,255,.35)}
.dcard.act{background:var(--grad);border-color:transparent;color:#fff;
  box-shadow:0 8px 20px rgba(91,108,255,.3)}
.dcard .w{font-size:10px;font-weight:800;opacity:.72;letter-spacing:.3px}
.dcard .d{font-size:20px;font-weight:800;line-height:1.15;letter-spacing:-.5px;margin:1px 0}
.dcard.act .w{opacity:.92}
.tlist{display:flex;flex-direction:column;gap:8px}
/* 超过 5 条才限高滚动；5 条以内自然撑开、无滚动条 */
.tlist:has(.titem:nth-child(6)){
  max-height:calc(5 * 68px + 4 * 8px);
  overflow-y:auto;padding-right:5px;scrollbar-gutter:stable}
.tlist::-webkit-scrollbar{width:7px}
.tlist::-webkit-scrollbar-thumb{background:rgba(91,108,255,.28);border-radius:9px}
.titem{display:flex;gap:12px;padding:11px 13px;border-radius:14px;
  background:rgba(255,255,255,.62);border:1px solid var(--line);font-size:12.5px;
  cursor:pointer;transition:.18s;align-items:flex-start;flex:0 0 auto}
.titem:hover{background:#fff;border-color:rgba(91,108,255,.35);transform:translateX(2px)}
.titem.act{background:linear-gradient(135deg,rgba(91,108,255,.12),rgba(239,93,168,.08));
  border-color:rgba(91,108,255,.4);box-shadow:0 6px 16px rgba(91,108,255,.12);
  transform:translateX(3px)}
.titem .tm{flex:0 0 auto;font-family:ui-monospace,monospace;color:#4338ca;
  font-weight:800;font-size:12.5px;background:rgba(91,108,255,.1);
  padding:2px 8px;border-radius:8px}
.titem.act .tm{background:var(--grad);color:#fff}
.titem .ad{color:var(--txt);line-height:1.45;opacity:.92}
.titem .tag{display:inline-block;font-size:10px;padding:1px 8px;border-radius:7px;
  margin-left:6px;background:rgba(99,102,241,.12);color:#4338ca;font-weight:900}
.titem .tag.wifi{background:rgba(16,185,129,.16);color:#047857}
.titem .tag.lbs{background:rgba(245,158,11,.18);color:#b45309}
.titem .tag.gps{background:rgba(6,182,212,.16);color:#0e7490}
.titem .step{display:inline-block;font-size:10px;padding:1px 7px;border-radius:7px;
  margin-left:6px;background:rgba(28,40,72,.06);color:var(--sub);font-weight:800}
.titem .step.start{background:rgba(18,184,134,.12);color:#047857}

/* ===== 消息 ===== */
.msgwrap{display:flex;flex-direction:column;gap:11px;max-height:470px;overflow-y:auto;
  padding-right:5px}
.msgwrap::-webkit-scrollbar{width:7px}
.msgwrap::-webkit-scrollbar-thumb{background:rgba(99,102,241,.3);border-radius:9px}
.msg{display:flex;gap:10px;max-width:88%}
.msg.out{align-self:flex-end;flex-direction:row-reverse}
.msg .av{width:36px;height:36px;border-radius:50%;flex:0 0 auto;overflow:hidden;
  display:grid;place-items:center;font-size:16px;color:#fff;font-weight:900;
  box-shadow:0 3px 10px rgba(0,0,0,.15)}
.msg .av img{width:100%;height:100%;object-fit:cover}
.msg .bub{padding:11px 14px;border-radius:16px;background:rgba(255,255,255,.92);
  border:1px solid var(--line);font-size:13.5px;word-break:break-word;
  box-shadow:0 4px 14px rgba(28,40,72,.05)}
.msg.out .bub{background:linear-gradient(135deg,rgba(91,108,255,.12),rgba(239,93,168,.07));
  border-color:rgba(91,108,255,.2)}
.msg .who{font-size:11px;color:var(--sub);margin-bottom:5px;font-weight:800}
.msg .tmm{font-size:10.5px;color:var(--sub2);margin-top:6px}
.avatar-audio{display:flex;align-items:center;gap:12px;min-width:0}
.avatar-audio .audio-meta{min-width:0;display:flex;flex-direction:column;gap:3px}
.avatar-audio .pl{
  position:relative;width:40px;height:40px;border-radius:50%;border:0;
  flex:0 0 auto;cursor:pointer;color:#fff;padding:0;
  background:linear-gradient(145deg,#6d7cff 0%,#5b6cff 45%,#8b5cf6 100%);
  box-shadow:0 8px 18px rgba(91,108,255,.34), inset 0 1px 0 rgba(255,255,255,.35);
  display:grid;place-items:center;
  transition:transform .18s ease, box-shadow .2s ease, filter .2s ease}
.avatar-audio .pl::after{
  content:"";position:absolute;inset:-3px;border-radius:50%;
  border:1.5px solid rgba(91,108,255,.22);opacity:.7;pointer-events:none;
  transition:opacity .2s, border-color .2s, transform .2s}
.avatar-audio .pl:hover{transform:translateY(-1px) scale(1.03);
  box-shadow:0 10px 22px rgba(91,108,255,.4), inset 0 1px 0 rgba(255,255,255,.4)}
.avatar-audio .pl:active{transform:scale(.94)}
.avatar-audio .pl-ico{
  width:16px;height:16px;display:block;position:relative;z-index:1;
  filter:drop-shadow(0 1px 1px rgba(20,28,46,.18))}
.avatar-audio .pl-play{margin-left:1px}
.avatar-audio .pl-pause{display:none}
.avatar-audio .pl.playing{
  background:linear-gradient(145deg,#f472b6 0%,#ec4899 50%,#a855f7 100%);
  box-shadow:0 8px 20px rgba(236,72,153,.36), inset 0 1px 0 rgba(255,255,255,.35)}
.avatar-audio .pl.playing::after{
  border-color:rgba(236,72,153,.35);animation:plRing 1.4s ease-out infinite}
.avatar-audio .pl.playing .pl-play{display:none}
.avatar-audio .pl.playing .pl-pause{display:block}
.avatar-audio .pl.err{
  background:linear-gradient(145deg,#fb7185,#e11d48);
  box-shadow:0 8px 18px rgba(225,29,72,.3)}
@keyframes plRing{
  0%{transform:scale(.92);opacity:.85}
  100%{transform:scale(1.18);opacity:0}}
.avatar-audio .bar{font-size:11.5px;color:var(--sub);font-weight:700;letter-spacing:.02em}
.wave{display:flex;align-items:flex-end;gap:2.5px;height:18px}
.wave i{display:block;width:3px;background:linear-gradient(180deg,#8b9bff,#5b6cff);
  border-radius:2px;transform-origin:center bottom;opacity:.85}
.wave i:nth-child(1){height:7px}
.wave i:nth-child(2){height:14px}
.wave i:nth-child(3){height:9px}
.wave i:nth-child(4){height:16px}
.wave i:nth-child(5){height:8px}
@keyframes wv{0%,100%{transform:scaleY(.4)}50%{transform:scaleY(1.2)}}
.wave.play i{background:linear-gradient(180deg,#f9a8d4,#ec4899);animation:wv .55s ease-in-out infinite}
.wave.play i:nth-child(1){animation-delay:0s}
.wave.play i:nth-child(2){animation-delay:.08s}
.wave.play i:nth-child(3){animation-delay:.16s}
.wave.play i:nth-child(4){animation-delay:.24s}
.wave.play i:nth-child(5){animation-delay:.32s}
.msg.out .avatar-audio .pl{
  background:linear-gradient(145deg,#34d399 0%,#10b981 55%,#06b6d4 100%);
  box-shadow:0 8px 18px rgba(16,185,129,.3), inset 0 1px 0 rgba(255,255,255,.35)}
.msg.out .avatar-audio .pl::after{border-color:rgba(16,185,129,.28)}
.msg.out .avatar-audio .pl.playing{
  background:linear-gradient(145deg,#f472b6 0%,#ec4899 50%,#a855f7 100%);
  box-shadow:0 8px 20px rgba(236,72,153,.36), inset 0 1px 0 rgba(255,255,255,.35)}
.msg.out .wave i{background:linear-gradient(180deg,#6ee7b7,#10b981)}
.msg.out .wave.play i{background:linear-gradient(180deg,#f9a8d4,#ec4899)}

.empty{color:var(--sub2);font-size:13px;text-align:center;padding:28px 10px;
  font-weight:600}
.skl{background:linear-gradient(90deg,rgba(91,108,255,.08),rgba(91,108,255,.18),rgba(91,108,255,.08));
  background-size:200% 100%;animation:sh 1.4s infinite;border-radius:10px;
  color:transparent!important}
@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}
.err{color:#be123c;font-size:13px;padding:13px 15px;background:rgba(244,63,94,.08);
  border:1px solid rgba(244,63,94,.22);border-radius:14px;font-weight:600}
.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,80px);
  background:rgba(20,28,46,.94);color:#fff;padding:12px 22px;border-radius:14px;
  font-size:13px;font-weight:700;z-index:999;opacity:0;transition:.3s;
  box-shadow:0 14px 34px rgba(0,0,0,.28);backdrop-filter:blur(12px)}
.toast.show{transform:translate(-50%,0);opacity:1}

/* ===== 电话可点 ===== */
.tel-link{color:var(--acc)!important;cursor:pointer;border-bottom:1px dashed rgba(91,108,255,.35);
  transition:color .15s,opacity .15s}
.tel-link:hover{color:#4338ca!important;opacity:.9}
.person .ph.tel-link{display:inline-block;margin-top:2px}

/* ===== 底部弹层 ===== */
body.sheet-open{overflow:hidden}
.sheet-layer{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-end;justify-content:center;
  pointer-events:none;opacity:0;transition:opacity .28s ease}
.sheet-layer.show{pointer-events:auto;opacity:1}
.sheet-mask{position:absolute;inset:0;background:rgba(16,22,40,.45);backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .28s ease}
.sheet-layer.show .sheet-mask{opacity:1}
.sheet{position:relative;width:min(520px,100%);max-height:min(86vh,720px);overflow:auto;
  background:linear-gradient(180deg,rgba(255,255,255,.98),rgba(248,250,255,.96));
  border-radius:22px 22px 0 0;padding:8px 18px calc(16px + env(safe-area-inset-bottom));
  box-shadow:0 -12px 40px rgba(16,22,40,.18);
  transform:translateY(110%);transition:transform .32s cubic-bezier(.22,1,.36,1)}
.sheet-layer.show .sheet{transform:translateY(0)}
.sheet-handle{width:40px;height:4px;border-radius:99px;background:rgba(28,40,72,.15);
  margin:4px auto 12px}
.sheet-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.sheet-ico{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;font-size:20px;
  flex:0 0 auto;box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}
.sheet-ico.map{background:linear-gradient(135deg,rgba(91,108,255,.16),rgba(239,93,168,.12))}
.sheet-ico.call{background:linear-gradient(135deg,rgba(18,184,134,.18),rgba(12,166,120,.1))}
.sheet-title{font-size:17px;font-weight:800;letter-spacing:-.02em}
.sheet-sub{font-size:12.5px;color:var(--sub);margin-top:2px;font-weight:500}
.sheet-x{margin-left:auto;width:32px;height:32px;border:0;border-radius:10px;cursor:pointer;
  background:rgba(28,40,72,.06);color:var(--sub);font-size:14px;font-family:inherit;
  transition:background .15s}
.sheet-x:hover{background:rgba(28,40,72,.1)}
.sheet-addr{font-size:15px;font-weight:700;line-height:1.5;padding:12px 14px;border-radius:14px;
  background:rgba(91,108,255,.07);border:1px solid rgba(91,108,255,.12);margin-bottom:12px;
  word-break:break-word;animation:fadeIn .35s ease both}
.sheet-phone{font-size:28px;font-weight:800;letter-spacing:.02em;text-align:center;
  font-variant-numeric:tabular-nums;padding:18px 10px 8px;animation:fadeIn .35s ease both}
.sheet-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
.sheet-stat{padding:12px;border-radius:14px;background:rgba(255,255,255,.8);
  border:1px solid var(--line);animation:fadeIn .4s ease both}
.sheet-stat:nth-child(2){animation-delay:.05s}
.sheet-stat .lb{font-size:11px;color:var(--sub);font-weight:700;margin-bottom:4px}
.sheet-stat .vl{font-size:18px;font-weight:800;font-variant-numeric:tabular-nums}
.sheet-stat .vl.sm{font-size:12.5px;font-weight:700;color:var(--sub);word-break:break-all}
.sheet-tip{font-size:12.5px;color:var(--sub);background:rgba(28,40,72,.04);border-radius:12px;
  padding:10px 12px;margin-bottom:12px;line-height:1.45;animation:fadeIn .35s ease both}
.sheet-tip.warn{background:rgba(245,158,11,.1);color:#92400e;border:1px solid rgba(245,158,11,.22)}
.sheet-label{font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--sub2);margin:4px 0 8px}
.sheet-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.sheet-actions.col{grid-template-columns:1fr}
.nav-btn{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:14px;
  border:1px solid var(--line2);background:rgba(255,255,255,.9);cursor:pointer;
  font-family:inherit;text-align:left;text-decoration:none;color:inherit;
  transition:transform .18s,box-shadow .18s,border-color .18s;animation:fadeUp .4s ease both}
.nav-btn:nth-child(2){animation-delay:.05s}
.nav-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:rgba(91,108,255,.3)}
.nav-btn:active{transform:translateY(0)}
.nav-btn .nb-ico{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;
  font-size:18px;background:rgba(28,40,72,.05);flex:0 0 auto}
.nav-btn.amap .nb-ico{background:rgba(0,180,120,.12)}
.nav-btn.bmap .nb-ico{background:rgba(45,120,255,.12)}
.nav-btn.call-go{background:linear-gradient(135deg,rgba(18,184,134,.14),rgba(12,166,120,.08));
  border-color:rgba(18,184,134,.28)}
.nav-btn.call-go .nb-ico{background:rgba(18,184,134,.16)}
.nav-btn .nb-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.nav-btn .nb-txt b{font-size:14px;font-weight:800}
.nav-btn .nb-txt small{font-size:11.5px;color:var(--sub);font-weight:500}
.sheet-cancel{width:100%;padding:12px;border:0;border-radius:12px;background:rgba(28,40,72,.05);
  color:var(--sub);font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;
  transition:background .15s,opacity .2s}
.sheet-cancel:hover{background:rgba(28,40,72,.09)}

/* ===== 轨迹点弹窗 ===== */
.sheet.sheet-track{background:linear-gradient(180deg,#ffffff 0%,#f5f7ff 60%,#f0faf6 100%)}
.tp-sheet .tp-ico{animation:mkPop .45s cubic-bezier(.22,1,.36,1) both}
.tp-addr{position:relative}
.tp-addr .tag{display:inline-block;margin-left:8px;font-size:10px;padding:2px 8px;
  border-radius:7px;font-weight:900;vertical-align:middle;
  background:rgba(99,102,241,.12);color:#4338ca}
.tp-addr .tag.wifi{background:rgba(16,185,129,.16);color:#047857}
.tp-addr .tag.lbs{background:rgba(245,158,11,.18);color:#b45309}
.tp-addr .tag.gps{background:rgba(6,182,212,.16);color:#0e7490}
.tp-stats{grid-template-columns:1fr 1fr}
.tp-stats .sheet-stat:nth-child(3){animation-delay:.1s}
.tp-stats .sheet-stat:nth-child(4){animation-delay:.15s}
.tp-meta{display:flex;flex-wrap:wrap;gap:6px 10px;margin:0 0 12px;font-size:11.5px;
  color:var(--sub);font-weight:600;animation:fadeIn .4s ease both}
.tp-meta span{padding:4px 9px;border-radius:999px;background:rgba(28,40,72,.04);
  border:1px solid var(--line)}

/* ===== 设备信息弹窗 ===== */
.sheet.sheet-device{background:linear-gradient(180deg,#ffffff 0%,#f4f6ff 55%,#eef8f4 100%);
  overflow:hidden}
.sheet.sheet-device .sheet-handle{background:rgba(91,108,255,.22)}
.dev-sheet{padding:4px 2px 2px;text-align:center}
.dev-hero{position:relative;width:108px;height:108px;margin:4px auto 14px;
  display:grid;place-items:center;animation:callPop .55s cubic-bezier(.22,1,.36,1) both}
.dev-rings{position:absolute;inset:0;pointer-events:none}
.dev-rings i{position:absolute;inset:0;border-radius:50%;border:1.5px solid rgba(91,108,255,.28);
  animation:callRing 2s ease-out infinite}
.dev-rings i:nth-child(2){animation-delay:.55s;border-color:rgba(239,93,168,.25)}
.dev-watch{width:72px;height:72px;border-radius:22px;display:grid;place-items:center;
  font-size:34px;background:var(--grad);color:#fff;
  box-shadow:0 12px 28px rgba(91,108,255,.35);position:relative;z-index:1;
  animation:callPulse 2.4s ease-in-out infinite}
.dev-name{font-size:22px;font-weight:800;letter-spacing:-.02em;margin-bottom:10px}
.dev-badges{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:16px}
.dev-badge{display:inline-flex;align-items:center;padding:5px 11px;border-radius:999px;
  font-size:12px;font-weight:800;border:1px solid var(--line);
  background:rgba(255,255,255,.85)}
.dev-badge.on{color:#047857;background:rgba(16,185,129,.14);border-color:rgba(16,185,129,.3)}
.dev-badge.off{color:#be123c;background:rgba(244,63,94,.12);border-color:rgba(244,63,94,.28)}
.dev-badge.batt{color:#4338ca;background:rgba(91,108,255,.1);border-color:rgba(91,108,255,.22)}
.dev-badge.muted{color:var(--sub);font-weight:700}
.dev-kv{text-align:left;border-radius:16px;padding:4px 14px;
  background:rgba(255,255,255,.78);border:1px solid var(--line);margin-bottom:12px}
.dev-row{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:11px 0;border-bottom:1px dashed rgba(28,40,72,.08);font-size:13px}
.dev-row:last-child{border-bottom:0}
.dev-row .k{color:var(--sub);font-weight:700;flex:0 0 auto;white-space:nowrap}
.dev-row .v{font-weight:800;text-align:right;word-break:break-all}
.dev-row .v.mono{font-family:ui-monospace,monospace;font-size:12.5px}

/* ===== 拨号弹窗（独立视觉） ===== */
.sheet.sheet-call{background:linear-gradient(180deg,#ffffff 0%,#f4f7ff 55%,#eef6f3 100%);
  overflow:hidden}
.sheet.sheet-call .sheet-handle{background:rgba(18,184,134,.25)}
.call-sheet{position:relative;padding:6px 4px 4px;text-align:center}
.call-x{position:absolute;top:0;right:0;z-index:2}
.call-hero{position:relative;width:120px;height:120px;margin:10px auto 18px;
  display:grid;place-items:center;animation:callPop .55s cubic-bezier(.22,1,.36,1) both}
.call-rings{position:absolute;inset:0;pointer-events:none}
.call-rings i{position:absolute;inset:0;border-radius:50%;
  border:1.5px solid rgba(18,184,134,.35);opacity:0;
  animation:callRing 2.4s ease-out infinite}
.call-rings i:nth-child(2){animation-delay:.55s;border-color:rgba(91,108,255,.28)}
.call-rings i:nth-child(3){animation-delay:1.1s;border-color:rgba(239,93,168,.25)}
.call-avatar{position:relative;z-index:1;width:72px;height:72px;border-radius:50%;
  display:grid;place-items:center;font-size:28px;font-weight:800;color:#fff;
  background:var(--grad2);box-shadow:0 10px 28px rgba(18,184,134,.35),
    inset 0 1px 0 rgba(255,255,255,.35);
  animation:callPulse 2.4s ease-in-out infinite}
.call-name{font-size:15px;font-weight:700;color:var(--sub);margin-bottom:6px}
.call-num{font-size:30px;font-weight:800;letter-spacing:.04em;
  font-variant-numeric:tabular-nums;color:var(--txt);margin-bottom:10px;
  background:linear-gradient(135deg,#141c2e,#3d4f7a);-webkit-background-clip:text;
  background-clip:text;color:transparent}
.call-ask{font-size:14px;font-weight:600;color:var(--sub);margin-bottom:18px}
.call-desk{font-size:12.5px;color:#92400e;background:rgba(245,158,11,.1);
  border:1px solid rgba(245,158,11,.2);border-radius:12px;padding:10px 12px;
  margin:0 0 14px;line-height:1.45;text-align:left}
.call-actions{display:grid;grid-template-columns:1fr 1.35fr;gap:10px}
.call-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:14px 16px;border-radius:14px;border:0;font-family:inherit;
  font-size:15px;font-weight:800;cursor:pointer;text-decoration:none;
  transition:transform .18s,box-shadow .18s,background .18s,opacity .2s}
.call-btn:active{transform:scale(.97)}
.call-btn.ghost{background:rgba(28,40,72,.06);color:var(--sub)}
.call-btn.ghost:hover{background:rgba(28,40,72,.1)}
.call-btn.primary{color:#fff;background:var(--grad2);
  box-shadow:0 10px 24px rgba(18,184,134,.32)}
.call-btn.primary:hover{transform:translateY(-1px);box-shadow:0 14px 28px rgba(18,184,134,.4)}
.call-btn-ico{font-size:16px;line-height:1}
.anim-d1{animation:fadeUp .4s ease .05s both}
.anim-d2{animation:fadeUp .45s ease .12s both}
.anim-d3{animation:fadeUp .45s ease .18s both}
.anim-d4{animation:fadeUp .5s ease .26s both}
@keyframes callPop{from{opacity:0;transform:scale(.72)}to{opacity:1;transform:scale(1)}}
@keyframes callPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.04)}}
@keyframes callRing{0%{transform:scale(.72);opacity:.55}100%{transform:scale(1.55);opacity:0}}

@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

/* 轻交互动效 */
.chip,.batt,.btn,.distpill,.seg button,.dcard,.person,.addrclick{
  transition:transform .18s ease,box-shadow .18s ease,background .2s ease,border-color .2s ease,opacity .2s ease}
.addr{transition:background .2s ease,border-color .2s ease,transform .2s ease}
.addr:active{transform:scale(.992)}
.chip.on .dot{animation:blink 1.8s infinite}
header{animation:fadeDown .45s cubic-bezier(.22,1,.36,1) both}
@keyframes fadeDown{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

/* ===== 响应式 ===== */
@media(max-width:1100px){
  .c3,.c4,.c5{grid-column:span 6}
  .c7,.c8,.c9{grid-column:span 12}
}
@media(max-width:760px){
  .app{padding:8px 8px 22px}
  .grid{gap:8px}
  .c3,.c4,.c5,.c6,.c7,.c8,.c9{grid-column:span 12}
  header{padding:12px;gap:10px;border-radius:16px;position:static;margin-bottom:8px}
  .h-top{gap:10px}
  .avat{width:44px;height:44px;font-size:21px;border-radius:13px}
  .hinfo h1{font-size:16px}
  .h-status{gap:5px}
  .h-status .chip{padding:4px 8px;font-size:10.5px}
  .h-status .batt{padding:4px 7px 4px 6px}
  .batt-body{width:20px;height:10px}
  .batt-pct{font-size:11px;min-width:2em}
  .btn-refresh{width:28px;height:28px;border-radius:9px;font-size:14px}
  .hg-label{font-size:10.5px}
  .hg-phone{font-size:12px}
  .h-actions{gap:7px}
  .act-btn{min-height:44px;padding:9px 10px;gap:8px;border-radius:13px}
  .act-ico{width:30px;height:30px;border-radius:10px;font-size:14px}
  .act-label{font-size:13px}
  .card{padding:12px;border-radius:18px}
  .card h2{margin-bottom:8px}
  .members{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  #map{height:clamp(300px,48vh,420px);border-radius:14px;margin-top:8px}
  .msg{max-width:95%}
  .maptop{gap:8px}
  .mapbar{flex-direction:column;align-items:stretch;gap:8px}
  .mapbar-tools{width:100%;gap:8px;flex:none}
  .mapbar-tools .seg{width:100%;display:flex}
  .mapbar-tools .seg button{flex:1;height:36px;padding:0 8px;font-size:12px;gap:5px}
  .mapbar-tools .seg button .seg-ic{width:13px;height:13px}
  .mapbar-tools .seg button .seg-txt{font-size:12px;line-height:13px;height:13px}
  .mapbar-tools .daynav{flex:1 1 100%;width:100%;justify-content:space-between}
  .daynav-label{flex:1;text-align:center}
  .merow{width:100%;gap:8px}
  .merow .distpill{padding:8px 12px;font-size:12px}
  .merow .btn{padding:8px 12px;flex:1}
  .addr{padding:9px 11px;margin-top:8px}
  .maplegend{gap:8px 10px;font-size:11px;margin-top:6px}
  .daily{padding-bottom:8px}
  .person{padding:10px}
  .msgwrap{max-height:420px}
  .sheet{border-radius:20px 20px 0 0;padding:6px 14px calc(14px + env(safe-area-inset-bottom))}
  .sheet-actions{grid-template-columns:1fr}
  .sheet-phone{font-size:24px}
  .call-num{font-size:26px}
  .call-hero{width:108px;height:108px;margin:6px auto 14px}
  .call-avatar{width:66px;height:66px;font-size:24px}
  .call-actions{grid-template-columns:1fr 1.4fr}
}
@media(min-width:761px){
  .sheet-layer{align-items:center;padding:24px}
  .sheet{border-radius:22px;transform:translateY(16px) scale(.97);max-height:min(80vh,640px);
    padding:14px 20px 18px}
  .sheet-layer.show .sheet{transform:translateY(0) scale(1)}
  .sheet-handle{display:none}
  .calpick-layer{align-items:center;padding:24px}
  .calpick{border-radius:22px;transform:translateY(16px) scale(.97);padding:16px 18px 18px}
  .calpick-layer.show .calpick{transform:translateY(0) scale(1)}
  .calpick-handle{display:none}
}
@media(max-width:400px){
  .app{padding:6px 6px 18px}
  .members{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
  .person{padding:8px;gap:7px}
  .person .av{width:36px;height:36px;font-size:15px}
  .person .nm{font-size:12.5px}
  .person .ph{font-size:10px}
}
