*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;overflow:hidden;background:#0b0f14;color:#e8eef5;
  font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif}

/* ============ 地图 ============ */
#map{position:absolute;inset:0;background:#11161d;z-index:1}
/* 【第39轮】桌面端地图右侧给面板让位：面板宽 352 + 右边距 10 = 362，再留 4px 缝。
   以前地图铺满整屏、面板浮在上面，放大后往右拖，最右边的内容永远被面板挡住看不见。
   现在地图的右边界就是面板的左边界，拖到头＝看到边。 */
@media(min-width:821px) and (min-height:561px){
  #map{right:366px}
}
.leaflet-container{background:#11161d;font-family:inherit}
.leaflet-control-attribution{background:rgba(11,15,20,.7)!important;color:#5b6a7d!important;font-size:10px!important}
.leaflet-control-attribution a{color:#7d8fa4!important}
.leaflet-bar a{background:#182231!important;color:#dbe6f2!important;border-color:#2a3644!important}
.leaflet-bar a:hover{background:#22303f!important}

/* ============ 左侧项目竖栏（鼠标移到左边自动展开） ============ */
.rail{position:fixed;left:0;top:0;bottom:0;width:46px;z-index:700;
  display:flex;flex-direction:column;gap:2px;padding:8px 0;
  background:rgba(9,13,18,.96);border-right:1px solid #1d2733;
  overflow:hidden;transition:width .16s ease;backdrop-filter:blur(8px)}
.rail:hover,.rail.open,.rail:focus-within{width:180px;box-shadow:6px 0 24px rgba(0,0,0,.45)}
.rlogo{flex:none;height:24px;display:flex;align-items:center;justify-content:center;
  color:#ffb020;font-size:16px;font-weight:900;cursor:pointer;outline:none}
.ri{flex:none;display:flex;align-items:center;justify-content:center;gap:8px;
  padding:6px 4px;border-radius:9px;margin:2px 4px;color:#8fa3b8;text-decoration:none;
  border:1px solid transparent;white-space:nowrap;overflow:hidden}
.ri i{font-style:normal;flex:none;width:28px;height:28px;border-radius:8px;
  background:#182231;border:1px solid #26313f;display:flex;align-items:center;justify-content:center;
  font-size:14px;font-weight:800;color:#cbd8e6}
.ri b{display:none;font-size:16px;font-weight:800;color:#cbd8e6;line-height:1.2;letter-spacing:.3px}
.rail:hover .ri,.rail.open .ri,.rail:focus-within .ri{justify-content:flex-start;padding-left:8px}
.rail:hover .ri i,.rail.open .ri i,.rail:focus-within .ri i{display:none}
.rail:hover .ri b,.rail.open .ri b,.rail:focus-within .ri b{display:block}
.ri:hover{background:#16202b}
.ri.on{background:#3a2a08;border-color:rgba(255,176,32,.5)}
.ri.on i{background:#4a3609;border-color:rgba(255,176,32,.6);color:#ffd98a}
.ri.on b{color:#ffd98a}
/* 左上 Leaflet 缩放控件让开竖栏 */
.leaflet-top.leaflet-left{margin-left:46px}

/* ============ 顶部条 ============ */
.topbar{position:absolute;top:0;left:46px;right:0;height:52px;z-index:600;
  display:flex;align-items:center;gap:10px;padding:0 14px;
  background:linear-gradient(180deg,rgba(9,12,17,.96),rgba(9,12,17,.72) 65%,transparent);
  pointer-events:none}
.topbar>*{pointer-events:auto}
/* 【第50轮】品牌下面挂项目切换（AZ3 核电站 / 三角洲助手）
   老板口径：竖列展示，不要横铺 —— 所以两个项目是上下两行，跟在品牌下面。 */
.brandwrap{display:flex;flex-direction:column;gap:5px;flex:none;position:relative}
/* 浮在品牌下方：顶栏高度不变（面板/地图的定位都不用跟着改），项目列表照样是竖列 */
.projsw{position:absolute;top:100%;left:-6px;margin-top:6px;z-index:620;
  display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.projsw .pj{font-size:11px;line-height:1;padding:5px 10px;border-radius:7px;border:1px solid #263140;
  background:rgba(15,23,32,.82);color:#8fa3b8;text-decoration:none;white-space:nowrap;
  display:block;min-width:92px;text-align:left}
.projsw .pj::before{content:'› ';opacity:.55}
.projsw .pj:hover{color:#dbe6f2;border-color:#3a4a5e}
.projsw .pj.on{background:#3a2a08;border-color:#ffb020;color:#ffd98a;font-weight:700}
.brand{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;letter-spacing:.3px;flex:none}
.brand i{width:8px;height:16px;background:#ffb020;border-radius:2px;display:block}
.brand em{font-style:normal;color:#ffb020}
.sync{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:11px;color:#7d8fa4;flex:none}
.dot{width:6px;height:6px;border-radius:50%;background:#22c55e;box-shadow:0 0 6px #22c55e}
.dot.busy{background:#ffb020;box-shadow:0 0 6px #ffb020;animation:pl 1s infinite}
@keyframes pl{50%{opacity:.25}}
.iconbtn{width:32px;height:32px;border-radius:8px;border:1px solid #2a3644;background:#151d27;
  color:#c3d0de;font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none}
.iconbtn:hover{background:#1e2936;color:#fff}

/* ============ 侧面板 ============ */
.panel{position:absolute;top:52px;right:10px;bottom:10px;width:352px;z-index:500;
  display:flex;flex-direction:column;
  background:rgba(15,20,27,.95);border:1px solid #232f3d;border-radius:14px;
  backdrop-filter:blur(10px);overflow:hidden;
  box-shadow:0 8px 40px rgba(0,0,0,.55)}
.panel.collapsed{display:none}
.phead{padding:12px 14px 10px;border-bottom:1px solid #1e2836;flex:none}
.ptitle{font-size:13px;font-weight:800;color:#dbe6f2;display:flex;align-items:center;gap:7px}
.ptitle span{font-size:11px;font-weight:600;color:#6b7d92}
.pbody{flex:1;overflow-y:auto;overscroll-behavior:contain;min-height:0}
.pbody::-webkit-scrollbar{width:6px}
.pbody::-webkit-scrollbar-thumb{background:#2a3644;border-radius:3px}

/* 搜索 */
.search{position:relative;margin-top:10px}
.search input{width:100%;height:34px;border-radius:9px;border:1px solid #26313f;background:#0e141b;
  color:#e8eef5;font-size:13px;padding:0 10px 0 30px;outline:none}
.search input:focus{border-color:#3a4c60;background:#101821}
.search .si{position:absolute;left:10px;top:50%;transform:translateY(-50%);
  color:#5b6a7d;font-size:14px;line-height:1;pointer-events:none}

/* 区块 */
.sect{padding:11px 14px;border-bottom:1px solid #1a232f}
.sect h3{font-size:11px;font-weight:800;color:#ffb020;letter-spacing:.6px;margin-bottom:9px;
  display:flex;align-items:center;gap:7px}
.sect h3:after{content:'';flex:1;height:1px;background:linear-gradient(90deg,#2a3644,transparent)}

/* 出生点 */
.spawns{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.spawn{border:1px solid #26313f;background:#121a23;border-radius:9px;padding:8px 9px;cursor:pointer;
  text-align:left;transition:.14s}
.spawn:hover{background:#172230;border-color:#37485c}
.spawn.on{background:linear-gradient(135deg,#14301d,#0f2416);border-color:#22c55e;
  box-shadow:0 0 0 1px rgba(34,197,94,.3),0 3px 12px rgba(34,197,94,.16)}
.spawn b{display:block;font-size:11.5px;font-weight:700;color:#dbe6f2;line-height:1.35}
.spawn small{display:block;font-size:9.5px;color:#6b7d92;margin-top:2px;line-height:1.3}
.spawn.on b{color:#6ee7a0}
.spawn.on small{color:#4e8f68}

/* 大核心 · 核设施操作台 快速定位 */
.sect h3 em{font-style:normal;font-size:10px;font-weight:700;color:#7a8ea6;letter-spacing:0}
.cnjump{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.cnbtn{display:flex;align-items:center;gap:6px;border:1px solid #4a2a54;background:#181020;
  border-radius:9px;padding:7px 9px;cursor:pointer;text-align:left;transition:.14s}
.cnbtn:hover{background:#241430;border-color:#e879f9;box-shadow:0 0 0 1px rgba(232,121,249,.28)}
.cnbtn em{color:#e879f9;font-style:normal;font-size:11px;flex:none}
.cnbtn b{flex:1;font-size:11.5px;font-weight:700;color:#f3d9fb;line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cnbtn small{flex:none;font-size:9.5px;color:#d8b4fe;border:1px solid rgba(232,121,249,.42);
  border-radius:6px;padding:0 4px;line-height:13px}

/* 筛选 chips */
/* 【第36轮】类目按游民星空官方分组排：组标题可整组开关，组内是官方类目 */
.chips{display:flex;flex-direction:column;gap:5px}

/* 【第73轮】类别面板限高：61 个类目平铺 1319px 高，把整块「显示类别」挤到滚动条最下面，
   老板以为是删掉了。改成限高 + 内部滚动，标题上带「已开 X / Y 类」，标题可点折叠。 */
#sectCats .chips{
  max-height:min(40vh,320px);overflow-y:auto;overscroll-behavior:contain;
  padding-right:3px;scrollbar-width:thin;scrollbar-color:#31404f transparent}
#sectCats .chips::-webkit-scrollbar{width:6px}
#sectCats .chips::-webkit-scrollbar-thumb{background:#31404f;border-radius:3px}
#sectCats .chips::-webkit-scrollbar-track{background:transparent}
#sectCats.fold .chips{display:none}
#catsHead{cursor:pointer;user-select:none}
#catsHead .fdc{display:inline-block;margin-left:3px;font-size:9px;color:#5f7186;
  transition:transform .15s;vertical-align:1px}
#sectCats.fold #catsHead .fdc{transform:rotate(-90deg)}
#cathint{font-style:normal;font-size:10.5px;font-weight:700;color:#7c8ea3;margin-left:7px}
#cathint i{font-style:normal;color:#5ce08a;font-weight:800}
.cgrp{display:flex;flex-wrap:wrap;gap:5px;align-items:center;
  padding:3px 5px;border-radius:8px;background:rgba(255,255,255,.022)}
.cgrp .gt{flex:none;display:flex;align-items:center;gap:4px;cursor:pointer;
  font-size:11px;font-weight:800;color:#7c8ea3;border:1px solid #26313f;
  background:#121a23;border-radius:6px;padding:2px 7px;user-select:none}
.cgrp .gt:hover{border-color:#3c5165;color:#c3d0de}
.cgrp .gt.on{color:#e8eef5;border-color:#4a6fa5;background:#1a2432}
.cgrp .gt b{font-weight:700;color:#5f7186;font-size:10px}
.cgrp .gt.on b{color:#9fb6cd}
.cgrp .gbox{display:flex;flex-wrap:wrap;gap:5px;flex:1;min-width:0}
.chip.lock{border-style:dashed;border-color:#6d3a7a;cursor:default}
.chip.lock:hover{border-color:#e879f9;color:#f0d6f8}
.card .tag.xy{font-family:ui-monospace,Consolas,monospace;font-size:10px;color:#d8b4fe;
  background:rgba(232,121,249,.1);border:1px solid rgba(232,121,249,.32)}
.chip{display:flex;align-items:center;gap:5px;border:1px solid #26313f;background:#121a23;
  border-radius:20px;padding:5px 9px 5px 7px;font-size:11.5px;color:#93a4b8;cursor:pointer;
  transition:.14s;user-select:none}
.chip:hover{border-color:#37485c;color:#c3d0de}
.chip i{display:none}
.chip img.cic{width:16px;height:16px;border-radius:4px;object-fit:contain;background:rgba(255,255,255,.08);
  padding:1px;flex:none;border:1px solid rgba(255,255,255,.14)}
.chip b{font-weight:700;color:#5f7186;font-size:10.5px}
.chip.on{background:#1a2432;border-color:var(--c,#5b6a7d);color:#e8eef5}
.chip.on img.cic{box-shadow:0 0 7px var(--c)}

/* 路线结果 */
.routebox{padding:11px 14px;border-bottom:1px solid #1a232f;background:#0d1420;display:none}
.routebox.show{display:block}
.rtitle{font-size:11px;font-weight:800;color:#22c55e;letter-spacing:.6px;margin-bottom:8px;
  display:flex;align-items:center;gap:6px}
.rtitle .rc{margin-left:auto;background:none;border:none;color:#6b7d92;font-size:11px;cursor:pointer;
  padding:2px 4px}
.rtitle .rc:hover{color:#ef4444}
.rlist{display:flex;flex-direction:column;max-height:216px;overflow-y:auto}

/* ===== 自定义跑刀：复活后自己勾"这局连哪几个资源"（第45轮） ===== */
.pickwrap{margin-top:9px;border-top:1px solid #1e2836;padding-top:9px;display:none}
/* 只在「✎ 自定义」点开后露出来（第46轮：跟原来的「点选物资」合并成一个入口） */
body.customing .pickwrap{display:block}
.pktitle{font-size:11px;font-weight:800;color:#ffb020;letter-spacing:.5px;margin-bottom:7px}
.pktitle em{font-style:normal;font-size:10px;font-weight:600;color:#6b7d92;margin-left:5px}
.pklist{display:flex;flex-direction:column;gap:2px;max-height:190px;overflow-y:auto}
.pkg{font-size:10px;font-weight:800;color:#5f7186;padding:4px 3px 2px;letter-spacing:.3px}
.pkr{display:flex;align-items:center;gap:7px;padding:4px 6px;border-radius:6px;cursor:pointer;
  font-size:11.5px;background:#111a24;border:1px solid #1a2432}
.pkr:hover{background:#16202c;border-color:#33445a}
.pkr.on{background:linear-gradient(135deg,#14301d,#0f2416);border-color:#22c55e}
.pkr input{width:13px;height:13px;accent-color:#22c55e;flex:none;cursor:pointer}
.pkr b{flex:1;color:#c3d0de;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pkr.on b{color:#8ff0b4}
.pkr i{font-style:normal;font-size:9.5px;color:#5f7186;flex:none;
  background:#182231;padding:1px 4px;border-radius:3px}
.pkr s{text-decoration:none;font-size:10.5px;color:#5f7186;flex:none;font-variant-numeric:tabular-nums}
.pkempty{padding:14px 6px;text-align:center;font-size:11px;color:#4e5d6f}
.rstep{display:flex;align-items:center;gap:8px;padding:5px 3px;font-size:12px;cursor:pointer;
  border-radius:6px}
.rstep:hover{background:#141d29}
.rnum{width:18px;height:18px;border-radius:50%;background:#22c55e;color:#04150a;font-size:10.5px;
  font-weight:900;display:flex;align-items:center;justify-content:center;flex:none}
.rname{flex:1;color:#dbe6f2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rfloor{font-size:10px;color:#ffb020;background:rgba(255,176,32,.12);padding:1px 5px;border-radius:4px;flex:none}
.rdist{font-size:10.5px;color:#5f7186;flex:none;font-variant-numeric:tabular-nums}

/* 路线概览 */
.rsum{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:11.5px;color:#7d8fa4;
  margin-bottom:8px;padding:6px 9px;border-radius:7px;background:#111a24;border:1px solid #1e2836}
.rsum .si2{color:#ffb020;font-size:12px}
.rsum b{font-size:12.5px;font-variant-numeric:tabular-nums}
.rsum b.ok{color:#22c55e}
.rsum b.over{color:#ef4444}
.rsum .sep{color:#33445a}
.rsum .warn{color:#ef4444;font-size:10.5px}

/* 去 / 撤 徽章 */
.badge{font-size:9.5px;font-weight:900;padding:1px 5px;border-radius:4px;flex:none;letter-spacing:.5px}
.badge.go{background:rgba(239,68,68,.18);color:#ff8b8b;border:1px solid rgba(239,68,68,.45)}
.badge.exb{background:rgba(59,130,246,.18);color:#8fbcf5;border:1px solid rgba(59,130,246,.45)}
.rstep.exit .rnum.ex{background:#3b82f6;color:#04101f}
.rstep.big .rnum{background:#ef4444;color:#1a0505}

/* 决策提示 */
.rplan{margin-top:9px;display:none}
.rplan .pl{font-size:11.5px;line-height:1.55;padding:7px 9px;border-radius:7px;margin-bottom:5px}
.rplan .pl b{font-weight:800}
.rplan .pl.ok{background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);color:#a7dcbb}
.rplan .pl.ok b{color:#6ee7a0}
.rplan .pl.no{background:rgba(239,68,68,.09);border:1px solid rgba(239,68,68,.28);color:#d5a3a3}
.rplan .pl.no b{color:#ff8b8b}
.rsuicide{margin-top:2px;text-align:center;font-size:11px;font-weight:800;color:#ff8b8b;
  background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.34);border-radius:7px;
  padding:6px;cursor:pointer;display:none}
.routebox.show .rsuicide{display:block}
.rsuicide:active{transform:scale(.98)}

/* 撤离点对策 */
.exitbox{margin-top:10px;border-top:1px solid #1e2836;padding-top:9px;display:none}
.extitle{font-size:11px;font-weight:800;color:#3b82f6;letter-spacing:.6px;margin-bottom:7px;
  display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.extitle em{font-style:normal;font-size:10px;font-weight:600;color:#6b7d92}
.exlist{display:flex;flex-direction:column;gap:3px;max-height:172px;overflow-y:auto}
.exrow{display:flex;align-items:center;gap:6px;padding:5px 7px;border-radius:6px;cursor:pointer;
  background:#111a24;border:1px solid #1e2836}
.exrow:hover{background:#17222f;border-color:#33445a}
.exrow.prime{background:linear-gradient(135deg,#10243a,#0d1a2a);border-color:#3b82f6;
  box-shadow:0 0 0 1px rgba(59,130,246,.22)}
.exrow.cond{opacity:.72}
.exkind{font-size:9.5px;font-weight:800;color:#8fbcf5;background:rgba(59,130,246,.14);
  padding:1px 5px;border-radius:4px;flex:none}
.exname{flex:1;font-size:11.5px;color:#c3d0de;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.exname em{font-style:normal;font-size:10px;color:#6b7d92;margin-left:4px}
.exbadge{font-size:9px;font-weight:900;color:#04101f;background:#3b82f6;padding:1px 5px;border-radius:4px;flex:none}
.exm{font-size:10.5px;color:#5f7186;flex:none;font-variant-numeric:tabular-nums}
.excond{font-size:10px;color:#5f7186;padding:0 8px 3px 8px;line-height:1.45}

/* 打法设置 */
.modes{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:9px}
.mode{border:1px solid #26313f;background:#121a23;border-radius:9px;padding:8px 6px;cursor:pointer;
  font-size:11.5px;font-weight:700;color:#93a4b8;transition:.14s}
.mode:hover{border-color:#37485c;color:#c3d0de}
.mode.on{background:linear-gradient(135deg,#14301d,#0f2416);border-color:#22c55e;color:#6ee7a0;
  box-shadow:0 0 0 1px rgba(34,197,94,.25)}
.budget{display:flex;align-items:center;gap:9px;font-size:11px;color:#6b7d92}
.budget label{flex:none}
.budget b{color:#dbe6f2;font-size:12px;font-variant-numeric:tabular-nums}
.budget input{flex:1;accent-color:#22c55e;height:4px}
.tip{margin-top:7px;font-size:10.5px;color:#5f7186;line-height:1.5}

/* 点位列表 */
/* 点位列表 / 搜索：属于后台标注与内部信息，不对玩家展示（DOM 保留，防 JS 取值报错） */
.plist{display:none!important}
.search{display:none!important}

/* 建筑进出口 / 楼梯 */
.bldrow{display:flex;gap:6px}
.bldbtn{flex:1;padding:9px 8px;border-radius:8px;border:1px solid #1e6b43;background:#0d2a1c;
  color:#8dffc0;font-size:12px;font-weight:800;cursor:pointer}
.bldbtn:hover{background:#123a26;border-color:#3df58a}
.bldbtn:active{transform:translateY(1px)}
.pitem{display:flex;align-items:center;gap:8px;padding:8px 14px;cursor:pointer;border-bottom:1px solid #151d26}
.pitem:hover{background:#141d29}
.pdotimg{width:16px;height:16px;border-radius:4px;object-fit:contain;flex:none;background:rgba(255,255,255,.06);padding:1px;border:1px solid rgba(255,255,255,.1)}
.pname{flex:1;font-size:12.5px;color:#c3d0de;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcat{font-size:10px;color:#5f7186;flex:none}
.pfloor{font-size:10px;color:#ffb020;background:rgba(255,176,32,.12);padding:1px 5px;border-radius:4px;flex:none}
.empty{padding:26px 14px;text-align:center;font-size:12px;color:#4e5d6f;line-height:1.7}

/* ============ 地图标记 ============ */
.pt{width:36px!important;height:36px!important;overflow:visible!important}
.pt .w{position:absolute;inset:0}
/* 单一图标系统：只显示真实图标，类别色描边 + 微光，不再有实心圆点覆盖 */
.pt .icimg{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--ms,1));
  width:24px;height:24px;object-fit:contain;
  filter:brightness(1.4) contrast(1.08) hue-rotate(var(--hue,0deg)) drop-shadow(0 1px 3px rgba(0,0,0,.75));
  pointer-events:none;will-change:transform;
  /* 和基线用同一个过渡时长：放大/缩小时图标和线是一起长，不是长完再跳 */
  transition:transform .22s cubic-bezier(.25,.1,.25,1)}
.pt .noic{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:15px;height:15px;border-radius:50%;border:2px solid rgba(6,10,14,.9)}
/* 【第52轮】房卡/钥匙卡一律显示成红卡：官方给的是黄卡，这里用色相旋转把黄→红，
   白底和描边基本不受影响，放大缩小仍然是同一张位图（不换图、不错位）。 */
.pt.redcard{--hue:-58deg}
.pt.redcard .icimg{filter:brightness(1.06) saturate(1.85) hue-rotate(var(--hue)) drop-shadow(0 0 7px rgba(239,68,68,.7)) drop-shadow(0 1px 4px rgba(0,0,0,.85))}
/* 选中 / 在路线上时也要保持红（这两条权重更高，覆盖 .pt.sel / .pt.onroute 的白光） */
.pt.redcard.sel .icimg,.pt.redcard.onroute .icimg{filter:brightness(1.2) saturate(1.6) hue-rotate(var(--hue)) drop-shadow(0 0 6px #ffb3b3) drop-shadow(0 0 13px rgba(239,68,68,.75))}
/* 复活点：就用官方那个人像小图标，缩到 17px，不加发光、不抢眼 */
.pt.spawnpt .icimg{width:17px;height:17px;opacity:.92;
  filter:brightness(1.15) drop-shadow(0 1px 2px rgba(0,0,0,.9))}
/* 【第49轮】出生点＝人物头像徽章：深底 + 白人像 + 绿环，一眼认出"人"。
   必须写在这条 .pt.spawnpt .icimg 之后 —— 同权重后写的赢。
   尺寸按 16px 给：官方 PNG 图标四周有透明留白，实际画出来的东西只有框的六成；
   我们这枚 SVG 圆占满整个 viewBox（87%），同样 16px 框画出来反而比其它图标更显眼，
   再大就压住名字了。 */
.pt.spawnpt .avimg{width:16px;height:16px;opacity:1;overflow:visible;
  filter:drop-shadow(0 1px 3px rgba(0,0,0,.85))}
/* 头像画到框边，名字让到框外，不然「海边办公楼复活点二」会压在人脸上。
   选中 / 在路线上时头像会放大 1.3~1.35 倍，名字再往下让一档，不然又压上去。 */
.pt.spawnpt .lbl{top:calc(50% + 19px)}
.pt.spawnpt.sel .lbl,.pt.spawnpt.onroute .lbl{top:calc(50% + 25px)}
.pt.exitpt2 .icimg{filter:brightness(1.2) drop-shadow(0 0 4px #3b82f6) drop-shadow(0 0 10px rgba(59,130,246,.6))}
/* 选中＝图标本身放大提亮，不套白框、不加圆点（老板点名不要） */
.pt.sel .icimg{
  transform:translate(-50%,-50%) scale(calc(var(--ms,1) * 1.3));z-index:6;
  filter:brightness(1.35) hue-rotate(var(--hue,0deg)) drop-shadow(0 0 5px #fff) drop-shadow(0 0 9px rgba(255,255,255,.45))}
/* 路线涉及的点位：高亮放大，清晰突出 */
.pt.onroute .icimg{transform:translate(-50%,-50%) scale(calc(var(--ms,1) * 1.35));z-index:7;
  filter:brightness(1.35) hue-rotate(var(--hue,0deg)) drop-shadow(0 0 4px #fff) drop-shadow(0 0 11px #ffd24a)}
/* 缩放分级：图标随地图连续平滑放大（transform scale，无闪烁/错位） */
#map{--ms:1}
/* 楼层标签（保留） */
/* 【第70轮·根因】路线上的点会被 .onroute 放大到 1.35 倍并给 .icimg 抬到 z-index:7，
   而楼层角标没有 z-index（auto）—— 结果就是"卡房在说明里写了二楼/三楼，地图上却看不见"。
   角标必须压在图标之上，并往外让一点，避开放大后的图标边缘。 */
.pt .fl{position:absolute;left:calc(50% + 11px);top:calc(50% - 13px);font-size:9px;font-weight:800;color:#ffd98a;
  background:rgba(8,12,17,.88);border:1px solid rgba(255,176,32,.45);border-radius:3px;
  padding:0 3px;line-height:13px;white-space:nowrap;letter-spacing:.2px;z-index:9}
/* 自定义跑刀路线：点物资箱按顺序连线 */
.cbar{display:none;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 8px}
.cbar .cb{font-size:11px;padding:3px 9px;border-radius:6px;border:1px solid #263140;
  background:#111a24;color:#9db0c4;cursor:pointer;line-height:16px}
.cbar .cb:hover{border-color:#3a4a5e;color:#dbe6f2}
.cbar .cb.on{background:#3a2a08;border-color:#ffb020;color:#ffd98a}
.cbar .cb.danger:hover{color:#ff8b8b;border-color:rgba(239,68,68,.5)}
.cbar #chint{font-size:10.5px;color:#6b7d92;flex:1;min-width:130px;line-height:1.45}
/* 【第75轮】一个出生点多条路线：路线 1 / 路线 2 / 路线 3 */
.rslots{display:none;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 8px}
.rslots .rslot{display:flex;align-items:baseline;gap:5px;cursor:pointer;
  font-size:11.5px;padding:4px 10px;border-radius:7px;border:1px solid #263140;
  background:#111a24;color:#9db0c4;line-height:16px}
.rslots .rslot b{font-weight:700;color:#c4d3e3}
.rslots .rslot em{font-style:normal;font-size:10px;color:#6b7d92}
.rslots .rslot:hover{border-color:#3a4a5e}
.rslots .rslot.on{background:#3a2a08;border-color:#ffb020}
.rslots .rslot.on b{color:#ffd98a}
.rslots .rslot.on em{color:#c9a45e}
.rslots .rslot.add{border-style:dashed;color:#6b7d92}
.rtitle .rc#btnCustom{margin-left:auto}
.rtitle .rc#rclear{margin-left:6px}
.rtitle .rc.cus{color:#ffb020}
.rtitle .rc.cus:hover{color:#ffd98a}
#map.customing{cursor:crosshair}
.pt.cnum{width:0!important;height:0!important}
.pt.cnum .cn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:20px;height:20px;border-radius:50%;background:#ffb020;color:#1a1204;
  font-size:11px;font-weight:900;display:flex;align-items:center;justify-content:center;
  border:2px solid #fff3d0;box-shadow:0 1px 6px rgba(0,0,0,.75)}
/* ===== 建筑入口：已废弃的「横杠 + 箭头」老样式，一律删除，不再使用 ===== */

/* ===== 上下楼梯（楼层之间的垂直连接） ===== */
/* 楼梯：不能用橙黄方块（跟房卡长得太像，老板在石棺数成"三张卡"）。
   改成小号蓝灰空心 ⇅，且整体上移，绝不压在下面那个物资点上。 */
.pt.stair{width:0!important;height:0!important}
.pt.stair .sto{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) translateY(-19px);
  width:14px;height:14px;border-radius:3px;background:rgba(8,14,20,.82);
  border:1px solid rgba(150,190,220,.85);box-shadow:none}
.pt.stair .sto .u{position:absolute;left:50%;top:1.5px;transform:translateX(-50%);width:0;height:0;
  border-bottom:3.5px solid #a8cde8;border-left:3px solid transparent;border-right:3px solid transparent}
.pt.stair .sto .d{position:absolute;left:50%;bottom:1.5px;transform:translateX(-50%);width:0;height:0;
  border-top:3.5px solid #a8cde8;border-left:3px solid transparent;border-right:3px solid transparent}
.pt.stair .sto .v{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:1.5px;height:5px;background:#a8cde8;border-radius:1px}
/* 层链标签：标明这处楼梯连接哪两层，同一楼梯在各层图上同名同号，便于对照。
   放在图标上方，字号压小、去掉橙色底（橙色底太像房卡）。 */
.pt.stair .stl{position:absolute;left:50%;top:50%;transform:translate(-50%,-33px);
  font-size:8.5px;font-weight:800;color:#c9e3f5;background:rgba(10,18,26,.86);
  border:1px solid rgba(150,190,220,.45);border-radius:3px;padding:0 3px;
  line-height:12px;white-space:nowrap;letter-spacing:.2px}
/* 鼠道 进/出 标签（样式统一到下方隐蔽通道段，这里不再重复定义） */

/* 区域名 */
.area-lb{transform:translate(-50%,-50%);font-size:11px;font-weight:800;color:#9fd8ff;
  text-shadow:0 0 5px #000,0 0 3px #000,0 0 8px #000;white-space:nowrap;pointer-events:none;
  letter-spacing:.5px;opacity:1;font-size:12px;color:#b8e4ff;
  -webkit-text-stroke:.6px rgba(0,0,0,.85)}

/* ============ 底部信息卡 ============ */
.card{position:absolute;left:50%;bottom:16px;transform:translateX(-50%) translateY(calc(100% + 30px));
  width:min(430px,calc(100% - 24px));z-index:700;
  background:rgba(17,23,31,.97);border:1px solid #2a3644;border-radius:14px;padding:13px 15px;
  box-shadow:0 10px 40px rgba(0,0,0,.6);transition:transform .22s cubic-bezier(.2,.8,.3,1);
  backdrop-filter:blur(12px);
  /* 【第52轮】进入路线/图解加进来后卡片变高，限高并允许内部滚动 */
  max-height:calc(100% - 24px);overflow-y:auto;overscroll-behavior:contain}
.card.show{transform:translateX(-50%) translateY(0)}
.card .cx{position:absolute;right:10px;top:9px;width:24px;height:24px;border:none;background:none;
  color:#5f7186;font-size:17px;cursor:pointer;line-height:1}
.card .cx:hover{color:#ef4444}
.card h4{font-size:15px;font-weight:800;color:#fff;margin-bottom:5px;padding-right:26px;display:flex;
  align-items:center;gap:7px;flex-wrap:wrap}
.card h4 i{width:8px;height:8px;border-radius:50%;background:var(--c,#7d8fa4);flex:none;box-shadow:0 0 7px var(--c)}
.card h4 .cic{width:18px;height:18px;border-radius:4px;flex:none;object-fit:cover;opacity:.95}
.card .meta{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:7px}
.card .tag{font-size:10.5px;border-radius:5px;padding:2px 7px;background:#1b2634;color:#93a4b8}
.card .tag.lnk{background:rgba(56,189,248,.12);color:#7dd3fc;border:1px solid rgba(56,189,248,.3);text-decoration:none}
.card .tag.f{background:rgba(255,176,32,.14);color:#ffd98a;border:1px solid rgba(255,176,32,.3)}
.card p{font-size:12px;color:#8296ab;line-height:1.65;max-height:132px;overflow-y:auto;white-space:pre-line}
.card .cimg{margin-top:8px;display:none;gap:7px;flex-wrap:wrap}
.card .cimg img{width:152px;height:152px;object-fit:cover;border-radius:8px;border:1px solid #2a3644;
  display:block;background:rgba(255,255,255,.04);cursor:zoom-in}
.card .cimg img:hover{border-color:#ffb020}
.card .cimg .shn{font-size:10.5px;color:#6b7d92;align-self:flex-end;padding-bottom:3px}

/* ===== 第52轮·第二步：进入路线 / 开卡判定 / 官方图解 ===== */
#cappr{display:none;margin-top:9px;border-top:1px dashed #2a3644;padding-top:9px;
  /* 【第53轮】不再单独限高：图解加到 2 张后限 46vh 会把第二张全局图裁掉；
     卡片本身已有 max-height:calc(100% - 24px) + overflow-y:auto 兜底 */
  max-height:none;overflow:visible}
#cappr .apr{margin-bottom:10px}
#cappr .apr:last-of-type{margin-bottom:6px}
#cappr .aprt{font-size:11px;font-weight:800;color:#ffb020;letter-spacing:.4px;margin-bottom:5px;
  display:flex;align-items:center;gap:5px}
#cappr .aprt::before{content:'';width:3px;height:11px;border-radius:2px;background:#ffb020;flex:none}
#cappr ol{margin:0;padding-left:0;list-style:none;counter-reset:sn}
#cappr ol li{position:relative;padding-left:21px;font-size:12px;line-height:1.6;color:#c3d0de;
  margin-bottom:4px;counter-increment:sn}
#cappr ol li::before{content:counter(sn);position:absolute;left:0;top:1px;width:15px;height:15px;
  border-radius:50%;background:rgba(255,176,32,.16);border:1px solid rgba(255,176,32,.45);
  color:#ffd98a;font-size:9.5px;font-weight:800;line-height:14px;text-align:center}
#cappr .apr.base p{font-size:11.5px;line-height:1.65;color:#93a4b8;max-height:none;margin:0 0 5px;
  white-space:normal}
#cappr .aprk{display:flex;gap:6px;flex-wrap:wrap}
#cappr .aprk span{font-size:10px;border-radius:5px;padding:2px 7px;border:1px solid}
#cappr .aprk .k1{background:rgba(92,224,138,.12);color:#8fe6ad;border-color:rgba(92,224,138,.32)}
#cappr .aprk .k2{background:rgba(239,68,68,.13);color:#fca5a5;border-color:rgba(239,68,68,.34)}
#cappr .apr.fig img{width:100%;height:auto;max-height:420px;object-fit:contain;object-position:center top;
  border-radius:8px;border:1px solid #2a3644;display:block;cursor:zoom-in;background:#080c11}
#cappr .apr.fig img:hover{border-color:#ffb020}
#cappr .aprf{font-size:10.5px;color:#6b7d92;line-height:1.55;margin-top:5px}
/* 【第53轮】多图：局部图在上、全局图在下并压矮，避免卡片过高 */
#cappr .apr.fig .afg{margin:0 0 9px;display:block}
#cappr .apr.fig .afg:last-child{margin-bottom:0}
#cappr .apr.fig .afg figcaption{font-size:10.5px;color:#8fa3b8;line-height:1.5;padding:5px 2px 0}
#cappr .apr.fig .afg + .afg img{max-height:220px}
#cappr .aprs{font-size:10px;color:#556677;line-height:1.5;border-top:1px solid #1f2937;padding-top:6px}

/* 攻略图集入口按钮（挂在「显示类别」下面） */
.atlasbtn{margin-top:10px;width:100%;display:flex;flex-direction:column;gap:2px;align-items:flex-start;
  padding:8px 11px;border-radius:9px;cursor:pointer;text-align:left;
  background:linear-gradient(135deg,rgba(255,176,32,.14),rgba(255,176,32,.05));
  border:1px solid rgba(255,176,32,.32);color:#ffd98a;transition:.15s}
.atlasbtn:hover{background:linear-gradient(135deg,rgba(255,176,32,.22),rgba(255,176,32,.08));
  border-color:rgba(255,176,32,.55)}
.atlasbtn b{font-size:12px;font-weight:800}
.atlasbtn em{font-size:10px;color:#a08a63;font-style:normal;line-height:1.4}

/* 攻略图集浮层 */
#atlas{position:fixed;inset:0;z-index:1900;background:rgba(4,7,10,.86);display:none;
  align-items:center;justify-content:center;backdrop-filter:blur(6px)}
#atlas.show{display:flex}
#atlas .atwrap{width:min(1060px,95vw);max-height:88vh;display:flex;flex-direction:column;
  background:#0e1620;border:1px solid #2a3644;border-radius:14px;overflow:hidden;
  box-shadow:0 18px 60px rgba(0,0,0,.7)}
#atlas .athead{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:12px 14px;border-bottom:1px solid #1f2937;background:#111a24;flex:none}
#atlas .athead b{font-size:14px;color:#fff}
#atlas .athead em{font-size:11px;color:#6b7d92;font-style:normal;margin-left:6px}
#atlas .atx{width:26px;height:26px;border:none;background:none;color:#5f7186;font-size:20px;
  cursor:pointer;line-height:1;border-radius:6px}
#atlas .atx:hover{color:#ef4444;background:rgba(239,68,68,.1)}
#atlas .atgrid{padding:10px 12px;display:grid;grid-template-columns:1fr 1fr;gap:8px;
  align-content:start;overflow-y:auto;overscroll-behavior:contain}
#atlas .atif{margin:0;border:1px solid #1f2937;border-radius:10px;cursor:zoom-in;flex:none;
  background:#111a24;transition:.15s;display:flex;align-items:center;gap:10px;padding:7px 9px}
#atlas .atif:hover{border-color:rgba(255,176,32,.55);background:#16212d}
#atlas .atif img{width:92px;height:122px;object-fit:cover;object-position:center top;
  border-radius:6px;display:block;flex:none;background:#0a0f15}
#atlas .atif figcaption{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;position:relative}
#atlas .atif figcaption b{font-size:12px;color:#e7eef7;font-weight:700;line-height:1.35;
  padding-right:44px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#atlas .atif figcaption span{font-size:10.5px;color:#7a8ea4;line-height:1.45;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#atlas .atif figcaption i{position:absolute;right:0;top:1px;font-size:9px;font-style:normal;
  padding:1px 6px;border-radius:4px;background:rgba(255,176,32,.14);color:#ffd98a;
  border:1px solid rgba(255,176,32,.28)}
/* 实拍图灯箱 */
#lb{position:fixed;inset:0;z-index:2000;background:rgba(4,7,10,.92);display:none;
  align-items:center;justify-content:center;cursor:zoom-out}
#lb.show{display:flex}
#lb img{max-width:92vw;max-height:88vh;border-radius:10px;box-shadow:0 10px 50px rgba(0,0,0,.8)}
#lb .lbx{position:absolute;right:18px;top:14px;font-size:26px;color:#c3d0de;cursor:pointer;line-height:1}

/* ============ 移动端 ============ */
.mobtoggle{display:none}
@media(max-width:820px){
  .panel{top:auto;left:8px;right:8px;bottom:8px;width:auto;height:min(50vh,420px);border-radius:16px}
  .sync{display:none}
  .topbar{height:48px;padding:0 10px}
  .brand{font-size:13.5px}
  .brand i{height:14px}
  .brandwrap{gap:4px}
  .projsw{gap:3px}
  .projsw .pj{font-size:10.5px;padding:4px 9px;min-width:84px}
  .mobtoggle{display:flex;position:absolute;right:10px;bottom:16px;z-index:800;
    height:42px;padding:0 16px;border-radius:21px;border:none;cursor:pointer;
    background:#ffb020;color:#1a1206;font-size:13px;font-weight:800;align-items:center;gap:6px;
    box-shadow:0 6px 22px rgba(255,176,32,.4)}
  .mobtoggle.open{bottom:auto;top:8px;right:8px;background:#1b2634;color:#dbe6f2;
    box-shadow:0 4px 16px rgba(0,0,0,.5)}
  .card{bottom:8px;width:calc(100% - 16px)}
  /* 【第52轮】卡片加了「进入路线 + 图解」后变高，手机上必须限高并允许内部滚动，
     否则内容会顶出屏幕（以前只有位置说明，高度从来不是问题）。 */
  .card.show{bottom:calc(54vh + 16px);max-height:calc(46vh - 24px);overflow-y:auto;
    overscroll-behavior:contain}
  #cappr{max-height:none;overflow:visible}
  #cappr .apr.fig img{max-height:360px}
  /* 面板收起（手机默认就是收起的）时，卡片直接贴底，别留 54vh 的空档 */
  .panel.collapsed ~ .card.show{bottom:8px;max-height:calc(100% - 14px)}
  .panel.collapsed ~ .card.show #cappr .apr.fig img{max-height:420px}
  /* 攻略图集：手机上两列铺开，别一列拉到底 */
  #atlas .atwrap{width:96vw;max-height:88vh}
  #atlas .athead{padding:10px 12px}
  #atlas .athead b{font-size:13px}
  #atlas .athead em{font-size:10px}
  #atlas .atgrid{grid-template-columns:1fr;padding:8px;gap:7px}
  #atlas .atif img{width:76px;height:100px}
  #atlas .atif figcaption b{font-size:11px;padding-right:38px}
  #atlas .atif figcaption span{font-size:9.5px}
  #atlas .atif figcaption i{font-size:8px}
}

/* 【第45轮】手机横屏：屏幕转过来要跟着变横版布局。
   以前只按宽度判断（>820px 就走桌面），手机横屏 844×390 被判成"桌面"，
   于是右侧面板吃掉 366px、地图只剩一条；竖屏那套底部抽屉又出不来 —— 转屏等于没转。
   判据：横屏 + 高度≤560px（手机横屏的特征）。 */
@media (orientation:landscape) and (max-height:560px){
  .topbar{height:44px;padding:0 8px}
  .brand{font-size:12px}
  .brand i{height:12px}
  .brandwrap{gap:3px}
  .projsw{gap:2px}
  .projsw .pj{font-size:10px;padding:3px 8px;min-width:78px}
  .sync{display:none}
  .panel{top:44px;right:6px;bottom:6px;width:236px;border-radius:12px}
  .panel.collapsed{display:none}
  #map{right:246px}
  .card{left:calc((100% - 246px)/2);bottom:8px;width:min(380px,calc(100% - 260px));
    max-height:calc(100% - 14px);overflow-y:auto;overscroll-behavior:contain}
  #cappr{max-height:none;overflow:visible}
  #cappr .apr.fig img{max-height:340px}
  #atlas .atwrap{max-height:94vh}
  #atlas .atgrid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;padding:9px}
  #atlas .atif img{height:100px}
  .mobtoggle{display:flex;position:absolute;right:8px;bottom:8px;z-index:800;
    height:34px;padding:0 12px;border-radius:17px;border:none;cursor:pointer;
    background:#ffb020;color:#1a1206;font-size:12px;font-weight:800;align-items:center;gap:6px;
    box-shadow:0 4px 16px rgba(255,176,32,.35)}
  .mobtoggle.open{bottom:auto;top:6px;right:6px;background:#1b2634;color:#dbe6f2;
    box-shadow:0 4px 16px rgba(0,0,0,.5)}
}

/* 点位名称标签：小倍率隐藏，放大后显示 */
.pt .lbl{position:absolute;left:50%;top:calc(50% + 10px);transform:translateX(-50%);
  font-size:9.5px;line-height:1.3;white-space:nowrap;color:#e6eefa;font-weight:600;
  background:rgba(5,12,20,.86);padding:1px 4px;border-radius:3px;
  border:1px solid rgba(255,255,255,.1);pointer-events:none;display:none;
  text-shadow:0 1px 2px #000;z-index:3}
/* 刷卡点：卡片图标比普通图标高，标签往下让开，别被图标压住 */
.pt.cardspot .lbl{top:calc(50% + 18px);font-size:10px;font-weight:700;
  color:#fff8e6;background:rgba(38,26,4,.9);border-color:rgba(255,210,63,.55)}
#map.z-mid .pt.key .lbl{display:block}
#map.z-hi .pt .lbl{display:block}
/* 撤离点类型简标：常显（常规撤 / 随机撤 / 丢包撤 / 任务撤 / 付费撤） */.pt.exitpt2 .exk{position:absolute;left:50%;top:-4px;transform:translate(-50%,-100%);
  font-size:9px;font-weight:900;color:#fff;background:#2563eb;
  padding:1px 5px;border-radius:9px;line-height:14px;white-space:nowrap;display:block;z-index:5;
  box-shadow:0 1px 4px rgba(0,0,0,.6)}
/* 鼠道：进/出 文字标（无底色块）+ 中段路线名 + 方向箭头 */
.pt.mse{width:0!important;height:0!important}
.pt.mse .msei{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:auto;height:auto;font-size:10px;font-weight:800;white-space:nowrap;
  color:#cdeeff;background:none;border:none;padding:0 2px;line-height:1.35;
  text-shadow:0 0 3px #04121c,0 0 6px #04121c,0 1px 2px #000}
.pt.mse .msei.in{color:#bfe9ff}
.pt.mse .msei.out{color:#bfe9ff}
.pt.mse .msei.note{color:#9fdcf5;font-weight:600;cursor:pointer}
.pt.marr .arr{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(var(--a,0deg));
  color:#aef0ff;font-size:10px;font-weight:900;opacity:.85;text-shadow:0 0 2px #04121c;pointer-events:none;line-height:1}
/* 鼠道示意徽标 + 开关行 */
.pt.mse .msei.note.bad{color:#ffb0b0}

/* 隐蔽通道：中点标签可点开走法要点 */
.pt.mse .msei.note{cursor:pointer}
.pt.mse .msei.tips{position:absolute;left:50%;top:20px;transform:translateX(-50%);
  display:none;width:230px;background:rgba(8,14,20,.97);border:1px solid #4a6a80;border-radius:7px;
  padding:6px 9px;font-size:10.5px;line-height:1.65;color:#cfe3f2;text-align:left;white-space:normal;
  box-shadow:0 4px 14px rgba(0,0,0,.6);z-index:5}
.pt.mse:hover .msei.tips{display:block}
.togglerow{display:flex;align-items:center;gap:7px;font-size:12px;color:#cdd9e6;cursor:pointer;margin:2px 0 4px}
.togglerow input{width:15px;height:15px;accent-color:#9fd8ff;cursor:pointer}

/* 楼梯间 / 入口 标注：样式已统一到上方「建筑入口箭头 / 上下楼梯」段落 */

/* 路线两行结构 */
.rbody{flex:1;display:flex;flex-direction:column;gap:1px;min-width:0}
.rtop{display:flex;align-items:center;gap:5px;color:#dbe6f2;font-size:12px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rtop em{font-style:normal;color:#7d8fa4}
.rsub{font-size:10px;color:#6f8299;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rsub b{color:#9fb4c9;font-weight:700}
.rstep{align-items:flex-start}
.rstep .rnum{margin-top:1px}

/* ===== 核设施操作台 · 基线：只放游戏原生图标（无圈、无编号） ===== */
.pt.cspot{cursor:pointer}
.pt.cspot .cimg{position:absolute;left:0;top:0;width:26px;height:26px;margin:-13px 0 0 -13px;
  transform:scale(var(--ms,1));object-fit:contain;
  filter:brightness(1.15) drop-shadow(0 1px 3px rgba(0,0,0,.75));pointer-events:none}
.pt.cspot .clb{position:absolute;left:0;top:0;transform:translate(19px,14px);
  white-space:nowrap;padding:1px 5px;border-radius:4px;
  background:rgba(8,12,16,.82);border:1px solid rgba(160,180,200,.25);
  color:#dbe6f2;font:700 10.5px/1.4 ui-sans-serif,system-ui;display:none;pointer-events:none}
.pt.cspot .clb em{font-style:normal;color:#8fa4b8;font-size:9.5px;margin-left:4px}
.pt.cspot .clb i{display:block;font-style:normal;color:#ffe08a;font-size:9.5px;font-weight:600;margin-top:2px}
.pt.cspot:hover .clb{display:block}
/* 基线参照（老板第30轮口径）：
   淡绿细线＝基准线，图标压在绿线上＝本局没开过；
   淡红细线＝偏移警告线，图标飘到红线上＝本局已被开过。
   整组随 --ms 一起缩放（跟图标同步变大变小），线本身保持 1.1px 起，不画粗描边。 */
.xh{width:0!important;height:0!important;overflow:visible!important;display:none}
/* 全图缩得太小时不画（会糊成一片），放大到能看清操作台才出 */
#map.z-mid .xh{display:block}
/* 基线容器：尺寸全部由 JS 按当前缩放的真实像素比例算好、写进 inline style，
   这里只管长相（缩放时不会和底图建筑错位）。 */
.xh .xb{position:absolute;left:0;top:0;width:0;height:0;
  /* 几何按 BS_REF_Z 烤成像素，缩放只改 --bs：和图标同一个中心、同一节奏，放大缩小都不会分离 */
  transform:scale(var(--bs,1));transform-origin:0 0;
  transition:transform .22s cubic-bezier(.25,.1,.25,1)}
/* 淡绿＝参照物：那个不动的圆形厂房 / 主楼 / 横梁 / 参考线 / 黑色条状物 / 小方块 */
/* 【第35轮】基线只有直线：横 / 竖 / 斜。没有圆框、没有方框、没有矩形。
   绿＝基准线（穿过操作台图标中心，图标压线＝没被开）
   红＝警告线（被开之后图标飘到的位置，图标压红线＝已被开过）
   线宽用 --bsi 反向补偿，放大时线不会跟着变粗。 */
.xh .bl{position:absolute;box-sizing:content-box;pointer-events:none;
  filter:drop-shadow(0 0 1px rgba(0,0,0,.95))}
.xh .bl.g{background:#7ee787}
.xh .bl.r{background:#fca5a5}
/* 横向/斜向线被 --bs 放大后线高会跟着涨，这里用 --bsi 压回去，屏显始终是细线 */
.xh .bl.h,.xh .bl.d{height:calc(1.3px * var(--bsi,1))!important}
.xh .bl.v{width:calc(1.3px * var(--bsi,1))!important}
.xh .bl.d{transform-origin:center center}
/* 参照物 / 落点的小字，两三个字；字号不随缩放变大，免得糊住整栋楼 */
.xh .bl-t{position:absolute;font-size:10px;font-weight:800;line-height:1;white-space:nowrap;
  letter-spacing:.3px;pointer-events:none;text-shadow:0 0 3px #000,0 0 5px #000;
  transform:scale(var(--bsi,1));transform-origin:left center}
.xh .bl-t.g{left:9px;top:-4px;color:#a7f3b6}
.xh .bl-t.r{color:#fca5a5;margin:5px 0 0 7px}

/* 戴皇冠的那版＝官方图标 ic_14（皇冠+齿轮框同一张位图），只是整体略放大一点，
   让框体和 ic_15 视觉等大；皇冠不再单独定位，缩放时不可能分离。 */
.pt.cspot.crowned{z-index:720}
.pt.cspot .cimg.crw{width:30px;height:30px;margin:-16px 0 0 -15px;
  filter:brightness(1.15) drop-shadow(0 1px 3px rgba(0,0,0,.75)) drop-shadow(0 0 5px rgba(255,200,60,.35))}

/* 面板：总图实位分隔条 + 金色编号按钮 */
.cnsep{grid-column:1 / -1;margin:6px 0 1px;padding-top:7px;border-top:1px dashed rgba(245,197,66,.28);
  display:flex;flex-direction:column;gap:2px}
.cnsep b{font-size:11px;font-weight:800;color:#f5c542;letter-spacing:.2px}
.cnsep span{font-size:10px;color:#6f8299;line-height:1.35}
.cnbtn.cm{border-color:#4a3a12;background:#171208}
.cnbtn.cm:hover{background:#221a0a;border-color:#f5c542;box-shadow:0 0 0 1px rgba(245,197,66,.3)}
.cnbtn.cm i{flex:none;width:17px;height:17px;border-radius:999px;background:#0a0e13;border:1.6px solid #f5c542;
  color:#ffe680;font:900 10px/14px ui-sans-serif,system-ui;font-style:normal;text-align:center}
.cnbtn.cm b{color:#ffe9b0}
.cnbtn.cm u{flex:none;font-size:9.5px;color:#c9a24a;text-decoration:none;border:1px solid rgba(245,197,66,.35);
  border-radius:4px;padding:0 3px;line-height:1.5}

/* ===== 攻略动线：刷卡点列表 / 楼层楼梯 / 基准线判定 ===== */
.gdlist{display:flex;flex-direction:column;gap:5px;margin:2px 0 6px}
.gdbtn{display:flex;align-items:center;gap:7px;width:100%;padding:7px 9px;border-radius:8px;
  border:1px solid #23303d;background:#131a22;color:#cfe2f0;cursor:pointer;text-align:left;
  font:700 12px/1.35 ui-sans-serif,system-ui;transition:border-color .12s,background .12s}
.gdbtn:hover{border-color:#f5c542;background:#1a222c}
.gdbtn i{flex:none;width:19px;height:19px;border-radius:999px;background:#0a0e13;
  border:1.6px solid #f5c542;color:#ffe680;font:900 10px/16px ui-sans-serif,system-ui;
  font-style:normal;text-align:center}
.gdbtn b{flex:1;font-weight:800;color:#e8f2fb;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gdbtn u{flex:none;font-size:9.5px;color:#c9a24a;text-decoration:none;
  border:1px solid rgba(245,197,66,.35);border-radius:4px;padding:0 4px;line-height:1.55}

.flrlist{display:flex;flex-direction:column;gap:5px;margin:2px 0 6px}
.flrrow{display:flex;flex-wrap:wrap;gap:6px;font-size:11.5px;line-height:1.45}
.flrrow b{flex:none;min-width:86px;color:#cfe2f0;font-weight:800}
.flrrow span{flex:none;color:#f5c542;font-weight:800;letter-spacing:.2px}
.flrrow em{flex:1 1 100%;font-style:normal;color:#8399ac;padding-left:2px}

.bslist{display:flex;flex-direction:column;gap:4px;margin:2px 0 6px}
.bsrow{display:flex;gap:7px;font-size:11.5px;line-height:1.5}
.bsrow b{flex:none;min-width:76px;color:#cfe2f0;font-weight:800}
.bsrow span{flex:1;color:#a9bccc}
.bsrow span::before{content:"→ ";color:#f5c542;font-weight:800}

#cdesc .gfrom{display:block;margin:0 0 6px;padding:3px 7px;border-radius:6px;
  background:rgba(245,197,66,.1);border-left:2px solid #f5c542;color:#ffe680;font-size:11.5px;font-weight:700}
#cdesc .gstep{display:flex;gap:7px;margin:5px 0;align-items:flex-start}
#cdesc .gstep b{flex:none;width:17px;height:17px;border-radius:999px;background:#1d2833;
  color:#ffe680;font:900 10px/17px ui-sans-serif,system-ui;text-align:center}
#cdesc .gstep span{flex:1;color:#cfe2f0}

/* ===== 建筑入口：这栋楼哪一侧能进（方位照抄公开图文攻略原文） ===== */
.entmark{background:none!important;border:0!important}
.ent{position:absolute;left:0;top:0;width:0;height:0}
/* 【第35轮】入口＝键盘方向键「键帽」本体：圆角按键方块 + 里面一个实心三角。
   绝对不要横杠/杆/裸箭头字符（← 这类字自带一根横，看着就是横杠加箭头）。
   尺寸 24px、跟 --ms 一起缩放（和点位图标同步），中心对准标记点。 */
.ent .ekey{position:absolute;left:0;top:0;width:24px;height:24px;border-radius:6px;
  transform:translate(-50%,-50%) scale(var(--ms,1));
  background:linear-gradient(180deg,#1b4653,#0a2028 62%,#05151d);
  border:1.5px solid #7fe9ff;
  box-shadow:0 0 0 1px rgba(0,0,0,.9),0 2px 6px rgba(0,0,0,.8),0 0 7px rgba(127,233,255,.35),
             inset 0 1px 0 rgba(255,255,255,.24),inset 0 -1px 0 rgba(0,0,0,.55);
  display:flex;align-items:center;justify-content:center;cursor:pointer}
/* 键帽底座的厚度（往下多出一点，看起来是真按键而不是贴纸） */
.ent .ekey::after{content:'';position:absolute;left:-2.5px;right:-2.5px;top:2px;bottom:-4.5px;
  border-radius:8px;background:#03121a;border:1px solid rgba(0,0,0,.9);
  box-shadow:0 2px 5px rgba(0,0,0,.85);z-index:-1}
.ent .ekey i{display:block;width:12px;height:11px;background:#9ff5ff;
  clip-path:polygon(50% 0%,100% 100%,0% 100%);
  transform:rotate(var(--a,0deg));
  filter:drop-shadow(0 0 2px rgba(0,0,0,.95))}
.ent .en{position:absolute;left:0;top:13px;transform:translateX(-50%) scale(var(--ms,1));
  transform-origin:top center;white-space:nowrap;
  font-size:9.5px;font-weight:700;color:#a5f3fc;letter-spacing:.2px;display:none;
  text-shadow:0 0 3px #000,0 0 6px #000;pointer-events:none}
#map.z-mid .ent .en{display:block}

/* 【第35轮】大图映射副本：官方把一部分楼内点画在分层放大详图里（局部坐标系），
   这些点原样保留在分层图上；这份是额外映射到大图对应建筑的副本，加一圈淡绿虚线以示区分。
   副本不进右侧列表、不重复计数，但能连跑刀路线。 */
.pt.mirror::after{content:'';position:absolute;left:50%;top:50%;width:30px;height:30px;
  margin:-15px 0 0 -15px;box-sizing:border-box;border-radius:50%;
  border:1px dashed rgba(126,231,135,.5);pointer-events:none}

/* 【第39轮】详情卡跟着地图居中（桌面端地图右侧让出了 366px 给面板）
   【第45轮】排除手机横屏（高度≤560）：那种尺寸下宽度也>820，但布局是上面那套窄面板。 */
@media(min-width:821px) and (min-height:561px){
  .card{left:calc((100% - 366px)/2)}
}

/* ================= 第71轮：右栏瘦身 + 双模式 ================= */
/* 选中复活点后其余收起（老板：右栏太长） */
.spawn.folded{display:none}
#sectSpawn .spawns{grid-template-columns:1fr 1fr}
#spawnhint{font-style:normal;font-size:10px;font-weight:700;color:#7a8ea6;letter-spacing:0}
#spawnhint.on{color:#6ee7a0}

/* 推荐路线的序号：绿色，和"自己改的"黄色区分 */
.pt.cnum.rec .cn{background:#22c55e;color:#04240f;border-color:#d9ffe8;
  box-shadow:0 1px 7px rgba(34,197,94,.55)}

/* 快速搜索：右栏只留路线本身，次要面板全部收起 */
body.m-speed .pickwrap,
body.m-speed #sectCats,

body.m-speed .rstep .rsub{display:none}
body.m-speed .rstep{padding-top:6px;padding-bottom:6px}
body.m-full .routebox.show .rsuicide{display:none}

/* "还有 N 站，切常规看" */
.rstep.more{border:1px dashed #2b3a4d;background:transparent;justify-content:center;
  color:#8fa4bb;font-size:11px;font-weight:700;cursor:pointer}
.rstep.more:hover{border-color:#3f5470;color:#cfe0f2}

/* 第71轮：站名变长后在窄屏只留主名，别把顶栏挤爆 */
@media(max-width:860px){.brand{font-size:13px}.brand em{display:none}}
