/* Worldview · 瓦界俯瞰 · GEV 友好型 HUD 样式 */

:root {
  --bg: #0d1220;
  --bg2: #141d36;
  --bg3: #1f2d52;
  --line: #2a3550;
  --text: #ece8e1;
  --muted: #8b93a7;
  --red: #ff4655;
  --teal: #00d4aa;
  --warn: #d8a13c;
  --shadow: 0 8px 24px rgba(0, 0, 0, .55);
  --hud-bg: rgba(13, 18, 32, .82);
  --hud-bd: rgba(255, 70, 85, .35);
  --font-mono: 'JetBrains Mono', 'Cascadia Code', 'Consolas', 'SF Mono', monospace;
}

* { box-sizing: border-box; }

html, body { margin: 0; padding: 0; height: 100%; min-height: 100vh; overflow: hidden; background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft Yahei', sans-serif; -webkit-font-smoothing: antialiased; }

.wv-body { overflow: hidden; }

/* ---- 顶栏 ---- */
.wv-topbar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1200;
  display: flex; align-items: center; justify-content: space-between;
  height: 46px; padding: 0 16px;
  background: linear-gradient(180deg, rgba(13, 18, 32, .96), rgba(13, 18, 32, .75));
  border-bottom: 1px solid var(--hud-bd);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
.wv-brand { display: flex; align-items: center; gap: 8px; min-width: 220px; }
.wv-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--red); box-shadow: 0 0 8px var(--red); animation: wv-pulse 2s infinite; }
@keyframes wv-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.wv-brand-name { font-family: var(--font-mono); font-size: 14px; font-weight: 700; letter-spacing: 2px; color: #fff; }
.wv-brand-sub { font-size: 12px; color: var(--muted); padding-left: 4px; border-left: 1px solid var(--line); margin-left: 4px; }

.wv-status { display: flex; gap: 18px; font-family: var(--font-mono); font-size: 12px; }
.wv-stat { display: flex; align-items: center; gap: 5px; color: var(--muted); }
.wv-stat i { font-style: normal; opacity: .65; }
.wv-stat b { color: var(--text); font-weight: 600; }

.wv-hints { display: flex; gap: 6px; font-size: 11px; color: var(--muted); align-items: center; }
.wv-hints kbd, kbd {
  display: inline-block; min-width: 18px; padding: 1px 5px;
  background: rgba(255, 70, 85, .12); border: 1px solid var(--hud-bd);
  border-radius: 4px; font-family: var(--font-mono); font-size: 10.5px;
  color: var(--text); margin: 0 1px;
}
.wv-hints a {
  padding: 3px 10px;
  background: rgba(255, 70, 85, .08);
  border: 1px solid rgba(255, 70, 85, .35);
  border-radius: 6px;
  color: var(--text);
  font-size: 11.5px;
  font-family: var(--font-mono);
  text-decoration: none !important;
  transition: all .15s;
  white-space: nowrap;
}
.wv-hints a:hover {
  background: rgba(255, 70, 85, .22);
  border-color: var(--red);
  color: #fff;
  box-shadow: 0 0 8px rgba(255, 70, 85, .35);
}
.wv-hints #wvHelpOpen {
  padding: 3px 9px;
  min-width: 24px;
  background: rgba(255, 70, 85, .15);
  border: 1px solid rgba(255, 70, 85, .45);
  border-radius: 999px;
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
  transition: all .15s;
}
.wv-hints #wvHelpOpen:hover {
  background: rgba(255, 70, 85, .3);
  border-color: var(--red);
  color: #fff;
}

@media (max-width: 760px) {
  .wv-topbar { height: 40px; padding: 0 10px; }
  .wv-brand { min-width: auto; }
  .wv-brand-sub { display: none; }
  .wv-status { display: none; }
  .wv-hints { display: none; }
}

/* ---- 主地图：fixed 铺满全屏（避免 absolute + 100% 的高度计算边角） ---- */
/* 默认：纯海洋色 #0a2540 — zoom out 留空区域与 Esri 卫星图海洋色融合，看起来像海洋延伸 */
.wv-map { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #0a2540; z-index: 0; }
.leaflet-container { background: #0a2540; }
/* zoom 控件偏移避开 topbar（46px 高），否则 + 按钮被遮，只露出 − */
.leaflet-top.leaflet-right { top: 56px !important; }

/* 模式 1：CSS 渐变到顶栏（深色过渡到海洋，柔和不刺眼） */
body.wv-blank-gradient .wv-map {
  background: linear-gradient(180deg,
    rgba(13, 18, 32, 1) 0%,
    rgba(13, 18, 32, .85) 30px,
    #0a2540 80px,
    #0a2540 100%);
}
body.wv-blank-gradient .leaflet-container { background: transparent; }

/* 模式 2：星空 SVG（动态生成 80+ 颗星，铺满全屏） */
body.wv-blank-stars .wv-map {
  background: #0a2540;
}
body.wv-blank-stars .leaflet-container { background: transparent; }
.wv-stars-svg {
  position: fixed; top: 0; left: 0;
  width: 100vw; height: 100vh;
  pointer-events: none;
  z-index: -1;  /* 关键：在地图（z-index:0）下面，只在空白区可见 */
  animation: wv-twinkle 6s ease-in-out infinite;
}
@keyframes wv-twinkle {
  0%, 100% { opacity: 1; }
  50% { opacity: .55; }
}

/* 底图联动：暗色底图 → 近黑（#0a0f1c，比 #0d1220 更深） */
body.wv-blank-darkbase .wv-map,
body.wv-blank-darkbase .leaflet-container { background: #0a0f1c; }

/* 底图联动：浅色底图 → 浅灰（#d8e0e8，与 Esri Street Map 浅色氛围融合） */
body.wv-blank-lightbase .wv-map,
body.wv-blank-lightbase .leaflet-container { background: #d8e0e8; }

/* 双语副本：所有 <small> 在主文字后面，灰色小字 */
.wv-brand-name small, .wv-brand-sub small,
.wv-panel-head span small, .wv-tgl-name small,
.wv-hud-k small, .wv-stat small, .wv-hints small {
  font-size: 0.7em; color: var(--muted); margin-left: 4px;
  font-weight: 400; letter-spacing: 0.3px;
}

/* ---- 国名注记（map.html 同款） ---- */
.cl-wrap { background: transparent; border: none; }
.cl {
  font-size: 11px; color: rgba(255, 255, 255, 0.92);
  text-shadow: 0 0 3px #000, 0 0 3px #000, 0 0 3px #000;
  white-space: nowrap; text-align: center;
  font-weight: 500; letter-spacing: 0.3px;
  pointer-events: none;
  font-family: var(--font-mono);
}
.cl i { color: rgba(255, 255, 255, 0.7); font-style: normal; margin-left: 4px; font-size: 10px; }

/* 城市注记（更小更细） */
.city-label {
  font-size: 10px; color: rgba(255, 255, 255, 0.78);
  text-shadow: 0 0 2px #000, 0 0 2px #000, 0 0 2px #000;
  white-space: nowrap; text-align: center;
  font-weight: 400; letter-spacing: 0.2px;
  pointer-events: none;
}
.city-label b { font-weight: 500; }
.city-label i { color: rgba(255, 255, 255, 0.55); font-style: normal; margin-left: 3px; font-size: 9px; }

/* 首都注记：红字 + 白描边 + 首都圆点（与 map.html 天地图注记层同款观感） */
.cap-dot-wrap { background: transparent; border: none; pointer-events: none; }
.cap-dot {
  display: block; width: 7px; height: 7px; border-radius: 50%;
  background: #8b5a2b; border: 1px solid rgba(0, 0, 0, 0.55);
}
.cap-name-wrap { background: transparent; border: none; pointer-events: none; }
.cap-name {
  display: block; text-align: center; white-space: nowrap;
  font-size: 12px; font-weight: 700; color: #db6467;
  letter-spacing: 0.3px;
  text-shadow:
    0 0 2px #fff,
    0 0 3px #fff,
    0 0 5px rgba(255, 255, 255, 0.6);
}
.cap-name b { font-weight: 700; }
.cap-name i { color: #e39a9c; font-style: normal; margin-left: 3px; font-size: 10px; }

/* ---- NASA 火点 marker ---- */
.fire-icon { background: transparent; border: none; }
.fire-marker {
  border-radius: 50%; pointer-events: auto; cursor: pointer;
  transition: transform .15s;
}
.fire-marker:hover { transform: scale(1.5); }

/* ---- OpenSky 飞机 marker ---- */
.flight-icon { background: transparent; border: none; }
.flight-icon svg { display: block; pointer-events: auto; cursor: pointer; transition: transform .15s; }
.flight-icon:hover svg { transform: scale(1.4) rotate(0deg) !important; }

/* ---- iFly 驾驶舱模式 ---- */
body.wv-ifly-mode #worldMap { cursor: crosshair !important; }
body.wv-ifly-mode .wv-photo-marker { animation: wv-pulse-ifly 1.2s ease-in-out infinite; border-color: var(--teal) !important; }
/* iFly 视觉同步到特工头像 + 游戏地图取景菱形钉 */
body.wv-ifly-mode .agent-icon img { animation: wv-pulse-ifly 1.2s ease-in-out infinite; border-color: var(--teal) !important; box-shadow: 0 0 12px var(--teal) !important; }
body.wv-ifly-mode .vmap-icon .vmap-pin { animation: wv-pulse-ifly 1.2s ease-in-out infinite; transform: rotate(45deg) scale(1.3); }
@keyframes wv-pulse-ifly {
  0%, 100% { box-shadow: 0 0 8px var(--teal), 0 0 16px var(--teal); }
  50% { box-shadow: 0 0 12px var(--teal), 0 0 24px var(--teal); }
}

/* 压过 Leaflet 控件 */
.leaflet-control-attribution { background: rgba(13, 18, 32, .65) !important; color: var(--muted) !important; font-size: 10px !important; }
.leaflet-control-attribution a { color: #9fb3c8 !important; }
.leaflet-bar a { background: rgba(20, 29, 54, .92) !important; color: #ece8e1 !important; border-bottom-color: var(--line) !important; }
.leaflet-bar a:hover { background: rgba(31, 45, 82, .95) !important; }
.leaflet-popup-content-wrapper { background: #141d36 !important; color: var(--text) !important; border: 1px solid var(--line) !important; border-radius: 12px !important; box-shadow: var(--shadow) !important; }
.leaflet-popup-tip { background: #141d36 !important; border: 1px solid var(--line) !important; }
.leaflet-popup-content { margin: 10px !important; line-height: 1.5 !important; }
.leaflet-popup-close-button { color: #8b93a7 !important; }

/* ---- 左侧图层面板（避开 Leaflet 缩放控件在右上） ---- */
.wv-panel {
  /* D35: z-index 1100 → 1110 (数据层 panel 提高一档, 搜索 dropdown 溢出不被视野内 panel 遮挡) */
  position: fixed; top: 60px; left: 12px; z-index: 1110;
  /* D28: 三 panel 宽度统一 230 → 320 (HUD chips 更整齐 + 视野内文字更宽) */
  width: 320px; max-width: 90vw;
  background: var(--hud-bg);
  border: 1px solid var(--hud-bd);
  border-radius: 12px;
  box-shadow: var(--shadow);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: transform .25s, opacity .25s;
}
.wv-panel-head { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; border-bottom: 1px solid var(--line); font-size: 12.5px; color: var(--muted); letter-spacing: .5px; }
.wv-fold { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 14px; padding: 6px 10px; min-width: 24px; min-height: 24px; box-sizing: border-box; }
.wv-fold:hover { color: var(--red); }

/* D31: head 整块可点击折叠（视觉提示） */
.wv-panel-head,
.wv-toolbar-head,
.wv-hud-head {
  cursor: pointer;
  user-select: none;
}
/* D31: fold 按钮 click 穿透到 head（避免 head 整体 click handler 重复触发） */
.wv-panel-head .wv-fold,
.wv-toolbar-head .wv-fold,
.wv-hud-head .wv-fold {
  pointer-events: none;
}
.wv-panel-body { padding: 6px 8px; }
.wv-panel.collapsed .wv-panel-body,
.wv-panel.collapsed .wv-panel-foot { display: none; }
.wv-panel.collapsed { width: auto; }

/* 工具按钮排（与快捷键对应，鼠标可点） */
.wv-panel-foot {
  display: flex; flex-wrap: wrap;
  border-top: 1px solid var(--line);
  padding: 6px 4px 4px;
  gap: 2px;
}
.wv-panel-foot button {
  /* D13a：分两行布局，每行 6 个（11 个按钮：6 + 5），避免 11 个 flex:1 挤到 20px 宽导致 emoji 溢出 */
  flex: 1 1 calc((100% - 10px) / 6);
  min-width: 0;
  position: relative;
  background: transparent;
  border: none;
  font-size: 15px;
  padding: 6px 0 4px;
  border-radius: 6px;
  cursor: pointer;
  color: var(--muted);
  transition: all .15s;
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  box-sizing: border-box;
}
.wv-panel-foot button:hover { background: rgba(255, 70, 85, .12); color: var(--red); }
.wv-panel-foot button.active { background: rgba(0, 212, 170, .15); color: var(--teal); }
.wv-panel-foot button span {
  font-family: var(--font-mono);
  font-size: 8.5px;
  letter-spacing: 0;
  opacity: .7;
  font-weight: 600;
}
.wv-panel-foot button:hover span { opacity: 1; }

.wv-toggle {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 8px; border-radius: 8px; cursor: pointer;
  font-size: 12.5px; transition: background .15s;
}
.wv-toggle:hover { background: rgba(255, 70, 85, .08); }
.wv-toggle input { display: none; }
.wv-tgl-dot {
  width: 12px; height: 12px; border-radius: 50%;
  border: 1.5px solid var(--muted); background: transparent;
  flex-shrink: 0; transition: all .15s;
}
.wv-toggle input:checked + .wv-tgl-dot { background: var(--red); border-color: var(--red); box-shadow: 0 0 6px rgba(255, 70, 85, .6); }
.wv-toggle:has(input:disabled) { opacity: .4; cursor: not-allowed; }
.wv-tgl-icon { font-size: 14px; flex-shrink: 0; }
.wv-tgl-name { flex: 1; color: var(--text); }
.wv-tgl-count {
  font-family: var(--font-mono); font-size: 10.5px;
  background: rgba(0, 212, 170, .12); color: var(--teal);
  padding: 1px 6px; border-radius: 4px;
}
.wv-toggle:has(input:disabled) .wv-tgl-count { background: rgba(216, 161, 60, .12); color: var(--warn); }

/* ---- 左面板底部搜索框（D7：复用地图页搜索，搬到这里） ---- */
.wv-search {
  position: relative;
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid var(--line);
}
.wv-search input {
  width: 100%;
  padding: 7px 12px;
  background: rgba(13, 18, 32, 0.8);
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--text);
  font-size: 12.5px;
  outline: none;
  box-sizing: border-box;
}
.wv-search input:focus { border-color: var(--teal); }
.wv-search input::placeholder { color: var(--muted); }
.wv-search-panel {
  position: absolute;
  top: calc(100% + 6px);
  left: 0; right: 0;
  background: #141d36;
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: var(--shadow);
  max-height: 360px;
  overflow-y: auto;
  z-index: 50;
  font-size: 12.5px;
}
.wv-search-panel .ws-scope {
  display: flex; gap: 4px;
  padding: 8px 10px 6px;
  border-bottom: 1px solid var(--line);
}
.wv-search-panel .ws-tab {
  padding: 3px 9px; border-radius: 999px;
  background: rgba(255,255,255,.04); color: var(--muted);
  cursor: pointer; font-size: 11.5px;
  transition: all .15s;
}
.wv-search-panel .ws-tab.active { background: rgba(0, 212, 170, .18); color: var(--teal); }
.wv-search-panel .ws-group {
  padding: 6px 12px 2px;
  font-size: 10.5px; letter-spacing: 1px;
  color: var(--muted); text-transform: uppercase;
}
.wv-search-panel .ws-item {
  display: flex; align-items: center; justify-content: space-between;
  gap: 6px;
  padding: 7px 12px;
  cursor: pointer;
  transition: background .12s;
}
.wv-search-panel .ws-item:hover { background: rgba(0, 212, 170, .10); }
/* 坐标直输入口（高亮，和地名候选区分开） */
.wv-search-panel .ws-item.ws-coord { background: rgba(0, 212, 170, .10); }
.wv-search-panel .ws-item.ws-coord > span:first-child {
  color: var(--teal);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.wv-search-panel .ws-item .ws-en {
  font-size: 11px; color: var(--muted);
}
.wv-search-panel .ws-item .ws-sub {
  font-size: 10.5px; color: var(--muted);
  margin-left: 6px;
}
.wv-search-panel .ws-item .ws-flag {
  width: 18px; height: 13px;
  object-fit: cover; border-radius: 2px;
  vertical-align: -2px; margin-right: 6px;
}
.wv-search-panel .ws-empty {
  padding: 18px 12px; text-align: center;
  color: var(--muted); font-size: 12px;
}
.wv-search-panel .ws-hint {
  padding: 6px 12px; font-size: 11px;
  color: var(--warn);
  border-top: 1px dashed var(--line);
}
.wv-search-panel .ws-foot {
  padding: 6px 12px; font-size: 10.5px;
  color: var(--muted);
  border-top: 1px solid var(--line);
  text-align: center;
}
.wv-panel.collapsed .wv-search { display: none; }

/* D31: 760px 移动端 — 三 panel 宽度统一自适应 (min(calc(100%-12px), 360px))
 * 小屏 (<372px) 几乎全宽，大屏 (>372px) 封顶 360px，居中感
 * 之前 .wv-panel 200px 太窄，HUD/Toolbar 不一致，数据层折叠按钮被挤 */
@media (max-width: 760px) {
  .wv-panel { top: 50px; left: 6px; width: min(calc(100% - 12px), 360px); }
  .wv-hud { width: min(calc(100% - 12px), 360px); left: 6px; right: auto; }
  .wv-toolbar { width: min(calc(100% - 12px), 360px); left: 6px; }
}

/* ---- 右下 AI HUD（避免与左上面板挤一起） ---- */
.wv-hud {
  /* D26: HUD 从右下移到左侧，与 .wv-panel / .wv-toolbar 同列同宽
   * D27: 内容多时 HUD 内部滚动（max-height），不再无限撑高遮挡快捷键
   * D28: 加 head 折叠（head 永远显示，body 可隐藏），width 230 → 320 与其他 panel 同宽
   * D36: 改 flex 纵向布局 —— head 常驻顶部（内容再长也不把标题滚走），
   *      body 独立滚动。外层 padding 清零 + overflow:hidden，
   *      head 背景才能真正满宽填满 panel（原来 padding 5/9 让 head 背景左右各缩进 8px、顶部缩进 4px，
   *      看着像"头部没填充"）*/
  position: fixed; left: 12px; z-index: 1100;
  width: 320px; max-width: 90vw;
  /* D27: 限高 + 内部滚动。min(54vh, 400px) 让窄屏/宽屏都不超合理值 */
  max-height: min(54vh, 400px);
  display: flex; flex-direction: column;
  overflow: hidden;
  background: var(--hud-bg);
  border: 1px solid var(--hud-bd);
  border-radius: 12px;
  box-shadow: var(--shadow);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  /* D36: 外层不再留 padding（head / body 各自管内边距，保证 head 满宽填充） */
  padding: 0;
  /* D36: font-size 11.5 → 12，正文不再过小 */
  font-size: 12px;
  transition: opacity .25s, transform .25s;
}
/* D27: HUD 自定义细滚动条（webkit，避免默认粗滚动条喧宾夺主）
 * D36: 外层改 overflow:hidden，实际滚动的是 .wv-hud-body，滚动条样式跟着挪 */
.wv-hud-body::-webkit-scrollbar { width: 4px; }
.wv-hud-body::-webkit-scrollbar-track { background: transparent; }
.wv-hud-body::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, .15);
  border-radius: 2px;
}
.wv-hud-body::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, .25); }
.wv-hud.hidden { opacity: 0; transform: translateY(8px); pointer-events: none; }
/* D28: HUD 折叠状态（head 显示 + body 隐藏 + 缩到 head 宽度） */
.wv-hud.collapsed .wv-hud-body { display: none; }
.wv-hud.collapsed { width: auto; }
/* D28+D29+D33+D36: HUD head 样式（跟 .wv-panel-head / .wv-toolbar-head 同款 + 青绿底色区分）
 * D36: 外层 padding 已清零 → 去掉负 margin，head 直接就是满宽块（与 .wv-panel-head 同款几何）
 *      负 margin 原来只够盖 1px border，盖不住 padding 造成的 8px/4px 缩进 */
.wv-hud-head {
  display: flex; justify-content: space-between; align-items: center;
  /* D36: 不缩不涨，head 高度固定在顶部 */
  flex: 0 0 auto;
  /* D36: padding 9/13 → 11/14，标题块更饱满 */
  padding: 11px 14px;
  border-bottom: 1px solid var(--line);
  font-size: 12.5px;
  color: var(--muted);
  letter-spacing: .5px;
  font-family: var(--font-mono);
  /* D36: 4% 太淡看着像"没填充" → 改青绿渐变，head 明确是一块填充色 */
  background: linear-gradient(180deg, rgba(0, 212, 170, .20), rgba(0, 212, 170, .08));
  border-top-left-radius: 12px;
  border-top-right-radius: 12px;
}
/* D29: HUD 折叠时 head 4 角都圆（body 隐藏，head 单独成 panel） */
.wv-hud.collapsed .wv-hud-head {
  border-radius: 12px;
  border-bottom: none;  /* 折叠时不需要底 border */
}
.wv-hud-head span { display: inline-flex; align-items: center; gap: 6px; }
.wv-hud-head small { opacity: .7; font-size: 11px; font-weight: 400; letter-spacing: .3px; margin-left: 0; }
/* D28: HUD body 内部 padding（跟 panel-body / toolbar-body 一致）
 * D36: body 自己滚动（外层 overflow:hidden），head 常驻不滚走；
 *      padding 4/9/8 → 10/13/12，内容不再挤成一团 */
.wv-hud-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 10px 13px 12px;
}

/* D29: 普通 row 改上下排（k 标签在上，v 内容在下，value 长不换行）
 * 例: 覆盖国家 "43 国 · 爱尔兰 / 新加坡 / 中国…" 单行显示不被截断
 * chips row 仍保持水平 (因为 chips 需要 wrap 多列) */
.wv-hud-row {
  display: flex; flex-direction: column; justify-content: flex-start;
  /* D36: padding 4 → 7，行间距放宽（内容太紧凑） */
  padding: 7px 0;
  border-bottom: 1px dashed rgba(255, 255, 255, .06);
}
/* chips 行保持 row 方向（chips 需要 wrap 多列）+ 顶部 label + 下方 chips 区域 */
.wv-hud-row.wv-hud-chips-row { flex-direction: row; align-items: flex-start; gap: 8px; }
.wv-hud-row.wv-hud-chips-row .wv-hud-k { padding-top: 2px; }
.wv-hud-row.wv-hud-chips-row .wv-hud-v { flex: 1; min-width: 0; }
.wv-hud-row:last-child { border-bottom: none; }
.wv-hud-k {
  color: var(--muted);
  /* D36: font-size 10.5 → 11 */
  font-size: 11px;
  /* D28: 中英文标签一行（中文 10.5px + 英文 9.5px opacity 0.55），不再上下两行堆叠 */
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  white-space: nowrap;
}
.wv-hud-k small {
  opacity: .55;
  /* D36: font-size 9.5 → 10 */
  font-size: 10px;
  font-weight: 400;
  letter-spacing: .3px;
}
/* D36: font-size 11 → 12，数值更好读 */
.wv-hud-v { color: var(--text); font-family: var(--font-mono); font-size: 12px; }
.wv-hud-hint .wv-hud-v { color: var(--warn); }
/* D27: 瓦友足迹/特工/地图 chip 排版改为 grid（整齐紧凑，比 flex-wrap 更省空间） */
.wv-hud-chips-row .wv-hud-v {
  display: grid;
  /* D28: minmax 48 → 90 (320px panel 排 3 列更整齐，比 2 列紧凑) */
  grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
  /* D36: gap 2 → 4，chip 之间留出呼吸感 */
  gap: 4px;
  /* D27b fix: 强制 grid 容器占满 flex row 宽度 */
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}
/* D30: 重新设计 chip 样式 — 圆角矩形 + 加大 padding/字号 + 取消后面数字 */
.wv-hud-chip {
  display: inline-flex; align-items: center; gap: 1px;
  /* D30: 胶囊形 → 圆角矩形 (border-radius 12px)，更具"标签"感
   * D36: padding 2px 9px → 4px 11px，别挤在网格里 */
  padding: 4px 11px;
  border-radius: 12px;
  background: rgba(255, 255, 255, .04); color: var(--muted);
  border: 1px solid rgba(255, 255, 255, .10);
  font-family: var(--font-mono);
  /* D30: 字号 9.5 → 11 (取消数字后 chip 内容更短，字号可加大更醒目)
   * D36: 11 → 11.5 */
  font-size: 11.5px; line-height: 1.4;
  cursor: pointer;
  /* D30: transition 加 transform 让 hover/active 有微动画 */
  transition: all .18s ease;
  -webkit-tap-highlight-color: transparent;
  white-space: nowrap;
  justify-content: center;
}
/* D30: 取消 chip 后面数字（<small> 隐藏） */
.wv-hud-chip small { display: none; }
/* D30: hover 提升 1px + 边框更亮（增强交互反馈） */
.wv-hud-chip:hover {
  background: rgba(0, 212, 170, .12);
  color: var(--text);
  border-color: rgba(0, 212, 170, .45);
  transform: translateY(-1px);
}
/* D30: active 加 box-shadow 青光晕（更醒目的"选中"态） */
.wv-hud-chip.active {
  background: rgba(0, 212, 170, .22);
  color: var(--teal);
  border-color: var(--teal);
  font-weight: 600;
  box-shadow: 0 0 8px rgba(0, 212, 170, .30);
}
.wv-hud-chip[data-cat="pano"].active { background: rgba(0, 212, 170, .18); color: var(--teal); border-color: var(--teal); }
.wv-hud-chip[data-cat="video_pano"].active { background: rgba(255, 70, 85, .18); color: #ff4655; border-color: #ff4655; }
.wv-hud-chip[data-cat="image"].active { background: rgba(120, 180, 255, .18); color: #78b4ff; border-color: #78b4ff; }
.wv-hud-chip small { /* D29: 9 → 8，更紧凑 */ font-size: 8px; opacity: .75; }

/* ---- 出身未知特工小货架（与 map.html 风格一致） ---- */
.wv-agent-shelf {
  position: fixed; left: 20px; bottom: 20px; z-index: 1001;
  background: rgba(13, 18, 32, 0.82);
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 12px;
  padding: 8px 12px;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: 0 4px 16px rgba(0, 0, 0, .35);
}
.wv-agent-shelf .as-title { font-size: 11px; color: #8b93a7; margin-bottom: 6px; }
.wv-agent-shelf .as-title span { opacity: .7; font-size: 10px; }
.wv-agent-shelf .as-row { display: flex; gap: 8px; }
.wv-agent-shelf img {
  width: 36px; height: 36px;
  border-radius: 50%;
  border: 2px dashed rgba(255, 70, 85, 0.7);
  background: #0d1220;
  cursor: pointer;
  filter: grayscale(0.4);
  transition: transform .15s, filter .15s;
}
.wv-agent-shelf img:hover { transform: scale(1.15); filter: none; }
@media (max-width: 760px) {
  .wv-agent-shelf { left: 12px; bottom: 12px; padding: 6px 10px; }
  .wv-agent-shelf img { width: 30px; height: 30px; }
}

@media (max-width: 760px) {
  /* D26: HUD 已移到左侧，窄屏仍保持 left:12px 不变 */
  .wv-hud { /* D31: width 由外层 760px 断点统一控制 */ }
  /* D27: 窄屏 HUD 更紧凑（更小 padding/字号/限高），避免占满屏
   * D36: 同步 D36 的满宽 head（外层 padding 同样清零）+ 行距/字号不再过挤 */
  .wv-hud { padding: 0; font-size: 11.5px; max-height: 46vh; }
  .wv-hud-body { padding: 8px 10px 10px; }
  .wv-hud-row { padding: 5px 0; }
  .wv-hud-chip { padding: 3px 8px; font-size: 10.5px; }
  .wv-hud-chips-row .wv-hud-v { grid-template-columns: repeat(auto-fill, minmax(68px, 1fr)); gap: 3px; width: 100%; }
}

/* ---- 街景提示 ---- */
.wv-street-tip {
  position: fixed; bottom: 16px; left: 50%; transform: translateX(-50%);
  z-index: 1300;
  background: var(--hud-bg); border: 1px solid var(--hud-bd); border-radius: 999px;
  padding: 8px 16px; font-size: 13px;
  display: flex; align-items: center; gap: 12px;
  box-shadow: var(--shadow); backdrop-filter: blur(10px);
}
/* 修复：[hidden] 属性默认 display:none 被 flex 覆盖，必须显式声明 */
.wv-street-tip[hidden] { display: none !important; }
.wv-street-tip button { background: var(--red); color: #fff; border: none; padding: 3px 10px; border-radius: 999px; cursor: pointer; font-size: 11.5px; }
.wv-street-tip button:hover { background: #ff5e6c; }

/* ---- 帮助浮层 ---- */
.wv-help { position: fixed; inset: 0; z-index: 1400; background: rgba(0, 0, 0, .55); display: flex; align-items: center; justify-content: center; backdrop-filter: blur(4px); }
.wv-help[hidden] { display: none; }
.wv-help-card { background: var(--bg2); border: 1px solid var(--hud-bd); border-radius: 14px; padding: 18px 22px; min-width: 320px; max-width: 90vw; box-shadow: var(--shadow); }
.wv-help-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; font-size: 14px; }
.wv-help-head button { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 22px; padding: 0; line-height: 1; }
.wv-help-head button:hover { color: var(--red); }
.wv-help ul { list-style: none; padding: 0; margin: 0; }
.wv-help li { padding: 6px 0; font-size: 13px; color: var(--text); }
.wv-help-future { color: var(--muted); border-top: 1px dashed var(--line); margin-top: 8px; padding-top: 10px; font-size: 12px; }
.wv-help-foot { color: var(--muted); font-size: 11.5px; margin: 12px 0 0; padding-top: 10px; border-top: 1px solid var(--line); }

/* ---- 瓦友照片 divIcon ---- */
.wv-photo-marker {
  width: 36px; height: 36px; border-radius: 50%;
  border: 2px solid var(--red);
  box-shadow: 0 0 0 2px #fff, 0 0 8px rgba(255, 70, 85, .55), 0 2px 4px rgba(0, 0, 0, .35);
  background-size: cover; background-position: center;
  cursor: pointer; transition: transform .15s;
}
.wv-photo-marker:hover { transform: scale(1.18); border-color: #fff; }

/* 视野内高亮（GEV 风格的"检测网"） */
.wv-photo-marker.wv-in-view {
  border-color: var(--teal);
  box-shadow: 0 0 0 2px #fff, 0 0 12px rgba(0, 212, 170, .8), 0 2px 4px rgba(0, 0, 0, .35);
}

/* ---- 360° 全景瓦友（D9 升级：金黄边框 + 白外环 + 大 🌐 角标，跟海面/绿地高对比） ---- */
.wv-photo-marker.wv-pano-marker {
  border-color: #fbbf24;
  box-shadow: 0 0 0 2px #fff, 0 0 12px rgba(251, 191, 36, .85), 0 2px 4px rgba(0, 0, 0, .35);
  position: relative;
}
.wv-photo-marker.wv-pano-marker:hover {
  transform: scale(1.18);
  border-color: #fff;
  box-shadow: 0 0 0 2px #fbbf24, 0 0 16px rgba(251, 191, 36, .95), 0 2px 6px rgba(0, 0, 0, .45);
}
/* D8-B：360° 全景视频瓦友（红边框 + 🎬 角标，D9 加白外环 + 角标加大） */
.wv-photo-marker.wv-video-pano-marker {
  border-color: #ff4655;
  box-shadow: 0 0 0 2px #fff, 0 0 12px rgba(255, 70, 85, .85), 0 2px 4px rgba(0, 0, 0, .35);
  position: relative;
}
.wv-photo-marker.wv-video-pano-marker:hover {
  transform: scale(1.18);
  border-color: #fff;
  box-shadow: 0 0 0 2px #ff4655, 0 0 16px rgba(255, 70, 85, .95), 0 2px 6px rgba(0, 0, 0, .45);
}
.wv-pano-tag {
  position: absolute; top: -8px; right: -8px;
  width: 22px; height: 22px; line-height: 22px;
  text-align: center; font-size: 13px;
  background: linear-gradient(135deg, #fbbf24, #fde68a);
  color: #1a1206; border-radius: 50%;
  box-shadow: 0 0 0 2px #fff, 0 0 10px rgba(251, 191, 36, .9);
  pointer-events: none;
  animation: wv-pano-pulse 2.4s ease-in-out infinite;
  font-weight: 700;
}
.wv-pano-tag.wv-video-pano-tag {
  background: linear-gradient(135deg, #ff4655, #ff8a8a);
  color: #fff;
  box-shadow: 0 0 0 2px #fff, 0 0 10px rgba(255, 70, 85, .9);
}
@keyframes wv-pano-pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.18); opacity: .85; }
}

/* ---- 检测网：视野中心十字 + 边角 HUD ---- */
.wv-reticle {
  position: fixed; top: 50%; left: 50%;
  width: 24px; height: 24px; margin: -12px 0 0 -12px;
  pointer-events: none; z-index: 1050;
  opacity: 0; transition: opacity .25s;
}
.wv-reticle.on { opacity: .55; }
.wv-reticle::before, .wv-reticle::after {
  content: ''; position: absolute; background: var(--teal);
  box-shadow: 0 0 4px var(--teal);
}
.wv-reticle::before { top: 50%; left: 0; right: 0; height: 1px; }
.wv-reticle::after { left: 50%; top: 0; bottom: 0; width: 1px; }

/* ---- 街景模式光标 ---- */
.wv-map.street-mode, .wv-map.street-mode .leaflet-interactive { cursor: crosshair !important; }

/* ---- 街道 popup 弹窗（街景选择器） ---- */
.street-pick { font-size: 13px; }
.street-pick .sp-title { font-weight: 600; margin-bottom: 6px; font-size: 13px; }
.street-pick .sp-title span { color: var(--muted); font-weight: 400; font-size: 11px; margin-left: 4px; }
.street-pick .sp-item {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 8px; border-radius: 8px;
  text-decoration: none !important; color: var(--text) !important;
  transition: background .15s;
}
.street-pick .sp-item:hover { background: rgba(255, 70, 85, .12); }
.street-pick .sp-icon { font-size: 18px; }
.street-pick .sp-name { flex: 1; }
.street-pick .sp-name small { display: block; color: var(--muted); font-size: 10.5px; }
.street-pick .sp-go { color: var(--red); font-size: 18px; }
.street-pick .sp-tag {
  font-size: 10px; color: var(--warn);
  background: rgba(216, 161, 60, .15);
  padding: 1px 6px; border-radius: 4px;
  white-space: nowrap;
}
.street-pick .sp-disabled { opacity: .55; cursor: not-allowed; pointer-events: auto; }
.street-pick .sp-disabled:hover { background: rgba(255, 255, 255, .03); }
.street-pick .sp-loading { opacity: .7; cursor: default; }
.street-pick .sp-loading:hover { background: transparent; }

/* 瓦友 360° 全景图列表 popup */
.pano-list { max-width: 320px; }
.pano-list .pl-title { font-weight: 600; margin-bottom: 8px; font-size: 13px; color: var(--teal); }
.pano-list .pl-title small { color: var(--muted); font-weight: 400; margin-left: 4px; font-size: 11px; }
.pano-list .pl-item {
  display: flex; gap: 8px; padding: 6px 0;
  border-top: 1px solid var(--line);
  text-decoration: none !important; color: var(--text) !important;
  transition: background .15s;
}
.pano-list .pl-item:first-of-type { border-top: none; }
.pano-list .pl-item:hover { background: rgba(0, 212, 170, .08); }
.pano-list .pl-item img { width: 64px; height: 48px; object-fit: cover; border-radius: 4px; flex-shrink: 0; }
.pano-list .pl-info { flex: 1; min-width: 0; }
.pano-list .pl-title-sub { font-size: 12.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pano-list .pl-meta { font-size: 10.5px; color: var(--muted); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* D37: 全景类型徽章 —— 🌐 360° 全景图 / 🎬 360° VR 视频 */
.pano-list .pl-badge {
  display: inline-block; margin-right: 5px; padding: 0 6px;
  border-radius: 999px; font-size: 10px; font-weight: 600; line-height: 16px;
  vertical-align: 1px; white-space: nowrap;
}
.pano-list .pl-badge-pano { background: rgba(0, 212, 170, .18); color: var(--teal); border: 1px solid rgba(0, 212, 170, .45); }
.pano-list .pl-badge-vr { background: rgba(255, 70, 85, .18); color: #ff4655; border: 1px solid rgba(255, 70, 85, .45); }

/* ---- 360° 全景点 viewer 弹层（Pannellum） ---- */
.wv-pano-modal {
  position: fixed; inset: 0; z-index: 1600;
  background: #000;
  display: flex; flex-direction: column;
  animation: wv-pano-fade .25s ease;
}
.wv-pano-modal[hidden] { display: none !important; }
@keyframes wv-pano-fade { from { opacity: 0; } to { opacity: 1; } }
.wv-pano-head {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 16px; background: rgba(13, 18, 32, 0.85);
  color: #ece8e1; font-size: 14px;
  border-bottom: 1px solid var(--line);
  backdrop-filter: blur(8px);
  flex-shrink: 0;
}
.wv-pano-head b { flex: 1; font-weight: 600; }
.wv-pano-head button {
  background: rgba(255, 70, 85, 0.2); color: var(--red);
  border: 1px solid var(--line); border-radius: 8px;
  width: 32px; height: 32px; cursor: pointer; font-size: 18px;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.wv-pano-head button:hover { background: var(--red); color: #fff; border-color: var(--red); }
.wv-pano-container { flex: 1; min-height: 0; position: relative; background: #0d1220; }
.wv-pano-container > div { width: 100%; height: 100%; }  /* pannellum 自渲染的容器 */
.wv-pano-loading {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  color: var(--teal); font-size: 14px; pointer-events: none;
  z-index: 1;
}
.wv-pano-loading.off { display: none; }
.wv-pano-foot {
  padding: 6px 16px; background: rgba(13, 18, 32, 0.85);
  color: var(--muted); font-size: 11.5px; text-align: center;
  border-top: 1px solid var(--line);
  flex-shrink: 0;
}

/* 隐藏 Pannellum 自带的 about 提示框（"Pannellum 2.5.7" 气泡） */
.pnlm-about-msg { display: none !important; }
.pnlm-controls-container { background: rgba(13, 18, 32, 0.5) !important; }

/* ---- 瓦罗兰特游戏取景地菱形钉（map.html 同款） ---- */
.vmap-icon { background: none; border: none; }
.vmap-pin {
  width: 15px; height: 15px;
  transform: rotate(45deg);
  background: #0d1220;
  border: 2px solid var(--teal);
  box-shadow: 0 0 10px rgba(0, 212, 170, 0.7);
  position: relative;
  transition: box-shadow 0.15s, transform 0.15s;
}
.vmap-pin::after {
  content: '';
  position: absolute;
  inset: 3.5px;
  background: var(--teal);
}
.vmap-icon:hover .vmap-pin {
  box-shadow: 0 0 18px rgba(0, 212, 170, 0.95);
  transform: rotate(45deg) scale(1.25);
}
.vmap-zone { transition: fill-opacity 0.2s; }

/* ========== 📌 外部定位标记（?pin=1） ==========
   样式对齐主站地图的 .vmap-pin：青绿描边菱形针 + 内芯方块 + 呼吸光晕 */
.wv-pin-icon { background: none; border: none; }
.wv-pin-marker {
  width: 20px; height: 20px;
  margin: 3px;
  transform: rotate(45deg);
  background: #0d1220;
  border: 2px solid var(--teal);
  box-shadow: 0 0 12px rgba(0, 212, 170, .8);
  position: relative;
  animation: wv-pin-pulse 1.8s ease-in-out infinite;
}
.wv-pin-marker::after {
  content: '';
  position: absolute;
  inset: 4px;
  background: var(--teal);
}
.wv-pin-icon:hover .wv-pin-marker { box-shadow: 0 0 20px rgba(0, 212, 170, .95); }
@keyframes wv-pin-pulse {
  0%, 100% { box-shadow: 0 0 10px rgba(0, 212, 170, .55); }
  50%      { box-shadow: 0 0 20px rgba(0, 212, 170, .95); }
}
.wv-pin-pop-title {
  font-size: 14px; font-weight: 700; color: var(--text);
  margin-bottom: 4px; word-break: break-all; line-height: 1.4;
}
.wv-pin-pop-coord {
  font-size: 12px; color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.wv-pin-pop-acts {
  display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px;
}
.wv-pin-pop-acts button {
  padding: 4px 10px; border-radius: 8px; cursor: pointer;
  font-size: 12px; line-height: 1.4; font-family: inherit;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .04);
  color: var(--text); transition: background .2s, border-color .2s;
}
.wv-pin-pop-acts button:hover { background: rgba(255, 70, 85, .18); border-color: rgba(255, 70, 85, .55); }
.wv-pin-pop-acts button[data-pin-remove]:hover { background: rgba(255, 70, 85, .32); }
/* 手动标记 / 搜索落标弹窗：与照片弹窗同款测距按钮，两排按钮等宽对齐 */
.wv-pin-pop { min-width: 230px; }
.wv-pin-pop-acts button { flex: 1; }
.wv-pin-pop .wv-pop-measure { margin-top: 10px; }
.wv-pin-pop .wv-pop-measure button { padding: 7px 4px; }
/* 窄屏：三按钮仍保持一行，不换行、不撑破 popup */
@media (max-width: 520px) {
  .wv-pin-pop { min-width: 190px; }
  .wv-pin-pop .wv-pop-measure { gap: 4px; }
  .wv-pin-pop .wv-pop-measure button { font-size: 11px; padding: 6px 2px; }
  .wv-pin-pop-acts button { font-size: 11px; padding: 4px 6px; }
}

/* ---- popup 内嵌动作按钮（取景地"飞到取景地"等） ---- */
.pop-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.pop-actions a, .pop-actions button {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 10px; border-radius: 8px;
  font-size: 12px; line-height: 1; cursor: pointer;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .04);
  color: var(--text); text-decoration: none !important;
  transition: background .15s, border-color .15s, color .15s;
}
.pop-actions a.primary, .pop-actions button.primary {
  background: rgba(0, 212, 170, .15); border-color: var(--teal); color: var(--teal);
}
.pop-actions a:hover, .pop-actions button:hover {
  background: rgba(0, 212, 170, .2); border-color: var(--teal); color: var(--teal);
}

/* ---- 地图名 tooltip（暗色卡片，map.html 同款） ---- */
.leaflet-tooltip.country-tip {
  background: rgba(22, 33, 62, 0.9);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: #ece8e1;
  font-size: 12px;
  padding: 4px 10px;
}
.leaflet-tooltip-top.country-tip::before { border-top-color: rgba(22, 33, 62, 0.9); }

/* ---- 游戏截图在 popup 中撑满（map.html 同款） ---- */
.vmap-pop .vm-img {
  width: 100%; height: 120px;
  object-fit: cover;
  border-radius: 10px;
}
.vmap-pop .vm-coord { color: var(--muted); font-size: 11px; margin-top: 6px; letter-spacing: 0.5px; }

/* ---- 特工档案 popup（map.html 同款：ap-img 110×150 object-fit contain） ---- */
.agent-pop { width: 290px; }
.agent-pop .ap-head { display: flex; gap: 10px; align-items: stretch; }
.agent-pop .ap-img {
  width: 110px; height: 150px; flex: none;
  object-fit: contain;
  background: radial-gradient(circle at 50% 40%, rgba(255,70,85,0.28), rgba(13,18,32,0.65));
  border-radius: 10px;
}
.agent-pop .ap-info { flex: 1; min-width: 0; text-align: left; display: flex; flex-direction: column; justify-content: center; gap: 5px; }
.agent-pop .ap-name { font-size: 17px; font-weight: 700; line-height: 1.2; }
.agent-pop .ap-name span { display: block; color: var(--muted); font-size: 11.5px; font-weight: 400; margin-top: 2px; }
.agent-pop .ap-role { color: var(--teal); font-size: 12px; }
.agent-pop .ap-origin { color: #9fb3c8; font-size: 12px; line-height: 1.4; }
.agent-pop .ap-desc {
  color: #c6c9d4; font-size: 11.5px; margin-top: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-align: left; line-height: 1.7;
  background: rgba(255,255,255,0.05);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 7px 9px;
}

/* ---- 火点 marker（性能版：CSS class 替代 inline box-shadow） ---- */
.fire-icon { background: transparent; border: none; }
.fire-marker { width: 12px; height: 12px; border-radius: 50%; }
.fire-icon.fire-h .fire-marker { background: #ff4655; box-shadow: 0 0 6px #ff4655; }
.fire-icon.fire-m .fire-marker { background: #ff8c42; box-shadow: 0 0 5px #ff8c42; }
.fire-icon.fire-l .fire-marker { background: #ffd700; box-shadow: 0 0 4px #ffd700; }
/* 用 transform scale 缩放而非 width/height，避免与 leaflet inline style 打架 */
.fire-icon.fire-sz-m { transform: scale(.75); }
.fire-icon.fire-sz-s { transform: scale(.5); }

/* ========== D12 我的位置 + 测距工具 ========== */
/* 我的位置蓝点 */
.wv-user-pin { background: transparent; border: none; }
.wv-user-pin .wv-user-dot {
  position: absolute; left: 50%; top: 50%;
  width: 14px; height: 14px; border-radius: 50%;
  background: #3B82F6;
  border: 3px solid #fff;
  box-shadow: 0 0 6px rgba(59,130,246,0.7);
  transform: translate(-50%, -50%);
  z-index: 2;
}
.wv-user-pin .wv-user-pulse {
  position: absolute; left: 50%; top: 50%;
  width: 14px; height: 14px; border-radius: 50%;
  background: rgba(59,130,246,0.45);
  transform: translate(-50%, -50%);
  animation: wv-user-pulse 1.8s ease-out infinite;
  z-index: 1;
}
@keyframes wv-user-pulse {
  0%   { width: 14px; height: 14px; opacity: .9; }
  100% { width: 38px; height: 38px; opacity: 0; }
}
/* 测距端点 A/B pin */
.wv-measure-pin { background: transparent; border: none; }
.wv-measure-pin .wv-measure-dot {
  width: 24px; height: 24px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
  border: 2px solid #fff;
  font-weight: 700; font-size: 12px; color: #fff;
  box-shadow: 0 0 8px rgba(0,0,0,0.6);
  font-family: var(--font-mono);
}
.wv-measure-pin .wv-measure-a { background: #22c55e; }
.wv-measure-pin .wv-measure-b { background: #ef4444; }

/* 测距浮层 */
.wv-measure {
  position: fixed; right: 20px; bottom: 90px; z-index: 1100;  /* 默认靠右显示（D25 仍可拖动，拖动时 right 会被解锁） */
  width: 300px;
  background: var(--hud-bg);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hud-bd);
  border-radius: 10px;
  box-shadow: var(--shadow);
  color: #fff;
  font-size: 12px;
  overflow: hidden;
  font-family: var(--font-mono);
  transition: opacity .15s, box-shadow .15s;
}
.wv-measure.dragging {  /* D25：拖动中态：去过渡 + 提 z-index + 微透明 */
  transition: none;
  opacity: 0.85;
  z-index: 1200;
  box-shadow: 0 8px 32px rgba(0, 212, 170, 0.25);
  cursor: move;
}
.wv-measure-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 12px;
  border-bottom: 1px solid var(--line);
  cursor: move;       /* D25：head 可拖动 */
  user-select: none;  /* 拖动时不要选中文本 */
  -webkit-user-select: none;
}
.wv-measure-title {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-mono);
  color: var(--muted);
  font-size: 12.5px;
  letter-spacing: .5px;
}
.wv-measure-title small {
  opacity: .7; font-size: 11px; font-weight: 400; letter-spacing: .3px;
}
.wv-measure-close {
  background: transparent; border: none; color: var(--muted);
  font-size: 20px; line-height: 1; cursor: pointer; padding: 0 4px;
}
.wv-measure-close:hover { color: #fff; }
.wv-measure-body { padding: 10px 12px; }
.wv-measure-row {
  display: flex; justify-content: space-between; align-items: center;
  padding: 5px 0;
  border-bottom: 1px dashed rgba(255,255,255,0.07);
}
.wv-measure-row:last-of-type { border-bottom: none; }
.wv-measure-row > span { color: var(--muted); flex-shrink: 0; margin-right: 10px; }
.wv-measure-row > b { font-weight: 500; color: #fff; text-align: right; }
.wv-measure-dist b { color: #fbbf24; font-size: 14px; }
.wv-measure-help {
  color: var(--muted); font-size: 11px; padding: 8px 0 4px; line-height: 1.6;
  border-top: 1px solid rgba(255,255,255,0.06); margin-top: 6px;
}
.wv-measure-actions {
  /* D34: 2x2 grid 排版，4 个按钮整齐铺满 */
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  margin-top: 8px;
}
.wv-measure-actions button {
  background: rgba(0, 212, 170, .12);
  color: var(--text);
  border: 1px solid rgba(0, 212, 170, .30);
  border-radius: 6px;
  padding: 6px 4px;
  font-size: 11px;
  font-family: var(--font-mono);
  cursor: pointer;
  transition: all .15s;
}
.wv-measure-actions button:hover {
  background: rgba(0, 212, 170, .25);
  border-color: var(--teal);
  color: var(--teal);
}
.wv-measure-actions button.active {
  background: rgba(0, 212, 170, .30);
  color: var(--teal);
  border-color: var(--teal);
  box-shadow: 0 0 8px rgba(0, 212, 170, .35);
}
/* D34: 状态提示行 (按了"设起点/终点"按钮后显示'请点击地图') */
.wv-measure-status {
  margin-top: 8px;
  padding: 5px 8px;
  font-size: 10.5px;
  color: var(--muted);
  background: rgba(0, 212, 170, .05);
  border-left: 2px solid var(--teal);
  border-radius: 3px;
  line-height: 1.4;
}
.wv-measure-status.active { color: var(--teal); }
.wv-measure-actions button {
  flex: 1;
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.12);
  color: #fff;
  padding: 6px 0;
  border-radius: 6px;
  font-size: 11px;
  cursor: pointer;
  transition: all .15s;
  font-family: var(--font-mono);
}
.wv-measure-actions button:hover {
  background: rgba(251,191,36,0.18);
  border-color: rgba(251,191,36,0.4);
}
/* 工具按钮激活态（测距开 / 我的位置 高亮提示由 panel foot .active 通用态驱动）*/
.wv-panel-foot button.active {
  background: rgba(251,191,36,0.20);
  border-color: rgba(251,191,36,0.45);
  color: #fbbf24;
}
/* 测距模式下整个地图光标变十字 */
.wv-measure-mode #worldMap,
.wv-measure-mode.leaflet-container { cursor: crosshair !important; }

/* ========== D13b 单位切换 + 测距距离标签 ========== */
/* 距离行右对齐容器：距离数字 + 单位切换组 */
.wv-measure-dist-r {
  display: inline-flex; align-items: center; gap: 6px;
}
.wv-measure-dist .wv-measure-unit {
  display: inline-flex; gap: 1px;
  background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.10);
  border-radius: 6px;
  padding: 1px;
  margin-left: 0;
}
.wv-measure-dist .wv-measure-unit button {
  background: transparent;
  border: none;
  color: var(--muted);
  font-size: 10.5px;
  padding: 2px 7px;
  border-radius: 4px;
  cursor: pointer;
  font-family: var(--font-mono);
  line-height: 1.4;
  transition: all .15s;
}
.wv-measure-dist .wv-measure-unit button:hover { color: #fff; }
.wv-measure-dist .wv-measure-unit button.active {
  background: rgba(251,191,36,0.22);
  color: #fbbf24;
  font-weight: 700;
}

/* 测距线段中心永久距离标签（黑底黄字胶囊） */
.wv-measure-label {
  background: rgba(13, 18, 32, 0.88) !important;
  border: 1px solid rgba(251,191,36, 0.55) !important;
  color: #fbbf24 !important;
  font-family: var(--font-mono) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  padding: 3px 9px !important;
  border-radius: 12px !important;
  box-shadow: 0 0 10px rgba(251,191,36, 0.25) !important;
  white-space: nowrap !important;
  pointer-events: none !important;  /* 不挡 marker / line 点击 */
}
.wv-measure-label::before { display: none !important; }  /* 去掉 leaflet tooltip 小三角 */

/* ========== D15 popup 测距按钮（一行 3 色：起点绿 / 终点红 / 我的位置蓝） ========== */
/* ========== D17 popup 测距按钮（ghost button＊用页面主题 + flex 居中） ========== */
.wv-pop-measure {
  display: flex;
  flex-direction: row;
  gap: 6px;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed rgba(255,255,255,0.10);
}
.wv-pop-measure button {
  flex: 1;
  padding: 8px 6px;
  font-size: 12.5px;
  font-weight: 600;
  border-radius: 8px;
  cursor: pointer;
  transition: all .15s;
  font-family: inherit;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.12);
  color: var(--text);
  /* flex 居中\uff1a＠ valign + halign 同时 上的表现 */
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 30px;
  box-sizing: border-box;
  white-space: nowrap;
}
.wv-pop-measure button:hover:not(:disabled) {
  transform: translateY(-1px);
}
/* 起点 = 绿\uff1avar(--teal) 主题 */
.wv-pop-btn-from {
  color: var(--teal) !important;
  border-color: rgba(0,212,170,0.55) !important;
  background: rgba(0,212,170,0.10) !important;
}
.wv-pop-btn-from:hover:not(:disabled) {
  background: rgba(0,212,170,0.22) !important;
  border-color: var(--teal) !important;
  box-shadow: 0 0 12px rgba(0,212,170,0.30);
}
/* 终点 = 红\uff1avar(--red) 主题 */
.wv-pop-btn-to {
  color: var(--red) !important;
  border-color: rgba(255,70,85,0.55) !important;
  background: rgba(255,70,85,0.10) !important;
}
.wv-pop-btn-to:hover:not(:disabled) {
  background: rgba(255,70,85,0.22) !important;
  border-color: var(--red) !important;
  box-shadow: 0 0 12px rgba(255,70,85,0.30);
}
/* 我的位置 = 蓝 #3B82F6 */
.wv-pop-btn-here {
  color: #6cb1ff !important;
  border-color: rgba(59,130,246,0.55) !important;
  background: rgba(59,130,246,0.10) !important;
}
.wv-pop-btn-here:hover:not(:disabled) {
  background: rgba(59,130,246,0.22) !important;
  border-color: #3B82F6 !important;
  box-shadow: 0 0 12px rgba(59,130,246,0.30);
}
.wv-pop-measure button:disabled {
  opacity: 0.38;
  cursor: not-allowed;
  background: rgba(255,255,255,0.03) !important;
  border-color: rgba(255,255,255,0.08) !important;
  color: var(--muted) !important;
}
/* =========== D18 快捷键面板：征用 .wv-panel 同款（实色边框 + head + body） ========== */
.wv-toolbar {
  position: fixed;
  left: 12px;
  top: 460px;
  z-index: 1100;
  /* D28: 三 panel 宽度统一 230 → 320 */
  width: 320px;               /* 与左面板等宽 */
  max-width: 90vw;
  background: var(--hud-bg);  /* 同款 .wv-panel */
  border: 1px solid var(--hud-bd);  /* 实色精益边框（不再 dashed） */
  border-radius: 12px;
  box-shadow: var(--shadow);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: transform .25s, opacity .25s;
  overflow: hidden;            /* 内部字符切进头度别溢出 panel 外 */
}
.wv-toolbar-head {
  /* 与 .wv-panel-head 同款 */
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 12px;
  border-bottom: 1px solid var(--line);
  font-size: 12.5px;
  color: var(--muted);
  letter-spacing: .5px;
  font-family: var(--font-mono);
  background: rgba(255, 70, 85, .04);  /* 微弱精益底色：与 .wv-panel-head 内盖一致 */
}
.wv-toolbar-head span { display: inline-flex; align-items: center; gap: 6px; }
.wv-toolbar-head small { opacity: .7; font-size: 11px; font-weight: 400; letter-spacing: .3px; margin-left: 0; }
.wv-toolbar-head .wv-toolbar-fold {
  background: none; border: none; color: var(--muted); cursor: pointer;
  font-size: 14px; padding: 6px 10px; min-width: 24px; min-height: 24px; box-sizing: border-box;
  transition: color .15s;
  font-family: inherit;
}
.wv-toolbar-head .wv-toolbar-fold:hover { color: var(--red); }

.wv-toolbar-body {
  /* 11 按钮格子：6+5 两行 */
  display: flex;
  flex-wrap: wrap;
  gap: 2px;
  padding: 6px 4px 4px;
  border-top: 1px solid var(--line);
}

/* D20：toolbar head 折叠态（与 .wv-panel.collapsed 风格一致）*/
.wv-toolbar.collapsed .wv-toolbar-body { display: none; }
.wv-toolbar.collapsed .wv-toolbar-head { border-bottom: none; }
.wv-toolbar.collapsed { width: auto; }
.wv-toolbar-body button {
  flex: 1 1 calc((100% - 10px) / 6);
  min-width: 0;
  position: relative;
  background: transparent;
  border: none;
  font-size: 15px;
  padding: 6px 0 4px;
  border-radius: 6px;
  cursor: pointer;
  color: var(--muted);
  transition: all .15s;
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  box-sizing: border-box;
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla", "EmojiOne Color", "EmojiSymbols", sans-serif;
  /* D18 继承 .wv-panel-foot：emoji 字体盘统一（直接赞写，不再引用 D16 外部段） */
}
.wv-toolbar-body button:hover { background: rgba(255, 70, 85, .12); color: var(--red); }
.wv-toolbar-body button.active { background: rgba(0, 212, 170, .15); color: var(--teal); }
.wv-toolbar-body button span {
  font-family: var(--font-mono);
  font-size: 8.5px;
  letter-spacing: 0;
  opacity: .7;
  font-weight: 600;
}
.wv-toolbar-body button:hover span { opacity: 1; }
/* D15 兌容：左面板内嵄 .wv-panel-foot 已移除，虚拟要素要形开关 */
.wv-panel-foot { display: none; }


/* ========== Patch 1 C-A：拳头全球电竞场馆 ========== */
/* ---- arena 菱形钉（拳头红 #FF4655，与 vmap 钉同款风格） ---- */
.arena-icon { background: none; border: none; }
.arena-pin {
  width: 16px; height: 16px;
  transform: rotate(45deg);
  background: #0d1220;
  border: 2px solid #FF4655;
  box-shadow: 0 0 10px rgba(255, 70, 85, 0.75);
  position: relative;
  transition: box-shadow 0.15s, transform 0.15s;
}
.arena-pin::after {
  content: '🏟';
  position: absolute;
  inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 9px;
  filter: grayscale(1) brightness(1.6);
  transform: rotate(-45deg);
}
.arena-icon:hover .arena-pin {
  box-shadow: 0 0 18px rgba(255, 70, 85, 0.95);
  transform: rotate(45deg) scale(1.25);
}
body.wv-ifly-mode .arena-icon .arena-pin {
  animation: wv-pulse-ifly 1.2s ease-in-out infinite;
  transform: rotate(45deg) scale(1.3);
}

/* ---- arena popup（复用 vmap-pop 宽度，叠拳头红主题） ---- */
.arena-pop { width: 320px; }
.arena-pop .ap-name { color: #FF4655; }
.arena-pop .ap-role { color: #FF4655; opacity: .85; font-size: 11.5px; }
.arena-pop .ap-origin { color: #9fb3c8; font-size: 12px; line-height: 1.45; }
.arena-pop .arena-meta {
  margin-top: 8px;
  padding: 7px 9px;
  background: rgba(255, 70, 85, .06);
  border: 1px solid rgba(255, 70, 85, .25);
  border-radius: 8px;
  color: #ece8e1;
  font-size: 11.5px;
  line-height: 1.7;
}
.arena-pop .arena-meta b { color: #FF4655; font-weight: 600; }
.arena-pop .arena-tenants {
  margin-top: 6px;
  font-size: 11.5px;
  color: #c6c9d4;
  line-height: 1.55;
}
.arena-pop .arena-events {
  margin-top: 6px;
  padding: 6px 8px;
  background: rgba(0, 212, 170, .06);
  border: 1px solid rgba(0, 212, 170, .22);
  border-radius: 6px;
  font-size: 11px;
  color: var(--teal);
  line-height: 1.55;
}
.arena-pop .ap-desc {
  color: #c6c9d4;
  font-size: 11.5px;
  margin-top: 8px;
  text-align: left;
  line-height: 1.75;
  background: rgba(255,255,255,0.05);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 8px 10px;
  white-space: pre-wrap;
  word-break: break-word;
}
.arena-pop .pop-actions a.primary,
.arena-pop .pop-actions button.primary {
  background: rgba(255, 70, 85, .15);
  border-color: #FF4655;
  color: #FF4655;
}
.arena-pop .pop-actions a:hover,
.arena-pop .pop-actions button:hover {
  background: rgba(255, 70, 85, .22);
  border-color: #FF4655;
  color: #FF4655;
}

/* ---- arena chip 行配色（拳头红，与 vmap chip 区分） ---- */
.wv-hud-chip.wv-chip-arena.active {
  background: rgba(255, 70, 85, .18);
  color: #FF4655;
  border-color: #FF4655;
}
.wv-hud-chip.wv-chip-arena {
  border-color: rgba(255, 70, 85, .35);
}


/* ========== Patch 3 C-C：拳头国际赛事决赛场地图层 ========== */
/* ---- tournament pin（金色奖杯，跟 Arena 红色菱形钉区分） ---- */
.tournament-icon { background: none; border: none; }
.tournament-pin {
  width: 12px; height: 12px;
  border-radius: 50%;
  background: #0d1220;
  border: 2px solid #FFD700;
  box-shadow: 0 0 8px rgba(255, 215, 0, 0.75);
  position: relative;
  transition: box-shadow 0.15s, transform 0.15s;
}
.tournament-pin::after {
  content: '🏆';
  position: absolute;
  inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 8px;
  filter: grayscale(1) brightness(1.8);
}
.tournament-icon:hover .tournament-pin {
  box-shadow: 0 0 14px rgba(255, 215, 0, 0.95);
  transform: scale(1.4);
}

/* ---- tournament popup（金色主题） ---- */
.tournament-pop { width: 320px; }
.tournament-pop .ap-name { color: #FFD700; }
.tournament-pop .ap-name span {
  display: block;
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 400;
  margin-top: 2px;
}
.tournament-pop .ap-role { color: #FFD700; opacity: .85; font-size: 11.5px; }
.tournament-pop .ap-origin { color: #9fb3c8; font-size: 12px; line-height: 1.45; }
.tournament-pop .tournament-champion {
  margin-top: 8px;
  padding: 6px 9px;
  background: rgba(255, 215, 0, .10);
  border: 1px solid rgba(255, 215, 0, .35);
  border-radius: 8px;
  font-size: 12px;
  color: #FFD700;
  line-height: 1.55;
}
.tournament-pop .tournament-champion b {
  color: #FFD700;
  font-weight: 700;
  font-size: 13px;
}
.tournament-pop .pop-actions a.primary,
.tournament-pop .pop-actions button.primary {
  background: rgba(255, 215, 0, .15);
  border-color: #FFD700;
  color: #FFD700;
}
.tournament-pop .pop-actions a:hover,
.tournament-pop .pop-actions button:hover {
  background: rgba(255, 215, 0, .22);
  border-color: #FFD700;
  color: #FFD700;
}

/* ---- tournament chip 行配色（金色，与 arena 红区分） ---- */
.wv-hud-chip.wv-chip-tournament.active {
  background: rgba(255, 215, 0, .18);
  color: #FFD700;
  border-color: #FFD700;
}
.wv-hud-chip.wv-chip-tournament {
  border-color: rgba(255, 215, 0, .35);
}

/* ---- Patch 4 D-A：百度百科按钮（蓝灰主题，与拳头红维基按钮区分） ---- */
.arena-pop .pop-actions a.baidu {
  background: rgba(59, 130, 246, .12);
  border-color: rgba(59, 130, 246, .55);
  color: #93c5fd;
}
.arena-pop .pop-actions a.baidu:hover {
  background: rgba(59, 130, 246, .22);
  border-color: #3B82F6;
  color: #bfdbfe;
}

/* ===== AI 地名翻译（中文国外地名搜不到时的一键生成入口） ===== */
.wv-search-panel .ws-ai {
  padding: 8px 12px 10px;
  border-top: 1px dashed var(--line);
}
.wv-search-panel .ws-ai-tip {
  font-size: 11px;
  line-height: 1.6;
  color: var(--muted);
  margin-bottom: 8px;
}
.wv-search-panel .ws-ai-row {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.wv-search-panel .ws-ai-btn {
  flex: 1 1 130px;
  justify-content: center;
  padding: 6px 8px;
  border: 1px solid rgba(0, 212, 170, .38);
  border-radius: 6px;
  background: rgba(0, 212, 170, .09);
  color: var(--teal);
  font-size: 11.5px;
  text-align: center;
  white-space: nowrap;
}
.wv-search-panel .ws-ai-btn:hover { background: rgba(0, 212, 170, .2); }
.wv-search-panel .ws-ai-btn.is-alt {
  border-color: rgba(138, 180, 255, .38);
  background: rgba(138, 180, 255, .09);
  color: #9dc0ff;
}
.wv-search-panel .ws-ai-btn.is-alt:hover { background: rgba(138, 180, 255, .2); }
.wv-search-panel .ws-ai-btn.is-busy { opacity: .55; pointer-events: none; }
.wv-search-panel .ws-ai-err {
  padding: 4px 12px 8px;
  font-size: 11px;
  line-height: 1.6;
  color: #ff9a90;
}
.wv-search-panel .ws-ai-note {
  font-size: 10.5px;
  color: var(--muted);
  margin-left: 6px;
}

/* ---- 瓦友足迹热度分级：冷门小圆点（map.html 同款青绿，避免大圆圈互相遮挡） ---- */
.wv-photo-dot-icon { display: flex; align-items: center; justify-content: center; }
.wv-photo-dot {
  width: 10px; height: 10px; border-radius: 50%;
  background: #00d4aa;
  border: 1px solid rgba(255, 255, 255, .6);
  box-shadow: 0 0 5px rgba(0, 212, 170, .6), 0 1px 2px rgba(0, 0, 0, .35);
  cursor: pointer;
  transition: transform .15s, box-shadow .15s;
}
.wv-photo-dot:hover {
  transform: scale(1.7);
  box-shadow: 0 0 0 3px rgba(255, 255, 255, .18), 0 0 8px rgba(0, 212, 170, .9);
}
.wv-photo-dot.wv-dot-pano { background: #fbbf24; box-shadow: 0 0 5px rgba(251, 191, 36, .7), 0 1px 2px rgba(0, 0, 0, .35); }
.wv-photo-dot.wv-dot-video { background: #ff4655; box-shadow: 0 0 5px rgba(255, 70, 85, .7), 0 1px 2px rgba(0, 0, 0, .35); }

/* ---- 街景模式：瓦友足迹 popup 测距区下方的「查看实景街拍」 ---- */
.wv-pop-street:empty { display: none; }
.wv-pop-street .street-pick {
  margin-top: 8px; padding-top: 8px;
  border-top: 1px dashed rgba(255, 255, 255, .10);
}
.wv-pop-street .sp-title { margin-bottom: 2px; }

/* 街拍区折叠：默认只露「瓦友 360° 全景」，点标题展开其余 4 项 */
.street-pick .sp-title.sp-toggle {
  display: flex; align-items: center; gap: 6px;
  width: 100%; margin: 0 0 2px; padding: 3px 4px 5px;
  background: transparent; border: 0; border-radius: 6px;
  color: var(--text); font: inherit; font-size: 13px; font-weight: 600;
  text-align: left; cursor: pointer;
}
.street-pick .sp-title.sp-toggle:hover { background: rgba(255, 255, 255, .06); }
.street-pick .sp-title .sp-title-txt { color: var(--text); font-size: 13px; font-weight: 600; margin-left: 0; }
/* 窄 popup 里英文副标题会把标题挤成两行（"Street" / "View" 分家），隐藏它保持单行紧凑 */
.street-pick .sp-title .sp-sub { display: none; }
.street-pick .sp-title .sp-toggle-hint {
  margin-left: auto; color: var(--red); font-size: 10.5px; font-weight: 400;
  white-space: nowrap; opacity: .9;
}
.street-pick .sp-more { margin-top: 2px; padding-top: 4px; border-top: 1px dashed rgba(255, 255, 255, .08); }
.street-pick .sp-more[hidden] { display: none !important; }

/* 搜索定位 / 手动标记弹窗：默认露街道名 + 全景两项，长地址单行省略，别把弹窗撑长 */
.wv-pin-pop .street-pick .sp-name { min-width: 0; }
.wv-pin-pop .street-pick .sp-name small {
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* 瓦友 360° 全景 · 上传入口（所有弹窗通用，持久可见） */
.street-pick .sp-upload {
  margin-top: 2px; padding-top: 4px;
  border-top: 1px dashed rgba(255, 255, 255, .08);
}
.street-pick .sp-upload .sp-tag {
  background: var(--red); color: #fff; border-color: var(--red);
}
.street-pick .sp-upload:hover { background: rgba(255, 70, 85, .12); }
.street-pick .sp-upload:hover .sp-go { transform: translateX(3px); }

/* 我的位置面板（点击 U / 📍 图标定位后弹出） */
.wv-myloc-pop { min-width: 212px; font-size: 12px; line-height: 1.5; }
.wv-myloc-title { font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.wv-myloc-coord {
  display: flex; align-items: center; gap: 8px;
  color: var(--text); margin-bottom: 6px; font-variant-numeric: tabular-nums;
}
.wv-myloc-coord button {
  margin-left: auto; padding: 2px 8px; font-size: 11px; cursor: pointer;
  background: rgba(255, 255, 255, .06); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
}
.wv-myloc-coord button:hover { background: rgba(255, 70, 85, .15); border-color: var(--red); }
.wv-myloc-hint { color: var(--muted); font-size: 11px; margin-bottom: 8px; }
.wv-myloc-hint.warn { color: var(--warn); }
.wv-myloc-measure {
  width: 100%; padding: 7px 10px; cursor: pointer; font-size: 12px; font-weight: 600;
  background: rgba(255, 70, 85, .16); color: #fff;
  border: 1px solid var(--red); border-radius: 8px;
}
.wv-myloc-measure:hover { background: rgba(255, 70, 85, .3); }

