/* ============================================================
 * 江湖路 · 卷轴墨韵 + 暗夜地图美学（按 UI 原型落地）
 * 配色:暖金 #c9a961 / 暖橙 #e8843e / 墨绿 #2d5a4f / 朱红 #b8412f
 *       米白 #e8e0d0 / 暗墨 #0a0d0f
 * 字体:Noto Serif SC + JetBrains Mono + Ma Shan Zheng
 * ============================================================ */
:root{
  --ink:#0a0d0f;            /* 暗墨底 */
  --ink2:#0f1418;
  --scroll:#14100c;         /* 卷轴卡 */
  --scroll-glass:rgba(var(--scroll-rgb),.82);
  --ink-rgb:10,13,15;       /* 暗墨底 RGB（供 rgba(var()) 玻璃底用） */
  --ink2-rgb:15,20,24;
  --scroll-rgb:20,16,12;
  --gold:#c9a961;           /* 暖金 */
  --gold2:#e3c987;          /* 亮金 */
  --orange:#e8843e;         /* 暖橙 */
  --moss:#2d5a4f;           /* 墨绿 */
  --red:#b8412f;            /* 朱红 */
  --paper:#e8e0d0;          /* 米白 */
  --weak:#8a7f6a;           /* 弱文 */
  --line:rgba(201,169,97,.25);
  --good:#2fd08a;
  --jam:#ffc233;
  --bad:#ff5a5f;
  --snow:#7fd0ff;
  --road:#7fd0ff;
  --purple:#a78bfa;
  /* 兼容旧别名（保留现有功能类引用） */
  --bg:var(--ink); --bg2:var(--ink2); --card:#14100c; --card2:#1f1812;
  --text:var(--paper); --text2:var(--weak); --text3:#6a5f4a;
  --accent:var(--orange); --accent2:var(--gold2);
  --radius:0;  /* 卷轴风:零圆角,锐利金边 */
}
/* 白天模式（light）：站内切换（顶栏 🌞/🌙），localStorage 记忆，独立于主站主题 */
body.jh-light{
  --ink:#f5f0e8;            /* 米白底 */
  --ink2:#ebe5d9;
  --scroll:#fffdf8;         /* 亮卷轴卡 */
  --scroll-glass:rgba(255,253,248,.92);
  --ink-rgb:245,240,232;
  --ink2-rgb:235,229,217;
  --scroll-rgb:255,253,248;
  --gold:#9a772f;           /* 深金（浅底可读） */
  --gold2:#7c5f22;
  --orange:#b05a1e;
  --paper:#2d2418;          /* 深墨字 */
  --weak:#8a7f6a;
  --snow:#1a7fb8;
  --line:rgba(154,119,47,.4);
  --bg:var(--ink); --bg2:var(--ink2); --card:#fffdf8; --card2:#f5f0e8;
  --text:var(--paper); --text2:var(--weak); --text3:#6a5f4a;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"Noto Serif SC",serif;
  background:var(--ink);color:var(--paper);
  -webkit-font-smoothing:antialiased;overflow:hidden;line-height:1.65;
  transition:background .3s,color .3s;
}
button{font:inherit;background:none;border:none;color:inherit;cursor:pointer}
input{font:inherit;border:none;outline:none;background:none;color:inherit}
em{font-style:normal}
.mono{font-family:"JetBrains Mono",monospace}
.cal{font-family:"Ma Shan Zheng",cursive}
a{text-decoration:none;color:inherit}
img{display:block;max-width:100%}

/* ============================================================
 * 顶栏 · 古塘报横幅样式
 * ============================================================ */
.topbar{
  position:fixed;top:0;left:0;right:0;height:56px;z-index:50;
  display:flex;align-items:center;gap:0;
  background:linear-gradient(180deg,rgba(var(--ink-rgb),.94),rgba(var(--ink-rgb),.7));
  backdrop-filter:blur(20px);
  border-bottom:1px solid var(--line);
  box-shadow:0 2px 12px rgba(0,0,0,.4);
}
.brand{
  flex:0 0 auto;display:flex;align-items:center;
  padding:0 18px;height:100%;
  border-right:1px solid var(--line);
}
.brand-zh{font:900 20px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:5px;text-shadow:0 1px 4px #000,0 0 14px rgba(201,169,97,.3)}
.brand em{color:var(--orange);font-style:normal}

/* 顶部导航条(地图/路书/组队/差事/背包/帮会/传闻) */
.topbar-nav{
  flex:1 1 auto;min-width:0;display:none;gap:2px;padding:0 10px;align-items:center;
  overflow-x:auto;scrollbar-width:none;
}
.topbar-nav::-webkit-scrollbar{display:none}
.topbar-nav .tab{flex-direction:row !important;gap:6px;padding:6px 10px;font-size:13px;color:var(--weak);white-space:nowrap;transition:background .15s,color .15s}
.topbar-nav .tab:hover{color:var(--paper)}
.topbar-nav .tab.on,.topbar-nav .tab.active{color:var(--gold2);background:rgba(201,169,97,.1)}

/* 右侧操作区 */
.top-actions{
  /* 窄屏适配：自身可收缩，内部 .top-tools 横滑，.top-user 头像始终常驻可见 */
  flex:0 1 auto;min-width:0;max-width:100%;
  display:flex;align-items:stretch;gap:0;
  padding:0 10px 0 6px;height:100%;
  border-left:1px solid var(--line);
}
/* 顶栏图标群：窄屏横向滚动（历史 bug：390px 下末位图标被推出屏幕点不到） */
.top-tools{
  flex:1 1 auto;min-width:0;
  display:flex;align-items:center;gap:6px;
  overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
}
.top-tools::-webkit-scrollbar{display:none}
.top-user{flex:0 0 auto}

/* 古塘报传闻横幅(地图页内顶部浮层) */
.rumor-bar{
  position:fixed;top:62px;left:12px;right:172px;z-index:30;
  height:30px;display:flex;align-items:center;
  padding:0 14px 0 0;overflow:hidden;
  border:1px solid rgba(184,65,47,.4);
  background:linear-gradient(180deg,rgba(184,65,47,.12),rgba(var(--ink-rgb),.6));
  backdrop-filter:blur(12px);
  box-shadow:0 4px 14px rgba(0,0,0,.4);
  border-radius:0;
  display:none;
}
.rumor-bar.show{display:flex}
.rumor-label{
  font:700 11px/1 "Noto Serif SC";color:var(--red);
  border:1px solid var(--red);padding:3px 7px;
  margin-right:12px;letter-spacing:2px;
  background:rgba(184,65,47,.12);flex-shrink:0;
}
.rumor-feed{flex:1;overflow:hidden;position:relative;height:18px;min-width:60px}
.rumor-track{
  position:absolute;inset:0;display:flex;align-items:center;gap:48px;
  animation:rumorScroll 50s linear infinite;white-space:nowrap;
}
.rumor-item{font:400 12px/1.6 "Noto Serif SC";color:var(--paper)}
.rumor-item em{color:var(--gold2);font-weight:700;margin:0 4px}
.rumor-item time{font-family:"JetBrains Mono";color:var(--weak);font-size:11px;margin-right:8px}
@keyframes rumorScroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}

/* 搜索框 */
.search{
  display:flex;align-items:center;gap:7px;height:36px;padding:0 12px;
  border:1px solid var(--line);background:rgba(var(--ink-rgb),.6);color:var(--weak);
  font-size:13px;transition:border-color .2s;width:100%;
}
.search:focus-within{border-color:var(--gold)}
.search input{flex:1;background:none;color:var(--paper)}

/* 顶部用户区 */
.top-user{
  display:flex;align-items:center;gap:8px;padding:0 10px;height:100%;
  cursor:pointer;transition:background .15s;
}
.top-user:hover{background:rgba(201,169,97,.06)}
.user-avatar{
  width:30px;height:30px;border-radius:50%;
  background:linear-gradient(135deg,var(--orange),var(--red));
  display:flex;align-items:center;justify-content:center;
  font:700 13px/1 "Noto Serif SC";color:#fff;border:2px solid var(--gold);
  flex-shrink:0;
}
.user-info{display:flex;flex-direction:column;gap:1px;line-height:1.2}
.user-name{font:700 13px/1 "Noto Serif SC";color:var(--paper)}
.user-title{font:400 10px/1 "Noto Serif SC";color:var(--gold)}
.user-lv{font:900 14px/1 "JetBrains Mono";color:var(--gold2);margin-left:4px}

.iconbtn{
  position:relative;width:34px;height:34px;color:var(--weak);font-size:18px;
  display:flex;align-items:center;justify-content:center;transition:color .15s;
  flex-shrink:0;
}
.iconbtn:hover{color:var(--gold2)}
.iconbtn.on{color:var(--gold2)} /* 图层切换等激活态 */
.iconbtn .dot{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--bad);box-shadow:0 0 0 2px var(--ink);display:none}
.iconbtn .dot.show{display:block;animation:rumorPulse 1.8s ease-in-out infinite}
@keyframes rumorPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}
.msg-badge{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--bad);color:#fff;font:700 9px/16px "JetBrains Mono";text-align:center;border:2px solid var(--ink)}

/* 顶部搜索弹出层(原「更多」抽屉迁移;🔍 开合) */
/* top:96 避开地图页古塘报/附近车友(62~92)与赛季条(56~86);赛季条开启时 HUD 下移到 92~122,弹层同步让位 */
.jh-search-pop{
  position:fixed;top:96px;right:12px;z-index:90;width:320px;max-width:calc(100vw - 24px);
  padding:10px;background:var(--ink2);border:1px solid var(--line);
  box-shadow:0 10px 32px rgba(0,0,0,.5);
  animation:searchPopIn .18s cubic-bezier(.2,.8,.3,1);
}
body.jh-season-on .jh-search-pop{top:126px}
.jh-search-pop[hidden]{display:none}
@keyframes searchPopIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}

.sidebar{display:none}

/* ============================================================
 * 主视图
 * ============================================================ */
#view{position:fixed;top:56px;left:0;right:0;bottom:0;overflow-y:auto;-webkit-overflow-scrolling:touch}

/* ============================================================
 * 地图 · Leaflet 暗金滤镜
 * ============================================================ */
.map-wrap{position:relative;height:100%;background:var(--ink)}
.map-wrap .leaflet-host{position:absolute;inset:0;z-index:10}
/* 路线图例 */
.map-legend{position:absolute;top:12px;right:12px;z-index:20;display:flex;flex-direction:column;gap:4px;padding:8px 10px;background:var(--scroll-glass,rgba(var(--ink2-rgb),.85));backdrop-filter:blur(20px);border:1px solid var(--gold,#c9a961);box-shadow:0 4px 16px rgba(0,0,0,.5)}
.lg-item{display:flex;align-items:center;gap:6px;font:400 10px/1 "Noto Serif SC";color:var(--paper,#e8e0d0);white-space:nowrap}
.lg-line{display:inline-block;width:18px;height:2px;border:none}
/* 路线名称标签（中点永久标签） */
.jh-route-label{background:transparent !important;border:none !important}
/* 标签容器：整体居中，标签在上方、指示线在下方（指向路线） */
.route-label-wrap{display:flex;flex-direction:column;align-items:center;gap:0}
.route-label{display:inline-block;padding:2px 10px;background:rgba(var(--ink-rgb),.82);border:1px solid var(--rc,#c9a961);color:var(--paper,#e8e0d0);font:600 11px/1.4 "Noto Serif SC",serif;white-space:nowrap;letter-spacing:1px;box-shadow:0 2px 8px rgba(0,0,0,.5);text-shadow:0 1px 2px rgba(0,0,0,.8)}
/* 标签下方的指示线：连接标签底边与路线，配色同路线 */
.route-label-tail{display:block;width:1px;height:14px;background:linear-gradient(to bottom, var(--rc,#c9a961), transparent);opacity:.85}
.leaflet-container{background:var(--ink) !important;font-family:"Noto Serif SC",serif !important}
.leaflet-tile-pane{filter:invert(1) hue-rotate(180deg) brightness(.55) saturate(.6) contrast(1.05)}
/* 卫星实景模式：瓦片不反相,保持真实色彩（深色主题下同样生效） */
body.jh-sat .leaflet-tile-pane{filter:none}
/* 世界地图（OSM/Esri）：保持正常地理色彩，避免高德暗色反相把海外底图拧花 */
body.jh-world .leaflet-tile-pane{filter:none}
.leaflet-control-attribution{background:rgba(var(--ink-rgb),.7) !important;color:#5a5040 !important;font-size:10px !important}
.leaflet-control-attribution a{color:#7a6a4a !important}
.leaflet-control-zoom{border:none !important;box-shadow:0 2px 12px rgba(0,0,0,.6) !important}
.leaflet-control-zoom a{
  background:var(--scroll-glass) !important;color:var(--gold) !important;
  border:1px solid var(--line) !important;backdrop-filter:blur(12px);
  font-weight:700;
}
.leaflet-control-zoom a:hover{background:rgba(201,169,97,.15) !important}
.leaflet-popup-content-wrapper{background:var(--scroll-glass);color:var(--paper);border:1px solid var(--gold);backdrop-filter:blur(20px);box-shadow:0 8px 32px rgba(0,0,0,.7)}
.leaflet-popup-tip{background:var(--scroll-glass);border:1px solid var(--gold)}
.leaflet-popup-content{margin:10px 12px;font-size:12.5px;line-height:1.55}
.leaflet-popup-content .mini-btn{margin-top:6px;padding:5px 10px;font-size:11.5px}

/* 节点 marker · 金圆点 */
.jh-node{background:transparent !important;border:none !important}
.jh-node-pin{
  position:relative;width:60px;text-align:center;color:var(--paper);
}
.jh-node-dot{
  width:14px;height:14px;border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#f0d090,var(--gold) 60%,#8a6f3f);
  box-shadow:0 0 0 3px rgba(201,169,97,.2),0 0 14px rgba(201,169,97,.5);
  margin:0 auto;
}
.jh-node-pin.stamped .jh-node-dot,.jh-node-pin[style*="--pc:#2FD08A"] .jh-node-dot{
  background:radial-gradient(circle at 30% 30%,#7fe8a0,#2fd08a 60%,#1a8a5a);
  box-shadow:0 0 0 3px rgba(47,208,138,.25),0 0 14px rgba(47,208,138,.6);
}
.jh-node-name{
  font:700 12px/1 "Noto Serif SC";color:var(--gold2);
  text-shadow:0 1px 4px #000,0 0 8px #000;letter-spacing:1px;margin-top:1px;
}
.jh-node-meta{font:400 10px/1 "JetBrains Mono";color:var(--weak);text-shadow:0 1px 3px #000}
.jh-merchant{position:absolute;top:-10px;right:8px;font-size:14px;cursor:pointer;filter:drop-shadow(0 2px 4px rgba(0,0,0,.6))}

/* 兼容原型新 marker 类 */
.node-pin{
  position:relative;width:14px;height:14px;border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#f0d090,var(--gold) 60%,#8a6f3f);
  box-shadow:0 0 0 3px rgba(201,169,97,.2),0 0 14px rgba(201,169,97,.5);
}
.node-pin.stamped{
  background:radial-gradient(circle at 30% 30%,#7fe8a0,#2fd08a 60%,#1a8a5a);
  box-shadow:0 0 0 3px rgba(47,208,138,.25),0 0 14px rgba(47,208,138,.6);
}
.node-label{
  position:absolute;left:50%;bottom:22px;transform:translateX(-50%);
  white-space:nowrap;font:700 12px/1 "Noto Serif SC";
  color:var(--gold2);text-shadow:0 1px 4px #000,0 0 8px #000;
  pointer-events:none;letter-spacing:1px;
}
.node-alt{
  position:absolute;left:50%;top:18px;transform:translateX(-50%);
  white-space:nowrap;font:400 10px/1 "JetBrains Mono";
  color:var(--weak);text-shadow:0 1px 3px #000;pointer-events:none;
}

/* POI marker */
.jh-poi{background:transparent !important;border:none !important}
.jh-poi-i{font-size:18px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.7))}

/* 行者 pin */
.jh-trav{background:transparent !important;border:none !important}
.jh-trav-i{
  width:28px;height:28px;border-radius:50% 50% 50% 0;
  background:hsl(var(--hue,200) 60% 50%);border:2px solid #0a0d0f;
  transform:rotate(-45deg);display:grid;place-items:center;
  box-shadow:0 4px 10px rgba(0,0,0,.5);font-size:14px;
}
.traveler-pin{
  cursor:pointer;animation:bob 2.4s ease-in-out infinite;
  width:28px;height:28px;border-radius:50%;
  border:2px solid #fff;
  box-shadow:0 0 0 2px rgba(0,0,0,.5),0 4px 12px rgba(0,0,0,.6);
  display:flex;align-items:center;justify-content:center;font-size:14px;
}
.traveler-pin:nth-child(odd){animation-duration:3.1s}
.traveler-pin:nth-child(3n){animation-duration:2.0s}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
.map-wrap:hover .traveler-pin{animation-play-state:paused}

/* 行者活动细节模式（地图放大 ≥z11）：大头像 + 动作气泡（app.js renderTravelerPins） */
.jh-trav-detail{overflow:visible !important}
.jh-trav-detail .traveler-pin.lg{
  position:absolute;bottom:0;left:50%;transform:translateX(-50%);
  width:34px;height:34px;font-size:17px;animation:none;
}
.jh-trav-detail .traveler-pin.lg.bob{animation:bob 1.6s ease-in-out infinite}
.jh-trav-detail .trav-ring{
  position:absolute;inset:-5px;border-radius:50%;
  border:2px solid rgba(255,255,255,.55);animation:travPulse 2.2s ease-out infinite;
}
@keyframes travPulse{0%{transform:scale(.75);opacity:.9}70%{transform:scale(1.25);opacity:0}100%{opacity:0}}
.jh-trav-detail .trav-act{
  position:absolute;top:0;left:50%;transform:translateX(-50%);
  white-space:nowrap;font-size:11px;line-height:1;padding:4px 8px;border-radius:8px;
  background:var(--ink2,#14181d);color:var(--paper,#f3efe6);border:1px solid var(--line,#3a4149);
  box-shadow:0 3px 10px rgba(0,0,0,.45);pointer-events:none;
}
.jh-trav-detail .trav-act.pop{animation:travPop .45s ease}
@keyframes travPop{0%{transform:translateX(-50%) translateY(3px);opacity:.2}100%{transform:translateX(-50%) translateY(0);opacity:1}}

/* 我的 pin */
.jh-me{background:transparent !important;border:none !important}
.jh-me-i{
  width:24px;height:24px;border-radius:50%;background:var(--jam);color:#3A2A00;
  border:2px solid #0a0d0f;font-size:10px;font-weight:800;
  display:grid;place-items:center;box-shadow:0 4px 10px rgba(255,194,51,.5);
}

/* 路线折线双层已由 JS 渲染（暗灰底+橙色虚线） */

/* 地图筛选条 */
.filter-bar{position:absolute;top:42px;left:12px;right:12px;z-index:16;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:0}
.filter-bar::-webkit-scrollbar{display:none}
.fchip{
  flex:0 0 auto;padding:6px 12px;border:1px solid var(--line);
  background:var(--scroll-glass);backdrop-filter:blur(20px);
  font:400 12px/1 "Noto Serif SC";color:var(--paper);
}
.fchip.on{border-color:var(--gold);color:var(--gold2);background:rgba(201,169,97,.1)}
.nearby-pill{
  position:fixed;top:62px;right:12px;z-index:31;
  height:30px;padding:0 12px;display:flex;align-items:center;
  border:1px solid var(--snow);
  background:rgba(127,208,255,.18);backdrop-filter:blur(20px);
  color:var(--snow);font:700 12px/1 "Noto Serif SC";
  box-shadow:0 6px 18px rgba(0,0,0,.4);
  cursor:pointer;
}

/* 路线筛选 chip · 卷轴风 */
.route-shelf{
  position:absolute;left:0;right:0;bottom:0;z-index:15;
  background:linear-gradient(180deg,rgba(var(--ink-rgb),0),rgba(var(--ink-rgb),.96) 30%);
  padding:18px 14px calc(78px + env(safe-area-inset-bottom));
}
.shelf-label{font:400 12px/1 "Noto Serif SC";color:var(--weak);margin-bottom:8px;letter-spacing:1px}
.route-scroll{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none}
.route-scroll::-webkit-scrollbar{display:none}
.route-card{
  position:relative;flex:0 0 200px;padding:12px 14px;
  background:var(--scroll-glass);border:1px solid var(--line);
  backdrop-filter:blur(20px);cursor:pointer;
  transition:transform .18s cubic-bezier(.2,.8,.3,1),box-shadow .18s,border-color .18s;
}
.route-card:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(0,0,0,.4);border-color:var(--gold)}
.route-card:active{transform:scale(.97)}
.rc-name{font:700 14.5px/1.2 "Noto Serif SC";color:var(--paper)}
.rc-meta{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:4px}
.rc-tag{display:inline-block;margin-top:8px;font:400 10.5px/1 "JetBrains Mono";color:var(--gold2);border:1px solid var(--gold);padding:3px 8px}

/* 路线 chip（地图顶部筛选） */
.route-chip{
  background:var(--scroll-glass);border:1px solid var(--line);
  backdrop-filter:blur(20px);padding:8px 14px;text-decoration:none;
  font:400 12px/1 "Noto Serif SC";color:var(--paper);transition:.2s;cursor:pointer;
}
.route-chip.active,.route-chip.on{border-color:var(--gold);color:var(--gold2);background:rgba(201,169,97,.1)}
.route-chip:hover{border-color:var(--gold)}

/* FAB 打卡路况 */
.fab{
  position:fixed;right:18px;bottom:96px;z-index:25;width:58px;height:58px;
  border-radius:50%;background:linear-gradient(135deg,var(--gold2),var(--orange));
  color:#221303;font-size:28px;font-weight:900;display:grid;place-items:center;
  box-shadow:0 10px 26px rgba(232,132,62,.5);
}
.fab:active{transform:scale(.93)}

/* 底部 Tab */
.tabbar{
  position:fixed;bottom:0;left:0;right:0;z-index:30;height:60px;display:flex;
  background:rgba(var(--ink-rgb),.95);backdrop-filter:blur(20px);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);
}
.tab{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;font:400 10.5px/1 "Noto Serif SC";color:var(--weak);
}
.tab.on,.tab.active{color:var(--gold2)}
.tab .ic{font-size:18px}

/* ============================================================
 * 左下英雄帖等级卡（地图页）
 * ============================================================ */
.hero-card{
  position:fixed;left:20px;bottom:20px;z-index:1000;width:340px;
  background:var(--scroll-glass);border:1px solid var(--gold);
  backdrop-filter:blur(20px);
  box-shadow:0 8px 40px rgba(0,0,0,.6),inset 0 1px 0 rgba(201,169,97,.2);
  pointer-events:auto;
}
.hero-card[hidden],.hero-card[style*="display:none"]{display:none !important}
.hero-head{display:flex;align-items:stretch;border-bottom:1px solid var(--line)}
.hero-lv{
  width:80px;background:linear-gradient(135deg,rgba(201,169,97,.15),rgba(184,65,47,.1));
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:14px 0;border-right:1px solid var(--line);
}
.hero-lv-num{font:900 34px/1 "JetBrains Mono";color:var(--gold2);text-shadow:0 0 12px rgba(201,169,97,.4)}
.hero-lv-label{font:400 10px/1 "Noto Serif SC";color:var(--weak);letter-spacing:3px;margin-top:4px}
.hero-info{flex:1;padding:12px 14px}
.hero-title{font:700 16px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.hero-name{font:400 12px/1.4 "Noto Serif SC";color:var(--paper);margin-top:4px}
.hero-stats{display:flex;gap:14px;margin-top:8px}
.hero-stats .stat{display:flex;flex-direction:column}
.hero-stats .stat-num{font:700 13px/1 "JetBrains Mono";color:var(--paper)}
.hero-stats .stat-num.fame{color:var(--orange)}
.hero-stats .stat-num.road{color:var(--snow)}
.hero-stats .stat-label{font:400 9px/1 "Noto Serif SC";color:var(--weak);margin-top:2px}
.hero-exp{padding:12px 14px;border-top:1px solid var(--line)}
.hero-exp .exp-row{display:flex;justify-content:space-between;font:400 10px/1 "JetBrains Mono";color:var(--weak);margin-bottom:5px}
.hero-exp .exp-bar,.hero-exp .lv-bar{height:5px;background:rgba(255,255,255,.06);position:relative;overflow:hidden}
.hero-exp .exp-fill,.hero-exp .lv-fill{
  position:absolute;inset:0;
  background:linear-gradient(90deg,var(--red),var(--orange),var(--gold2));
  box-shadow:0 0 8px rgba(201,169,97,.5);
}
.hero-foot{display:flex;gap:0;border-top:1px solid var(--line)}
.hero-foot a,.hero-foot button{
  flex:1;text-align:center;padding:9px 0;border-right:1px solid var(--line);
  font:400 11px/1 "Noto Serif SC";color:var(--weak);transition:.2s;cursor:pointer;background:none;
}
.hero-foot a:last-child,.hero-foot button:last-child{border-right:none}
.hero-foot a:hover,.hero-foot button:hover{color:var(--gold2);background:rgba(201,169,97,.06)}

/* ============================================================
 * 右下工具格
 * ============================================================ */
.tools{
  position:fixed;right:12px;top:94px;z-index:29;
  display:grid;grid-template-columns:repeat(3,1fr);gap:6px;width:210px;
}
.tools .tool{
  background:var(--scroll-glass);border:1px solid var(--line);
  backdrop-filter:blur(20px);padding:12px 8px;text-align:center;
  text-decoration:none;transition:.2s;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:4px;
}
.tools .tool:hover{border-color:var(--gold);background:rgba(201,169,97,.08)}
.tools .tool-ic,.tools .ti{font-size:18px;display:block}
.tools .tool-tx{font:400 11px/1 "Noto Serif SC";color:var(--paper)}
.tools .tool.alert{border-color:var(--red)}
.tools .tool.alert .tool-ic,.tools .tool.alert .ti{color:var(--red)}

/* SOS 大红圆按钮 */
.sos-btn{
  position:fixed;right:20px;bottom:270px;z-index:1001;
  width:60px;height:60px;border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#e85a5a,var(--red));
  border:2px solid #fff;color:#fff;
  font:900 16px/1 "Noto Serif SC";letter-spacing:1px;
  box-shadow:0 6px 24px rgba(184,65,47,.5);
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  animation:sosPulse 2s ease-in-out infinite;
}
@keyframes sosPulse{0%,100%{box-shadow:0 6px 24px rgba(184,65,47,.5)}50%{box-shadow:0 6px 36px rgba(184,65,47,.8),0 0 0 8px rgba(184,65,47,.15)}}

/* ============================================================
 * 节点叙事浮层 · .scene-pop
 * ============================================================ */
.scene-pop{
  position:fixed;z-index:60;width:360px;
  background:var(--scroll-glass);border:1px solid var(--gold);
  backdrop-filter:blur(24px);box-shadow:0 16px 60px rgba(0,0,0,.7);
  transform:translate(-50%,calc(-100% - 20px));display:none;
}
.scene-pop.show{display:block;animation:popIn .3s ease}
@keyframes popIn{from{opacity:0;transform:translate(-50%,calc(-100% - 10px))}to{opacity:1;transform:translate(-50%,calc(-100% - 20px))}}
.scene-pop .scene-head,.scene-head{
  padding:16px 18px 10px;border-bottom:1px solid var(--line);position:relative;
}
.scene-close{
  position:absolute;right:12px;top:12px;width:24px;height:24px;
  border:1px solid var(--line);background:none;color:var(--weak);cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-size:14px;
}
.scene-close:hover{color:var(--paper);border-color:var(--paper)}
.scene-pop .scene-name{font:900 28px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:4px}
.scene-pop .scene-meta{
  display:flex;gap:14px;margin-top:8px;
  font:400 11px/1 "JetBrains Mono";color:var(--weak);
}
.scene-pop .scene-meta span em,.scene-meta span em{color:var(--paper);font-style:normal;margin-left:4px}
.scene-mood{
  display:inline-block;margin-top:8px;
  font:400 12px/1 "Noto Serif SC";color:var(--moss);
  border-left:2px solid var(--moss);padding-left:8px;
}
/* 兼容 sheet 内 scene-mood */
.scene-sheet .scene-mood{display:inline-block;font-size:12px;margin-bottom:8px;color:var(--moss);background:rgba(45,90,79,.15);padding:3px 10px;border-left:2px solid var(--moss)}
.scene-pop .scene-body,.scene-body{padding:14px 18px}
.scene-desc{
  font:400 14px/1.8 "Noto Serif SC";color:var(--paper);text-align:justify;
}
/* 兼容 sheet 内 scene-desc */
.scene-sheet .scene-desc{font:400 14px/1.75;color:var(--paper);margin:8px 0 10px;padding:10px 12px;border-left:3px solid var(--gold);background:rgba(201,169,97,.06);font-style:italic}
.scene-merchants{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
.scene-merchants-label{font:400 11px/1 "Noto Serif SC";color:var(--weak);margin-bottom:8px;letter-spacing:2px}
.merchant-row{display:flex;align-items:center;gap:10px;padding:6px 0}
.merchant-ic{font-size:18px}
.merchant-info{flex:1}
.merchant-name{font:500 13px/1.2 "Noto Serif SC";color:var(--paper)}
.merchant-desc{font:400 11px/1.2 "Noto Serif SC";color:var(--weak);margin-top:2px}
.scene-cta{
  display:block;padding:12px;margin:0 18px 16px;
  background:linear-gradient(90deg,var(--red),var(--orange));
  color:#fff;text-align:center;text-decoration:none;
  font:700 14px/1 "Noto Serif SC";letter-spacing:3px;cursor:pointer;border:none;
}
.scene-cta.stamped{background:rgba(47,208,138,.15);color:var(--good);border:1px solid var(--good)}

/* 高反预警色条 */
.alt-bar{
  height:3px;margin:8px 0 0;
  background:linear-gradient(90deg,var(--good) 0%,var(--good) 33%,var(--jam) 33%,var(--jam) 66%,var(--bad) 66%);
}

/* ============================================================
 * 列表/详情页通用
 * ============================================================ */
.page{padding:18px 20px 100px;max-width:1200px;margin:0 auto}
.page h2{font:900 22px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:4px;margin:6px 0 18px}
.page-head{display:flex;align-items:center;justify-content:space-between;margin:6px 0 18px;gap:10px}
.page-head h2{margin:0}
.list-card{
  background:var(--scroll-glass);border:1px solid var(--line);
  backdrop-filter:blur(10px);padding:16px;margin-bottom:10px;
  cursor:pointer;transition:transform .18s,border-color .18s,box-shadow .18s;
}
.list-card:hover{transform:translateY(-1px);border-color:var(--gold);box-shadow:0 8px 22px rgba(0,0,0,.4)}
.list-card:active{opacity:.85}
.lc-title{font:700 15px/1.2 "Noto Serif SC";color:var(--paper)}
.lc-meta{font:400 12px/1.6 "Noto Serif SC";color:var(--weak);margin-top:5px}
.lc-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
.chip{font:400 11px/1.6 "Noto Serif SC";color:var(--weak);background:rgba(var(--ink-rgb),.6);border:1px solid var(--line);padding:3px 9px}
.chip.hot{color:var(--gold2);border-color:var(--gold);background:rgba(201,169,97,.1)}

/* mini-btn */
.mini-btn{
  padding:8px 14px;border:1px solid var(--gold);color:var(--gold2);
  background:rgba(201,169,97,.06);font:400 13px/1 "Noto Serif SC";font-weight:700;
  white-space:nowrap;transition:transform .15s,background .15s,filter .15s;
}
.mini-btn:hover{background:rgba(201,169,97,.18)}
.mini-btn:active{transform:scale(.95);filter:brightness(.95)}
.mini-btn:disabled{opacity:.6;cursor:default}

/* 路线详情 */
.hero{padding:6px 16px 14px}
.hero h1{font:900 22px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.hero .sub{font:400 13px/1.6 "Noto Serif SC";color:var(--weak);margin-top:6px}
.stat-row{display:flex;gap:10px;margin-top:14px}
.stat-row .stat,.stat{
  flex:1;background:var(--scroll-glass);border:1px solid var(--line);
  padding:10px;text-align:center;display:flex;flex-direction:column;
}
.stat-row .stat b,.stat b{font:700 18px/1 "JetBrains Mono";color:var(--gold2)}
.stat-row .stat span,.stat span{font:400 11px/1 "Noto Serif SC";color:var(--weak);margin-top:4px}

.sec{
  padding:6px 16px 4px;font:700 14px/1 "Noto Serif SC";color:var(--gold2);
  margin-top:14px;letter-spacing:2px;
}
.seg{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.seg .day{flex:0 0 44px;height:44px;background:rgba(201,169,97,.12);display:grid;place-items:center;font:700 13px/1 "JetBrains Mono";color:var(--gold2);border:1px solid var(--line)}
.seg .body{flex:1}
.seg .t{font:600 14px/1.4 "Noto Serif SC";color:var(--paper)}
.seg .m{font:400 12px/1.6 "Noto Serif SC";color:var(--weak);margin-top:3px}
.poi{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}

/* 弹层 sheet */
.sheet-mask{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:40;opacity:0;pointer-events:none;transition:opacity .25s}
.sheet-mask.show{opacity:1;pointer-events:auto}
.sheet{
  position:fixed;left:50%;transform:translateX(-50%) translateY(100%);bottom:0;
  width:100%;max-width:480px;z-index:41;
  background:var(--ink2);border:1px solid var(--gold);border-bottom:none;
  padding:14px 18px calc(20px + env(safe-area-inset-bottom));
  transition:transform .28s cubic-bezier(.2,.8,.3,1);
}
.sheet.show{transform:translateX(-50%) translateY(0)}
.grab{width:40px;height:4px;background:var(--line);margin:0 auto 14px}
.sheet h3{font:700 16px/1 "Noto Serif SC";color:var(--gold2);margin-bottom:12px;letter-spacing:1px}
.type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:10px 0 14px}
.type-pick{padding:14px 6px;border:1px solid var(--line);background:var(--scroll-glass);font:400 13px/1 "Noto Serif SC";text-align:center;cursor:pointer}
.type-pick.on{border-color:var(--gold);background:rgba(201,169,97,.12);color:var(--gold2)}
.tinput{
  width:100%;min-height:70px;resize:none;
  background:rgba(var(--ink-rgb),.6);border:1px solid var(--line);
  padding:12px;font:400 14px/1.5 "Noto Serif SC";color:var(--paper);
}
.tinput.field{height:auto;min-height:44px}
.field{
  width:100%;height:44px;background:rgba(var(--ink-rgb),.6);
  border:1px solid var(--line);padding:0 12px;
  font:400 14px/1 "Noto Serif SC";color:var(--paper);
}
.done-btn{
  width:100%;height:46px;
  background:linear-gradient(90deg,var(--red),var(--orange));
  color:#fff;font:700 14px/1 "Noto Serif SC";letter-spacing:2px;
  margin-top:14px;transition:transform .15s,filter .15s,box-shadow .15s;
}
.done-btn:hover{filter:brightness(1.08);box-shadow:0 8px 22px rgba(232,132,62,.3)}
.done-btn:active{transform:scale(.97);filter:brightness(.95)}
.close-x{position:absolute;top:14px;right:16px;color:var(--weak);font-size:20px}
.close-x:hover{color:var(--paper)}

#toast{
  position:fixed;left:50%;bottom:110px;transform:translateX(-50%) translateY(20px);
  background:rgba(var(--ink-rgb),.95);border:1px solid var(--line);padding:10px 18px;
  font:400 13px/1.5 "Noto Serif SC";color:var(--paper);
  opacity:0;transition:.25s;z-index:60;pointer-events:none;
}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

.empty{padding:60px 20px;text-align:center;color:var(--weak);font:400 13px/1.6 "Noto Serif SC"}
.loading{padding:40px;text-align:center;color:var(--weak)}

/* 路书复制行 */
.route-fork-row{margin-top:10px;display:flex;align-items:center}
.ghost-btn{
  display:block;width:100%;padding:10px;
  background:transparent;color:var(--weak);
  border:1px dashed var(--line);font:400 13px/1 "Noto Serif SC";cursor:pointer;
}
.ghost-btn:hover{color:var(--gold2);border-color:var(--gold)}

/* 打卡照片墙 */
.stamp-photo-wall{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:0 16px 12px}
.stamp-photo{position:relative;display:block;aspect-ratio:1;overflow:hidden;background:var(--scroll-glass);border:1px solid var(--line)}
.stamp-photo img{width:100%;height:100%;object-fit:cover;transition:transform .25s}
.stamp-photo:hover img{transform:scale(1.06)}
.sp-author{position:absolute;bottom:0;left:0;right:0;padding:3px 6px;font-size:9.5px;color:#fff;background:linear-gradient(0deg,rgba(0,0,0,.7),transparent);text-align:left}

.my-stamp-photo{padding:0 16px 8px;display:flex;align-items:center;gap:8px;font:400 12px/1 "Noto Serif SC";color:var(--weak)}

/* 视频卡 */
.video-list{display:flex;flex-direction:column;gap:8px;padding:0 16px 12px}
.video-card{display:flex;gap:10px;padding:8px;background:var(--scroll-glass);border:1px solid var(--line);color:inherit;transition:border-color .18s}
.video-card:hover{border-color:var(--gold)}
.vc-cover{flex:0 0 80px;height:50px;background-size:cover;background-position:center;background-color:var(--ink);display:grid;place-items:center}
.vc-cover.vc-def{font-size:22px}
.vc-body{flex:1;min-width:0}
.vc-title{font:500 13px/1.4 "Noto Serif SC";color:var(--paper);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.vc-meta{font:400 10.5px/1 "JetBrains Mono";color:var(--weak);margin-top:4px}

/* ============================================================
 * MUD 化:节点卡 + 场景叙事 + 历程 + 关系
 * ============================================================ */
.node-card{
  background:var(--scroll-glass);border:1px solid var(--line);
  border-left:3px solid var(--gold);padding:12px 14px;margin:8px 0;
  cursor:pointer;transition:border-color .15s,transform .15s,box-shadow .15s;
}
.node-card:hover{transform:translateY(-1px);border-color:var(--gold);box-shadow:0 8px 22px rgba(0,0,0,.4)}
.node-card:active{transform:scale(.985);border-color:var(--gold2)}
.nc-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.nc-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.nc-alt{font:400 11px/1 "JetBrains Mono";color:var(--weak);margin-left:4px}
.nc-desc{font:400 12.5px/1.6 "Noto Serif SC";color:var(--weak);margin-top:6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nc-hint{font:400 11px/1 "Noto Serif SC";color:var(--weak);margin-top:6px}

.scene-sheet{padding:4px 0 8px}
.scene-sheet .scene-head{font:700 17px/1 "Noto Serif SC";color:var(--gold2);margin-bottom:6px;letter-spacing:1px}
.scene-meta{font:400 12px/1 "Noto Serif SC";color:var(--weak);margin:8px 0}
.scene-actions{margin:10px 0 6px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* 个人江湖历程时间线（卷轴风） */
.timeline,.log-list{position:relative;padding-left:28px;max-width:760px;margin:0 auto}
.timeline::before,.log-list::before{
  content:'';position:absolute;left:10px;top:0;bottom:0;width:1px;background:var(--line);
}
.log,.log-row{position:relative;padding:0 0 22px 20px;display:flex;gap:12px}
.log::before,.log-row::before{
  content:'';position:absolute;left:-22px;top:4px;width:12px;height:12px;border-radius:50%;
  border:2px solid;background:var(--ink);
}
.log.arrive::before,.log-row[data-ltype="arrive"]::before{border-color:var(--snow)}
.log.checkin::before,.log-row[data-ltype="checkin"]::before{border-color:var(--good)}
.log.tip::before,.log-row[data-ltype="tip"]::before{border-color:var(--gold)}
.log.quest::before,.log-row[data-ltype="quest"]::before{border-color:var(--jam)}
.log.rescue::before,.log-row[data-ltype="rescue"]::before{border-color:var(--red)}
.log.encounter::before,.log-row[data-ltype="encounter"]::before{border-color:var(--purple);border-radius:0;transform:rotate(45deg)}
.log-time,.log-row .log-meta{font:400 10px/1 "JetBrains Mono";color:var(--weak);margin-bottom:4px}
.log-text,.log-row .log-text{font:400 14px/1.6 "Noto Serif SC";color:var(--paper);word-break:break-word}
.log-text em,.log-row .log-text em{color:var(--gold2);font-weight:700}
.log-text .tag,.log-row .tag{font-size:11px;padding:2px 6px;margin-right:6px;border:1px solid}
.log.arrive .tag,.log-row[data-ltype="arrive"] .tag{color:var(--snow);border-color:var(--snow)}
.log.checkin .tag,.log-row[data-ltype="checkin"] .tag{color:var(--good);border-color:var(--good)}
.log.tip .tag,.log-row[data-ltype="tip"] .tag{color:var(--gold);border-color:var(--gold)}
.log.quest .tag,.log-row[data-ltype="quest"] .tag{color:var(--jam);border-color:var(--jam)}
.log.rescue .tag,.log-row[data-ltype="rescue"] .tag{color:var(--red);border-color:var(--red)}
.log.encounter .tag,.log-row[data-ltype="encounter"] .tag{color:var(--purple);border-color:var(--purple)}
.log-ic{flex:0 0 28px;height:28px;border-radius:50%;background:rgba(201,169,97,.12);display:grid;place-items:center;font-size:14px;border:1px solid var(--line)}
.log-body{flex:1;min-width:0}

/* 江湖关系卡 · 5 分组色 */
.relation-card{
  display:flex;align-items:center;gap:12px;padding:12px 14px;
  background:var(--scroll-glass);border:1px solid var(--line);
  margin-bottom:8px;transition:transform .18s,border-color .18s,box-shadow .18s;
}
.relation-card:hover{transform:translateY(-1px);border-color:var(--gold);box-shadow:0 8px 22px rgba(0,0,0,.4)}
.relation-card.pending{border-color:var(--jam);background:rgba(255,194,51,.06)}
.rc-ic{flex:0 0 30px;font-size:22px;text-align:center}
.rc-body{flex:1;min-width:0}
.rc-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.rc-type{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:2px}
.rc-break{flex:0 0 auto;font:400 12px/1 "Noto Serif SC";color:var(--bad);padding:6px 10px;background:rgba(255,90,95,.1);border:1px solid rgba(255,90,95,.4);cursor:pointer}
.rc-break:active{opacity:.7}

.rel-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;max-width:760px;margin:0 auto}
.rel-group{border:1px solid var(--line);padding:14px;background:var(--scroll-glass)}
.rel-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.rel-ic{font-size:18px}
.rel-title{font:700 14px/1 "Noto Serif SC";letter-spacing:2px}
.rel-count{font:400 11px/1 "JetBrains Mono";color:var(--weak);margin-left:auto}
.rel-list{display:flex;flex-direction:column;gap:8px}
.rel-item{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px dashed var(--line)}
.rel-item:last-child{border-bottom:none}
.rel-avatar{
  width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  font:700 11px/1 "Noto Serif SC";color:#fff;border:1px solid var(--line);
}
.rel-name{flex:1;font:500 12px/1 "Noto Serif SC";color:var(--paper)}
.rel-since{font:400 9px/1 "JetBrains Mono";color:var(--weak)}

.rel-group.sworn .rel-title{color:var(--red)}
.rel-group.sworn .rel-avatar{background:linear-gradient(135deg,var(--red),var(--orange))}
.rel-group.road .rel-title,.rel-group.road_friend .rel-title{color:var(--gold)}
.rel-group.road .rel-avatar,.rel-group.road_friend .rel-avatar{background:linear-gradient(135deg,var(--gold),var(--orange))}
.rel-group.brother .rel-title{color:var(--jam)}
.rel-group.brother .rel-avatar{background:linear-gradient(135deg,var(--jam),var(--gold))}
.rel-group.master .rel-title,.rel-group.apprentice .rel-title{color:var(--good)}
.rel-group.master .rel-avatar,.rel-group.apprentice .rel-avatar{background:linear-gradient(135deg,var(--good),var(--moss))}
.rel-group.rival .rel-title{color:var(--bad)}
.rel-group.rival .rel-avatar{background:linear-gradient(135deg,var(--bad),var(--red))}

/* 行者卡关系区 */
.t-relation{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 12px;background:rgba(201,169,97,.06);border:1px solid var(--line);margin:6px 0 10px;font:400 13px/1.6 "Noto Serif SC";color:var(--paper)}
.t-relation .muted{color:var(--weak);font-size:12px}
.t-relation b{color:var(--gold2)}
.relation-now{font:400 13px/1.5 "Noto Serif SC";color:var(--weak);background:var(--scroll-glass);border:1px solid var(--line);padding:8px 10px;margin:6px 0 10px}

/* ============================================================
 * P1:成长等级 + 节点奇遇
 * ============================================================ */
.level-card{
  background:
    radial-gradient(circle at 80% 20%,rgba(201,169,97,.12),transparent 50%),
    radial-gradient(circle at 20% 80%,rgba(184,65,47,.08),transparent 50%),
    var(--scroll-glass);
  border:1px solid var(--gold);backdrop-filter:blur(20px);
  box-shadow:0 8px 40px rgba(0,0,0,.5),inset 0 1px 0 rgba(201,169,97,.2);
  padding:12px 14px;margin:8px 0 4px;overflow:hidden;
  position:relative;
}
.level-card::before{
  content:'';position:absolute;inset:0;
  background-image:repeating-linear-gradient(45deg,rgba(201,169,97,.02) 0 2px,transparent 2px 12px);
  pointer-events:none;
}
.lv-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px;position:relative}
.lv-num{font:900 18px/1 "JetBrains Mono";color:var(--gold2);letter-spacing:1px;text-shadow:0 0 12px rgba(201,169,97,.4)}
.lv-title-badge{font:400 12px/1 "Noto Serif SC";color:var(--gold2);background:rgba(201,169,97,.12);padding:3px 10px;border:1px solid var(--gold)}
.lv-fame{margin-left:auto;font:400 12px/1 "Noto Serif SC";color:var(--orange)}
.lv-bar-wrap{margin-top:4px;position:relative}
.lv-bar{height:6px;background:rgba(255,255,255,.06);overflow:hidden;position:relative}
.lv-fill{height:100%;background:linear-gradient(90deg,var(--red),var(--orange),var(--gold2));transition:width .4s;box-shadow:0 0 8px rgba(201,169,97,.5)}
.lv-label{display:flex;justify-content:space-between;font:400 10px/1 "JetBrains Mono";color:var(--weak);margin-top:4px}
.lv-label em{color:var(--gold2);font-style:normal}

/* 奇遇录 */
.enc-list{padding:0 16px;max-width:760px;margin:0 auto}
.enc-row{
  display:flex;gap:12px;padding:12px 14px;
  background:var(--scroll-glass);border:1px solid var(--line);
  border-left:3px solid var(--weak);margin-bottom:8px;
}
.enc-ic{flex:0 0 28px;height:28px;display:grid;place-items:center;font-size:16px}
.enc-body{flex:1;min-width:0}
.enc-title{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.enc-text{font:400 12.5px/1.6 "Noto Serif SC";color:var(--weak);margin-top:4px}
.enc-meta{font:400 11px/1 "JetBrains Mono";color:var(--weak);margin-top:5px}
.enc-deltas{margin-top:6px;display:flex;gap:6px;flex-wrap:wrap}
.enc-delta{font:400 11px/1 "JetBrains Mono";color:var(--gold2);background:rgba(201,169,97,.08);padding:2px 8px;border:1px solid var(--line)}

.enc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:0 16px 12px}
.enc{border:1px solid var(--line);padding:14px 12px;text-align:center;background:var(--scroll-glass)}
.enc.rare{border-color:var(--purple);background:rgba(167,139,250,.06)}
.enc-ic{font-size:28px;margin-bottom:6px}
.enc-name{font:700 13px/1.2 "Noto Serif SC";color:var(--paper)}
.enc.rare .enc-name{color:#c4b5fd}
.enc-meta{font:400 10px/1 "JetBrains Mono";color:var(--weak);margin-top:6px}

/* 奇遇 sheet */
.encounter-sheet{text-align:center;padding:8px 4px 4px}
.enc-big-ic{font-size:48px;margin:8px 0 10px;line-height:1;filter:drop-shadow(0 0 18px rgba(201,169,97,.5))}
.enc-big-title{font:900 18px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.enc-big-label{font:400 12px/1 "Noto Serif SC";margin-top:4px;opacity:.85}
.enc-big-text{font:400 13.5px/1.7 "Noto Serif SC";color:var(--weak);margin:10px 12px;padding:10px 12px;background:var(--scroll-glass);font-style:italic}
.enc-big-deltas{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:10px 0}
.enc-level-up{margin:10px 0;padding:10px;background:rgba(201,169,97,.12);color:var(--gold2);font:700 14px/1 "Noto Serif SC"}

/* ============================================================
 * P2:帮会 + 江湖传闻
 * ============================================================ */
.clan-card{display:flex;gap:14px;align-items:flex-start}
.clan-card .cl-ic{flex:0 0 44px;height:44px;border:1px solid var(--gold);background:rgba(201,169,97,.12);display:grid;place-items:center;font-size:24px}
.clan-card .cl-body{flex:1;min-width:0}

.clan-detail{padding-top:4px;max-width:1200px;margin:0 auto}
.clan-hero{display:flex;align-items:center;gap:16px;padding:6px 16px 14px}
.clan-hero .ch-ic{
  width:64px;height:64px;border:2px solid var(--gold);
  background:radial-gradient(circle,rgba(201,169,97,.15),transparent);
  display:grid;place-items:center;font-size:34px;
}
.clan-hero .ch-head{flex:1;min-width:0}
.clan-hero h1{font:900 22px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.clan-hero .sub{font:400 13px/1.6 "Ma Shan Zheng";color:var(--moss);margin-top:5px;font-size:16px}

.clan-member-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.clan-member-row:last-child{border-bottom:none}
.clan-member-row.pending{background:rgba(255,194,51,.06);padding:12px 10px;margin:0 -10px}
.cmr-avatar{flex:0 0 36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--orange),var(--red));color:#fff;display:grid;place-items:center;font:700 16px/1 "Noto Serif SC"}
.cmr-body{flex:1;min-width:0}
.cmr-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.cmr-meta{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:3px}
.cmr-role{font:400 10.5px/1 "Noto Serif SC";color:var(--weak);background:rgba(var(--ink-rgb),.6);padding:2px 8px;border:1px solid var(--line);margin-left:6px}
.cmr-role.role-admin{color:var(--gold2);border-color:var(--gold)}
.cmr-role.role-elder{color:var(--jam);border-color:var(--jam)}

.my-clan-card{
  display:flex;align-items:center;gap:12px;padding:12px 14px;
  background:var(--scroll-glass);border:1px solid var(--line);
  margin:8px 0 4px;cursor:pointer;transition:transform .18s,border-color .18s;
}
.my-clan-card:hover{transform:translateY(-1px);border-color:var(--gold)}
.my-clan-card .mcc-ic{flex:0 0 36px;height:36px;background:rgba(201,169,97,.12);border:1px solid var(--gold);display:grid;place-items:center;font-size:20px}
.my-clan-card .mcc-body{flex:1;min-width:0}
.my-clan-card .mcc-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.my-clan-card .mcc-meta{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:3px}
.my-clan-card .mcc-go{flex:0 0 16px;color:var(--weak);font-size:18px;text-align:right}

/* 帮会网格 · 原型样式 */
.clans-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;max-width:1200px;margin:0 auto}
.clan-card.proto-card{
  border:1px solid var(--gold);padding:0;overflow:hidden;
  background:var(--scroll-glass);backdrop-filter:blur(10px);
  display:flex;flex-direction:column;cursor:pointer;
}
.clan-card.proto-card .clan-head{
  padding:16px 18px;display:flex;align-items:center;gap:12px;
  border-bottom:1px solid var(--line);
  background:linear-gradient(135deg,rgba(201,169,97,.08),transparent);
}
.clan-banner{
  width:48px;height:48px;border:2px solid var(--gold);border-radius:50%;
  display:grid;place-items:center;font:900 22px/1 "Noto Serif SC";color:var(--gold2);
  background:radial-gradient(circle,rgba(201,169,97,.15),transparent);flex-shrink:0;
}
.clan-title{font:900 17px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.clan-slogan{font:400 11px/1 "Ma Shan Zheng";color:var(--moss);margin-top:4px;font-size:14px}
.clan-body{padding:14px 18px;flex:1}
.clan-meta{display:flex;gap:18px;margin-bottom:12px}
.cm-item{display:flex;flex-direction:column}
.cm-num{font:700 16px/1 "JetBrains Mono";color:var(--paper)}
.cm-num.mem{color:var(--snow)}
.cm-num.contr{color:var(--gold2)}
.cm-label{font:400 10px/1 "Noto Serif SC";color:var(--weak);margin-top:3px}
.clan-rule{font:400 12px/1.6 "Noto Serif SC";color:var(--weak);border-left:2px solid var(--moss);padding-left:10px}
.clan-foot{padding:10px 18px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.clan-join{padding:8px 18px;border:1px solid var(--gold);color:var(--gold2);font:400 12px/1 "Noto Serif SC";background:none;cursor:pointer;letter-spacing:2px}
.clan-join:hover{background:rgba(201,169,97,.1)}
.clan-mine{font:400 11px/1 "Noto Serif SC";color:var(--good)}

/* 江湖传闻 feed · 5 类彩色 */
.rumor-list{padding:0 16px;max-width:760px;margin:0 auto}
.rumor-row,.feed-item{
  display:flex;gap:14px;padding:12px 0;border-bottom:1px dashed var(--line);
}
.rumor-row[data-rtype="level_up"]{border-left-color:var(--gold)}
.rumor-row[data-rtype="encounter_rare"]{border-left-color:var(--purple)}
.rumor-row[data-rtype="relation_formed"]{border-left-color:var(--red)}
.rumor-row[data-rtype="route_complete"]{border-left-color:var(--snow)}
.rumor-row[data-rtype="create_clan"]{border-left-color:var(--moss)}
.rumor-row[data-rtype="join_clan"]{border-left-color:var(--road)}
.rr-ic,.feed-ic{
  width:36px;height:36px;border-radius:50%;flex-shrink:0;
  display:grid;place-items:center;font-size:18px;
  border:1px solid var(--line);background:rgba(var(--ink-rgb),.6);
}
.rr-body,.feed-content{flex:1;min-width:0}
.rr-title,.feed-text{font:400 14px/1.6 "Noto Serif SC";color:var(--paper);word-break:break-word}
.rr-title{font-weight:700;letter-spacing:.2px}
.rr-text,.feed-text em{color:var(--gold2);font-weight:700;font-style:normal}
.feed-text em{margin:0 2px}
.rr-meta,.feed-time{font:400 11px/1 "JetBrains Mono";color:var(--weak);margin-top:6px}
.feed-actions{display:flex;gap:14px;margin-top:6px}
.feed-act{font:400 11px/1 "Noto Serif SC";color:var(--weak);cursor:pointer}
.feed-act:hover{color:var(--gold2)}

.rumor-row[data-rtype="level_up"] .rr-ic,.feed-item.level .feed-ic{border-color:var(--gold);background:rgba(201,169,97,.1)}
.feed-item.level em{color:var(--gold2)}
.rumor-row[data-rtype="route_complete"] .rr-ic,.feed-item.route .feed-ic{border-color:var(--snow);background:rgba(127,208,255,.1)}
.feed-item.route em{color:var(--snow)}
.rumor-row[data-rtype="encounter_rare"] .rr-ic,.feed-item.encounter .feed-ic{border-color:var(--purple);background:rgba(167,139,250,.1)}
.feed-item.encounter em{color:#c4b5fd}
.rumor-row[data-rtype="relation_formed"] .rr-ic,.feed-item.relation .feed-ic{border-color:var(--red);background:rgba(184,65,47,.1)}
.feed-item.relation em{color:var(--red)}
.rumor-row[data-rtype="create_clan"] .rr-ic,.feed-item.clan .feed-ic,.rumor-row[data-rtype="join_clan"] .rr-ic{border-color:var(--moss);background:rgba(45,90,79,.15)}
.feed-item.clan em{color:var(--moss)}

/* ============================================================
 * 实用功能包:离线包/医疗/加油/AA/空房
 * ============================================================ */
.pack-card{
  background:var(--scroll-glass);border:1px solid var(--line);
  padding:14px;margin:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:10px;
}
.pack-head{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.pack-ic{font-size:24px;flex-shrink:0}
.pack-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.pack-meta{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:3px}
.pack-dl-btn{background:linear-gradient(90deg,var(--red),var(--orange));color:#fff;font:700 12px/1 "Noto Serif SC";padding:6px 14px;flex-shrink:0}
.pack-dl-btn:disabled{background:rgba(var(--ink-rgb),.6);color:var(--good);opacity:.7}

.med-card{background:var(--scroll-glass);border:1px solid var(--line);padding:12px 14px;margin:8px 0}
.med-head{display:flex;align-items:center;gap:10px}
.med-ic{font-size:22px;flex-shrink:0}
.med-name{font:700 14.5px/1.2 "Noto Serif SC";color:var(--paper)}
.med-type{font:400 11.5px/1 "Noto Serif SC";color:var(--weak);margin-top:2px}
.med-phone{margin-left:auto;background:rgba(47,208,138,.14);color:var(--good);font:700 13px/1 "Noto Serif SC";padding:6px 12px;border:1px solid var(--good);flex-shrink:0;white-space:nowrap}
.med-phone:hover{background:rgba(47,208,138,.24)}
.med-addr{font:400 12px/1.5 "Noto Serif SC";color:var(--weak);margin-top:6px;padding-left:32px}

.alt-warning{display:flex;align-items:flex-start;gap:10px;margin:10px 0;padding:10px 12px;background:rgba(255,194,51,.06);border:1px solid var(--line);border-left:3px solid var(--jam)}
.alt-low{border-left-color:var(--good);background:rgba(47,208,138,.06)}
.alt-medium{border-left-color:var(--jam);background:rgba(255,194,51,.06)}
.alt-high{border-left-color:var(--orange);background:rgba(232,132,62,.06)}
.alt-extreme{border-left-color:var(--bad);background:rgba(255,90,95,.08)}
.alt-ic{font-size:20px;flex-shrink:0}
.alt-label{font:700 13.5px/1.4 "Noto Serif SC";letter-spacing:.3px}
.alt-advice{font:400 12px/1.6 "Noto Serif SC";color:var(--weak);margin-top:3px}

.fuel-row{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.fuel-node{flex:0 0 60px;font:700 13px/1 "Noto Serif SC";color:var(--gold2)}
.fuel-body{flex:1;min-width:0}
.fuel-main{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.fuel-summary{display:flex;gap:14px;padding:8px 16px;background:var(--scroll-glass);margin:0 16px 10px;font:400 12px/1 "Noto Serif SC";color:var(--weak)}

.split-card{background:var(--scroll-glass);border:1px solid var(--line);padding:14px;margin:10px 0}
.split-head{display:flex;justify-content:space-between;align-items:baseline}
.split-title{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.split-amount{font:700 16px/1 "JetBrains Mono";color:var(--orange)}
.split-meta{font:400 11.5px/1.5 "Noto Serif SC";color:var(--weak);margin-top:4px}
.split-actions{margin-top:10px;display:flex;gap:8px}

.room-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.room-row:last-child{border-bottom:none}
.room-type{flex:1;font:500 14px/1 "Noto Serif SC";color:var(--paper)}
.room-price{font:700 16px/1 "JetBrains Mono";color:var(--orange)}
.room-avail{font:400 11.5px/1 "Noto Serif SC";color:var(--weak);background:rgba(var(--ink-rgb),.6);border:1px solid var(--line);padding:3px 8px;min-width:54px;text-align:center}
.room-avail em{color:var(--good);font-style:normal}

/* ============================================================
 * 我的页 / 背包 / 成就 / 行者卡
 * ============================================================ */
.me-hero{display:flex;align-items:center;gap:14px;padding:6px 0 14px}
.me-avatar{width:60px;height:60px;border-radius:50%;background:linear-gradient(135deg,var(--orange),var(--red));color:#fff;display:grid;place-items:center;font:900 26px/1 "Noto Serif SC";border:2px solid var(--gold)}
.me-name{font:900 19px/1 "Noto Serif SC";color:var(--paper)}
.me-car{font:400 13px/1.5 "Noto Serif SC";color:var(--weak);margin-top:3px}
.me-page .sec{margin-top:18px}
.me-stats{display:flex;gap:10px;margin-top:4px;max-width:1200px;margin-left:auto;margin-right:auto}
.me-stats .stat{flex:1}
.page.me-page{max-width:1200px;margin:0 auto}

.hp-bar-wrap{margin:8px 0 4px}
.hp-label{display:flex;justify-content:space-between;font:400 11px/1 "Noto Serif SC";color:var(--weak);margin-bottom:4px}
.hp-bar{height:10px;background:rgba(255,255,255,.06);overflow:hidden;display:flex}
.hp-fill{height:100%;background:var(--bad);transition:width .3s}
.stam-fill{height:100%;background:var(--good);transition:width .3s}
.hp-row{display:flex;gap:4px}
.hp-row>div{flex:1}

.form-row{display:flex;gap:10px;margin:10px 0}

.rep-list{max-height:55vh;overflow-y:auto;margin-top:6px}
.rep-row{display:flex;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}
.rep-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:4px}
.rep-body{font:400 13.5px/1.5 "Noto Serif SC";color:var(--paper)}
.rep-body .muted{color:var(--weak);font-size:11.5px}
.rep-text{color:var(--weak);margin-top:4px}

.search-drop{position:fixed;z-index:50;background:var(--ink2);border:1px solid var(--gold);overflow:hidden;box-shadow:0 16px 40px rgba(0,0,0,.6)}
.sr{display:flex;flex-direction:column;gap:3px;padding:12px 14px;cursor:pointer;border-bottom:1px solid var(--line)}
.sr:last-child{border-bottom:none}
.sr:active{background:var(--scroll-glass)}
.sr .muted{font-size:11.5px;color:var(--weak)}

.fav-star{position:absolute;top:10px;right:10px;font-size:18px;color:var(--weak);line-height:1;padding:4px}
.fav-star.on{color:var(--gold2)}

.tool-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:0 0 4px}
.tool-grid .tool{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 6px;background:var(--scroll-glass);border:1px solid var(--line);font:400 12px/1 "Noto Serif SC";color:var(--paper);cursor:pointer}
.tool-grid .tool .ti{font-size:22px}
.tool-grid .tool:active{opacity:.8}

.t-card{padding:0 4px}
.t-head{display:flex;gap:14px;align-items:center;margin:4px 0 12px}
.t-avatar{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;font-size:26px;border:2px solid var(--ink);box-shadow:0 0 0 2px rgba(201,169,97,.4)}
.t-name{font:900 18px/1 "Noto Serif SC";color:var(--paper)}
.t-status{background:var(--scroll-glass);border:1px solid var(--line);padding:10px 12px;font:400 13px/1.5 "Noto Serif SC";color:var(--paper);margin-bottom:8px}
.t-bio{font:400 13px/1.5 "Noto Serif SC";color:var(--weak);padding:4px 2px;font-style:italic}
.t-tips{font:400 12px/1.5 "Noto Serif SC";color:var(--weak);margin:8px 0}
.t-tips b{color:var(--gold2)}
.tip-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0 4px}
.tip-btn{background:var(--scroll-glass);border:1px solid var(--line);padding:10px 0;font:700 18px/1 "Noto Serif SC";color:var(--paper)}
.tip-btn small{font-size:10px;color:var(--weak);font-weight:400}
.tip-btn.gold{border-color:var(--gold);background:rgba(201,169,97,.1);color:var(--gold2)}
.msg-row{padding:8px 0;border-bottom:1px dashed var(--line);font:400 13px/1.5 "Noto Serif SC";color:var(--paper)}
.msg-row b{color:var(--gold2)}
.msg-row div{color:var(--weak);margin-top:2px}
.t-avatar-img{width:56px;height:56px;border-radius:50%;object-fit:cover;border:2px solid var(--ink);box-shadow:0 0 0 2px rgba(201,169,97,.4)}
.mood-badge{font-size:14px}
.t-photo{margin:8px 0}
.t-photo img{width:100%;display:block}
.poi-emoji{pointer-events:none}

/* 背包 */
.bag-progress{height:8px;background:var(--scroll-glass);overflow:hidden;margin:8px 16px 0}
.bp-bar{height:100%;background:linear-gradient(90deg,var(--orange),var(--gold2));transition:width .3s}
.bag-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:4px 16px 12px}
.bag-cell{background:var(--scroll-glass);border:1px solid var(--line);padding:10px 4px;text-align:center;cursor:pointer;position:relative}
.bag-ic{font-size:26px}
.bag-name{font:400 10px/1 "Noto Serif SC";color:var(--weak);margin-top:4px}
.bag-qty{position:absolute;top:4px;right:6px;font:400 10px/1 "JetBrains Mono";color:var(--weak)}
.bag-check{position:absolute;bottom:4px;right:6px;font-size:10px;color:var(--good)}
.bag-cell.off{opacity:.4}
.bag-cell.off .bag-check{color:#666}

/* 成就 */
.ach-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:0 16px 12px}
.ach{background:var(--scroll-glass);border:1px solid var(--line);padding:12px 6px;text-align:center;opacity:.5}
.ach.on{opacity:1;border-color:var(--gold)}
.ach-ic{font-size:28px}
.ach-t{font:700 12px/1 "Noto Serif SC";color:var(--paper);margin-top:4px}
.ach-d{font:400 10px/1 "Noto Serif SC";color:var(--weak)}
.title-badge{font:400 11px/1 "Noto Serif SC";color:var(--gold2);border:1px solid var(--gold);padding:1px 8px}

/* 押镖事件 */
.escort-log{margin:8px 0}
.ev-row{display:flex;gap:10px;padding:10px;background:var(--scroll-glass);border:1px solid var(--line);margin-bottom:8px}
.ev-row .ev-ic{font-size:24px}
.ev-row b{font:700 13.5px/1.2 "Noto Serif SC";color:var(--paper)}
.ev-delta{font:400 12px/1 "JetBrains Mono";margin-top:3px;font-weight:700}
.ev-row.bad .ev-delta{color:var(--bad)}
.ev-row.good .ev-delta{color:var(--good)}
.escort-result{text-align:center;padding:16px 0}
.er-big{font:900 32px/1 "Noto Serif SC";color:var(--gold2);margin:6px 0}
.er-big small{font-size:14px;color:var(--weak)}
.er-drop{margin-top:8px;font:400 13px/1.5 "Noto Serif SC";color:var(--weak)}

/* 节点掌柜 🏮 */
.merchant-pin{cursor:pointer}
.merchant-pin text{pointer-events:none}
.merchant-badge{position:absolute;bottom:8px;right:8px;background:var(--orange);color:#1a1a1a;font:700 10px/1 "Noto Serif SC";padding:2px 8px}
.merchant-card{background:var(--scroll-glass);border:1px solid var(--line);padding:14px;margin-bottom:10px}
.merchant-card.pinned{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold)}
.mc-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.mc-avatar{font-size:28px}
.mc-name{font:700 15px/1.2 "Noto Serif SC";color:var(--paper)}
.mc-type{font:400 11px/1 "Noto Serif SC";color:var(--weak);margin-top:2px}
.mc-desc{font:400 13px/1.6 "Noto Serif SC";color:var(--weak);margin-bottom:8px}
.mc-coupon{display:inline-block;font:400 11px/1 "Noto Serif SC";color:var(--good);background:rgba(47,208,138,.14);border:1px solid var(--good);padding:3px 9px}

/* 天气海拔标注 */
.weather-badge{font-size:10px;fill:var(--weak)}
.alt-badge{font-size:9px;fill:var(--weak)}
.weather-emoji{font-size:12px;pointer-events:none}

/* 打卡点亮 */
.stamp-pin{cursor:pointer;animation:stampPulse 2s ease-in-out infinite}
@keyframes stampPulse{0%,100%{opacity:1}50%{opacity:.6}}
.stamp-collected{font-size:14px;pointer-events:none}

/* 地图缩放 */
.map-wrap{cursor:grab}
.map-wrap.grabbing{cursor:grabbing}
.zoom-ctrl{position:absolute;right:12px;bottom:100px;z-index:18;display:flex;flex-direction:column;gap:6px}
.zoom-btn{width:36px;height:36px;background:var(--scroll-glass);backdrop-filter:blur(20px);border:1px solid var(--line);font-size:18px;color:var(--paper);display:grid;place-items:center;cursor:pointer}
.zoom-btn:active{background:var(--scroll)}

/* ============================================================
 * 节点详情页(原型 02 风格:hero + meta-bar + alert-bar + scene-text + merchants + rooms + videos + photos + cta-row)
 * ============================================================ */
.crumbs{display:flex;align-items:center;gap:8px;margin-bottom:24px;font:400 12px/1 "Noto Serif SC";color:var(--weak)}
.crumbs a:hover{color:var(--gold2)}
.crumbs em{color:var(--paper);font-style:normal}
.hero-main{flex:1}
.hero-num{font:400 11px/1 "JetBrains Mono";color:var(--gold);letter-spacing:4px;margin-bottom:14px}
.hero-name-big{font:900 64px/.9 "Noto Serif SC";color:var(--gold2);letter-spacing:8px;text-shadow:0 0 30px rgba(201,169,97,.25)}
.hero-mood{font:400 16px/1 "Ma Shan Zheng";color:var(--moss);margin-top:18px;font-size:22px}
.hero-vert{
  writing-mode:vertical-rl;text-orientation:upright;
  font:400 13px/2 "Noto Serif SC";color:var(--weak);
  letter-spacing:2px;border-left:1px solid var(--line);padding-left:14px;height:140px;
}
.meta-bar{display:flex;gap:0;margin-top:24px;border:1px solid var(--line)}
.meta-cell{flex:1;padding:14px 18px;border-right:1px solid var(--line)}
.meta-cell:last-child{border-right:none}
.meta-label{font:400 10px/1 "Noto Serif SC";color:var(--weak);letter-spacing:2px;margin-bottom:6px}
.meta-val{font:700 18px/1 "JetBrains Mono";color:var(--paper)}
.alert-bar-detail{
  margin-top:16px;display:flex;align-items:stretch;
  border:1px solid var(--bad);background:rgba(255,90,95,.06);
}
.alert-side{width:6px;background:linear-gradient(180deg,var(--jam),var(--bad))}
.alert-body{padding:14px 18px;flex:1}
.alert-title{font:700 14px/1.4 "Noto Serif SC";color:var(--bad);letter-spacing:1px}
.alert-desc{font:400 12px/1.6 "Noto Serif SC";color:var(--paper);margin-top:6px}
.section-detail{margin-top:36px}
.sec-title{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.sec-title h2{font:900 20px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:3px}
.sec-title .sec-line{flex:1;height:1px;background:var(--line)}
.sec-title .sec-num{font:400 11px/1 "JetBrains Mono";color:var(--weak)}
.scene-text{font:400 16px/2 "Noto Serif SC";color:var(--paper);text-align:justify;text-indent:2em}
.scene-text em{color:var(--gold2);font-weight:700}
.merchants-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:8px}
.merchant-card.proto{border:1px solid var(--line);padding:14px;background:var(--scroll-glass);display:flex;gap:12px;align-items:center}
.merchant-card.proto .m-ic{font-size:24px}
.merchant-card.proto .m-info{flex:1}
.merchant-card.proto .m-name{font:700 14px/1.2 "Noto Serif SC";color:var(--paper)}
.merchant-card.proto .m-desc{font:400 11px/1.4 "Noto Serif SC";color:var(--weak);margin-top:3px}
.merchant-card.proto .m-tag{font:400 10px/1 "JetBrains Mono";color:var(--good);border:1px solid var(--good);padding:3px 6px}
.rooms-detail{margin-top:8px;border:1px solid var(--line)}
.room-row.proto{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line);gap:14px;background:transparent}
.videos-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:8px}
.video-cell{position:relative;aspect-ratio:9/16;border:1px solid var(--line);overflow:hidden;cursor:pointer}
.video-cell img{width:100%;height:100%;object-fit:cover;opacity:.7}
.video-play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:32px;color:#fff;text-shadow:0 2px 8px #000}
.photos-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:8px}
.photo-cell{aspect-ratio:1;overflow:hidden;border:1px solid var(--line)}
.photo-cell img{width:100%;height:100%;object-fit:cover}
.photo-more{aspect-ratio:1;border:1px dashed var(--line);display:flex;align-items:center;justify-content:center;font:400 12px/1 "Noto Serif SC";color:var(--weak)}
.cta-row{position:sticky;bottom:0;margin:40px -20px 0;padding:20px;background:linear-gradient(180deg,transparent,var(--ink) 30%);display:flex;gap:12px}
.cta-main{flex:1;padding:16px;background:linear-gradient(90deg,var(--red),var(--orange));color:#fff;text-align:center;font:700 16px/1 "Noto Serif SC";letter-spacing:4px;border:none;cursor:pointer}
.cta-side{padding:16px 24px;border:1px solid var(--gold);color:var(--gold2);font:400 14px/1 "Noto Serif SC";background:var(--scroll-glass);cursor:pointer}

/* ============================================================
 * 关系网络 SVG(原型 04)
 * ============================================================ */
.net-wrap{
  position:relative;height:480px;border:1px solid var(--line);
  background:radial-gradient(circle at center,rgba(45,90,79,.1),transparent 70%),var(--scroll-glass);
  overflow:hidden;max-width:1100px;margin:0 auto;
}
.net-svg{position:absolute;inset:0;width:100%;height:100%}
.net-legend{
  position:absolute;left:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;
  background:rgba(var(--ink-rgb),.7);padding:12px 14px;backdrop-filter:blur(10px);
  border:1px solid var(--line);
}
.leg-row{display:flex;align-items:center;gap:8px;font:400 11px/1 "Noto Serif SC";color:var(--paper)}
.leg-dot{width:10px;height:10px;border-radius:50%}
.leg-line{width:20px;height:2px}
.net-hint{
  position:absolute;right:16px;top:16px;
  font:400 11px/1.6 "Noto Serif SC";color:var(--weak);
  background:rgba(var(--ink-rgb),.7);padding:10px 14px;backdrop-filter:blur(10px);
  border:1px solid var(--line);
}

/* tabs(关系/帮会/传闻 切换) */
.tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin-bottom:28px}
.tabs .tab{
  padding:14px 28px;font:700 15px/1 "Noto Serif SC";color:var(--weak);
  cursor:pointer;border-bottom:2px solid transparent;letter-spacing:3px;
  background:none;border-top:none;border-left:none;border-right:none;
  flex-direction:row;gap:0;flex:initial;display:flex;
}
.tabs .tab.active,.tabs .tab.on{color:var(--gold2);border-bottom-color:var(--gold)}
.tabs .tab:hover{color:var(--paper)}

/* ============================================================
 * 响应式:大屏 ≥900px
 * ============================================================ */
@media (min-width:900px){
  .topbar-nav{display:flex}
  .tabbar{display:none}
  .sidebar{display:none !important}
  #view{top:56px;left:0}
  .fab{right:max(20px, calc(50% - 580px));bottom:32px;width:52px;height:52px;font-size:24px}
  .fab:hover{filter:brightness(1.08);box-shadow:0 12px 32px rgba(232,132,62,.55)}
  /* 地图全屏撑满,无 max-width 限制 */
  .map-wrap{max-width:none;margin:0;width:100%}
  .route-shelf{padding:18px 24px 26px}
  .route-scroll{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;overflow:visible}
  .route-card{flex:auto}
  .page.list{max-width:1200px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;padding:22px 28px 100px}
  .page.list h2{grid-column:1/-1}
  .page.detail{max-width:880px;margin:0 auto;padding:18px 32px 100px}
  .sheet{max-width:560px}
}
@media (min-width:1400px){
  /* 大屏地图仍撑满 */
  .map-wrap{max-width:none}
  .page.list{max-width:1200px}
  .fab{right:max(24px, calc(50% - 620px))}
}

/* ============================================================
 * 移动端 ≤899px
 * ============================================================ */
@media (max-width:900px){
  .brand{min-width:auto;padding:0 12px}
  .brand-zh{font-size:17px;letter-spacing:2px}
  /* 小屏横幅浮在地图上,缩小;附近车友在横幅右侧,与横幅上沿对齐 */
  .rumor-bar{top:62px;left:8px;right:130px;height:26px;padding:0 8px 0 0}
  .nearby-pill{top:62px;right:8px;height:26px;padding:0 8px;font-size:11px}
  /* 赛季条显示时同步下移(赛季条 56-86) */
  body.jh-season-on .rumor-bar{top:92px}
  body.jh-season-on .nearby-pill{top:92px}
  /* 筛选条与横幅左对齐(8px),间距同为 6px(横幅底 88 → 94) */
  .filter-bar{left:8px;top:38px}
  .rumor-label{padding:2px 5px;font-size:10px;margin-right:8px}
  .rumor-feed{height:16px}
  .rumor-item{font-size:11px}
  .topbar-nav{display:none}
  /* 顶栏：品牌固定，图标群在 .top-tools 内横滑，头像常驻；旧方案整栏滚动会让末位图标初始不可见 */
  .topbar{overflow:hidden}
  .top-actions{flex:1 1 auto;margin-left:0;min-width:0;padding:0 6px 0 4px}
  .top-tools{gap:1px}
  .top-user{padding:0 4px}
  .user-info{display:none}
  .iconbtn{width:32px;height:32px;font-size:16px}
  #view{top:56px}
  .hero-card{left:12px;right:12px;bottom:72px;width:auto;display:none !important}
  .tools{display:none !important}
  .sos-btn{right:12px;bottom:300px}
  .map-wrap .route-shelf{padding:14px 12px calc(80px + env(safe-area-inset-bottom))}
  .tabbar{height:60px;padding-bottom:env(safe-area-inset-bottom)}
  .tabbar .tab{font-size:10.5px;gap:1px}
  .tabbar .tab span{font-size:10.5px}
  .fab{right:16px;bottom:calc(76px + env(safe-area-inset-bottom))}
  .page{padding:14px 14px calc(96px + env(safe-area-inset-bottom))}
  .list-card{padding:14px}
  .route-card{flex:0 0 180px}
  .my-clan-card{margin:0 4px}
  .rel-grid{grid-template-columns:1fr}
  .enc-grid{grid-template-columns:repeat(2,1fr)}
  .clans-grid{grid-template-columns:1fr}
  .net-wrap{height:360px}
  .tabs{overflow-x:auto}
  .tabs .tab{padding:12px 18px;font-size:13px;letter-spacing:2px}
  .hero-name-big{font-size:48px;letter-spacing:4px}
  .merchants-grid{grid-template-columns:1fr}
  .videos-grid{grid-template-columns:repeat(2,1fr)}
  .photos-grid{grid-template-columns:repeat(3,1fr)}
  .meta-bar{flex-wrap:wrap}
  .meta-cell{flex:1 1 33%}
}

/* ============================================================
 * 隐藏功能开关
 * ============================================================ */
.tab.hidden{display:none !important}

/* SOS 警示系（兼容旧 SOS chip）*/
.chip.sos{color:var(--bad);border:1px solid var(--bad);background:rgba(255,90,95,.1)}
.sos-panel{border:1px solid var(--bad);background:rgba(255,90,95,.06)}
.done-btn.sos-btn{width:100%;margin-top:8px;background:var(--bad);color:#fff}

/* 等级卡 / 帮会卡大屏居中 */
@media (min-width:900px){
  .level-card{max-width:760px;margin-left:auto;margin-right:auto}
  .my-clan-card{max-width:760px;margin-left:auto;margin-right:auto}
  .log-list,.timeline{max-width:760px;margin:0 auto}
  .relation-card{max-width:760px;margin-left:auto;margin-right:auto}
  .clan-detail{max-width:1200px;margin:0 auto}
  .rumor-list{max-width:760px;margin:0 auto}
  .me-page{max-width:1200px;margin:0 auto}
}

/* ============================================================
 * 战斗力 + 打怪系统（2026-09-22）
 * ============================================================ */

/* 战力大数字 */
.combat-power-wrap{
  text-align:center;padding:24px 16px 16px;
  background:linear-gradient(180deg,rgba(201,169,97,.12),transparent);
  border-bottom:1px solid var(--line);
}
.combat-power-label{
  font-family:"Ma Shan Zheng",cursive;letter-spacing:8px;
  color:var(--gold2);font-size:14px;opacity:.7;margin-bottom:4px;
}
.combat-power{
  font-family:"JetBrains Mono",monospace;font-size:96px;line-height:1;
  color:var(--gold);text-shadow:0 0 18px rgba(201,169,97,.55),0 0 36px rgba(201,169,97,.25);
  font-weight:700;
}
.combat-power-meta{margin-top:6px;font-size:12px;color:var(--text2);font-family:"JetBrains Mono",monospace}

/* 六维条形图 */
.stat-bars{padding:8px 12px}
.stat-bar-row{
  display:grid;grid-template-columns:80px 1fr 40px;align-items:center;gap:8px;
  padding:6px 0;
}
.sbr-label{font-size:13px;color:var(--paper)}
.sbr-desc{font-size:11px;color:var(--text3);margin-left:2px}
.sbr-bar{height:8px;background:rgba(255,255,255,.05);border:1px solid var(--line);position:relative}
.sbr-fill{height:100%;transition:width .4s}
.sbr-val{font-family:"JetBrains Mono",monospace;font-size:13px;color:var(--gold2);text-align:right}

/* 装备徽章 */
.equip-list{padding:0 8px;display:flex;flex-direction:column;gap:6px}
.equip-badge{
  display:grid;grid-template-columns:32px 1fr auto;align-items:center;gap:8px;
  padding:8px 10px;background:var(--scroll);border:1px solid var(--line);
  border-left:3px solid var(--text3);
}
.equip-badge.rarity-common{border-left-color:#6a5f4a}
.equip-badge.rarity-rare{border-left-color:#5aa3ff}
.equip-badge.rarity-epic{border-left-color:#a78bfa}
.equip-badge.rarity-legend{border-left-color:var(--gold)}
.eb-icon{font-size:18px;text-align:center}
.eb-body{display:flex;flex-direction:column;min-width:0}
.eb-name{font-size:13px;color:var(--paper)}
.eb-meta{font-size:11px;color:var(--text3)}
.eb-dmg,.eb-stats{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--gold2)}

/* 武学卡 */
.skill-list{display:flex;flex-direction:column;gap:8px;padding:0 8px}
.skill-card{
  background:var(--scroll);border:1px solid var(--line);border-left:3px solid var(--text3);
  padding:10px;
}
.skill-card.rarity-common{border-left-color:#6a5f4a}
.skill-card.rarity-rare{border-left-color:#5aa3ff}
.skill-card.rarity-epic{border-left-color:#a78bfa}
.skill-card.rarity-legend{border-left-color:var(--gold)}
.skill-card.learned{background:rgba(201,169,97,.06)}
.sc-head{display:grid;grid-template-columns:24px 1fr auto;align-items:center;gap:8px}
.sc-icon{font-size:18px}
.sc-name{font-size:14px;color:var(--paper);font-weight:600}
.sc-meta{font-size:11px;color:var(--text3);font-family:"JetBrains Mono",monospace}
.sc-dmg{font-family:"JetBrains Mono",monospace;font-size:13px;color:var(--gold2)}
.sc-desc{font-size:12px;color:var(--text2);margin-top:6px;line-height:1.5}
.sc-foot{display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
.sc-tag{font-size:11px;color:var(--gold2)}
.learned-tag{color:var(--good)}

/* 怪物卡 */
.monster-list{display:flex;flex-direction:column;gap:8px;padding:0 8px}
.monster-card{
  background:var(--scroll);border:1px solid var(--line);border-left:3px solid var(--text3);
  padding:10px;display:flex;flex-direction:column;gap:6px;
}
.monster-card[data-mtype="hazard"]{border-left-color:#7fd0ff}
.monster-card[data-mtype="bandit"]{border-left-color:var(--red)}
.monster-card[data-mtype="beast"]{border-left-color:var(--orange)}
.mc-head{display:grid;grid-template-columns:32px 1fr;align-items:center;gap:8px}
.mc-icon{font-size:22px}
.mc-name{font-size:14px;color:var(--paper);font-weight:600}
.mc-meta{font-size:11px;color:var(--text3);font-family:"JetBrains Mono",monospace}
.mc-hp{height:8px;background:rgba(255,90,95,.1);border:1px solid rgba(255,90,95,.2);position:relative;margin:2px 0}
.mc-hp-fill{height:100%;background:linear-gradient(90deg,#b8412f,#ff5a5f)}
.mc-stats{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--gold2)}
.mc-desc{font-size:12px;color:var(--text2);line-height:1.5}
.mc-reward{font-size:11px;color:var(--good);font-family:"JetBrains Mono",monospace}

/* BOSS 卡 */
.boss-card{
  border:2px solid var(--gold)!important;
  background:linear-gradient(180deg,rgba(201,169,97,.12),var(--scroll));
  position:relative;
}
.boss-banner{
  display:flex;justify-content:space-between;align-items:center;
  padding:4px 10px;background:linear-gradient(90deg,var(--gold),transparent);
  margin:-10px -10px 6px;
}
.boss-badge{
  background:var(--gold);color:var(--ink);font-size:11px;font-weight:700;
  padding:2px 8px;letter-spacing:2px;font-family:"Ma Shan Zheng",cursive;
}
.boss-badge.small{font-size:10px;padding:1px 5px}
.boss-lv{color:var(--gold2);font-size:12px;font-family:"JetBrains Mono",monospace}
.boss-btn{background:var(--gold);color:var(--ink);font-weight:700;letter-spacing:1px}

/* 战斗 sheet */
.battle-sheet{padding:8px 4px}
.bs-monster{background:var(--scroll);border:1px solid var(--line);border-left:3px solid var(--red);padding:10px}
.bs-mhead{display:grid;grid-template-columns:32px 1fr;align-items:center;gap:8px;margin-bottom:6px}
.bs-micon{font-size:24px}
.bs-mname{font-size:16px;color:var(--paper);font-weight:600}
.bs-mmeta{font-size:11px;color:var(--text3);font-family:"JetBrains Mono",monospace}
.bs-mhp{position:relative;height:14px;background:rgba(255,90,95,.1);border:1px solid rgba(255,90,95,.2)}
.bs-mhp-fill{height:100%;background:linear-gradient(90deg,#b8412f,#ff5a5f)}
.bs-mhp span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--paper);font-family:"JetBrains Mono",monospace}
.bs-player{padding:8px 10px;font-size:12px;color:var(--text2);font-family:"JetBrains Mono",monospace;border-bottom:1px solid var(--line)}
.bs-section-title{margin:10px 0 6px;font-size:12px;color:var(--gold2);letter-spacing:2px}
.skill-picks{display:flex;flex-direction:column;gap:6px}
.skill-pick{display:grid;grid-template-columns:20px 1fr;align-items:center;gap:8px;cursor:pointer;padding:4px}
.skill-pick input{accent-color:var(--gold)}
.sp-card{display:grid;grid-template-columns:24px 1fr;align-items:center;gap:8px;background:var(--scroll);border:1px solid var(--line);border-left:3px solid var(--text3);padding:6px}
.sp-card.rarity-common{border-left-color:#6a5f4a}
.sp-card.rarity-rare{border-left-color:#5aa3ff}
.sp-card.rarity-epic{border-left-color:#a78bfa}
.sp-name{font-size:13px;color:var(--paper)}
.sp-meta{font-size:11px;color:var(--text3);font-family:"JetBrains Mono",monospace}

/* 战报区 */
.bs-report{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.battle-result{
  text-align:center;font-size:18px;font-weight:700;letter-spacing:4px;
  padding:8px;font-family:"Ma Shan Zheng",cursive;
}
.battle-result.win{color:var(--good);background:rgba(47,208,138,.08);border:1px solid rgba(47,208,138,.3)}
.battle-result.lose{color:var(--bad);background:rgba(255,90,95,.08);border:1px solid rgba(255,90,95,.3)}
.battle-result.escape{color:var(--text2);background:rgba(255,255,255,.04);border:1px solid var(--line)}
.battle-round{
  background:var(--scroll);border:1px solid var(--line);padding:6px 8px;font-size:12px;
}
.br-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.br-no{color:var(--gold2);font-family:"JetBrains Mono",monospace;font-size:11px}
.br-skill{color:var(--paper);font-weight:600}
.br-log{color:var(--text2);line-height:1.5;font-size:12px}
.br-dmg-line{font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--text3);margin-top:2px}
.bs-reward{
  text-align:center;padding:4px;font-size:12px;color:var(--good);
  border:1px dashed rgba(47,208,138,.3);background:rgba(47,208,138,.04);
}

/* 战斗记录卡片 */
.battle-log-card{
  background:var(--scroll);border:1px solid var(--line);border-left:3px solid var(--text3);
  padding:10px;margin:0 8px 8px;
}
.battle-log-card.win{border-left-color:var(--good)}
.battle-log-card.lose{border-left-color:var(--bad)}
.battle-log-card.escape{border-left-color:var(--text3)}
.blc-head{display:grid;grid-template-columns:24px 1fr auto auto;align-items:center;gap:8px;margin-bottom:6px}
.blc-icon{font-size:18px}
.blc-title{font-size:13px;color:var(--paper);font-weight:600}
.blc-result{font-size:12px;font-weight:700;padding:1px 6px}
.blc-result.win{color:var(--good);background:rgba(47,208,138,.1)}
.blc-result.lose{color:var(--bad);background:rgba(255,90,95,.1)}
.blc-result.escape{color:var(--text2);background:rgba(255,255,255,.05)}
.blc-time{font-size:11px;color:var(--text3);font-family:"JetBrains Mono",monospace}
.blc-stats{display:flex;flex-wrap:wrap;gap:8px;font-size:11px;color:var(--text2);font-family:"JetBrains Mono",monospace;margin-bottom:6px}
.blc-report{display:flex;flex-direction:column;gap:4px;padding-top:6px;border-top:1px dashed var(--line)}
.blc-report .battle-round{font-size:11px;padding:4px 6px}

/* 属性点分配 sheet */
.alloc-points{text-align:center;padding:8px;font-size:14px;color:var(--gold2)}
.alloc-points b{font-size:20px;font-family:"JetBrains Mono",monospace}
.alloc-rows{display:flex;flex-direction:column;gap:8px;padding:0 4px 12px}
.alloc-row{
  display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:8px;
  padding:8px 10px;background:var(--scroll);border:1px solid var(--line);
}
.ar-label{font-size:13px;color:var(--paper)}
.ar-desc{font-size:11px;color:var(--text3);margin-left:2px}
.ar-current{font-family:"JetBrains Mono",monospace;font-size:18px;color:var(--gold2);min-width:40px;text-align:right}
.ar-controls{display:flex;align-items:center;gap:6px}
.ar-btn{
  width:30px;height:30px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--gold);color:var(--gold);font-size:18px;background:transparent;
}
.ar-btn:active{background:var(--gold);color:var(--ink)}
.ar-delta{
  min-width:30px;text-align:center;font-family:"JetBrains Mono",monospace;
  font-size:14px;color:var(--paper);
}

/* page-head 通用（如果未存在） */
.page-head{display:flex;justify-content:space-between;align-items:center;padding:12px 8px 8px;border-bottom:1px solid var(--line);margin-bottom:8px}
.page-head h3{font-size:16px;color:var(--paper);letter-spacing:2px}

@media (min-width:900px){
  .combat-page,.skills-page,.monsters-page,.battle-log-page,.leaderboard-page,.pvp-page{max-width:1200px;margin:0 auto}
}

/* ============================================================
 * 实战 sheet UI 调优（2026-09-22）
 * ============================================================ */
/* 战斗 sheet 打开时禁止其他操作（点地图/导航） */
body.sheet-open #map,body.sheet-open .tab-bar,body.sheet-open #fab{
  pointer-events:none;filter:grayscale(.4) brightness(.7);
}

/* BOSS 战 banner */
.battle-banner{
  text-align:center;padding:6px 10px;font:700 13px/1 "Ma Shan Zheng",cursive;
  letter-spacing:4px;margin:-10px -4px 8px;
}
.battle-banner.boss{
  background:linear-gradient(90deg,rgba(184,65,47,.85),rgba(201,169,97,.7),transparent);
  color:#fff;
}
.battle-banner.pvp{
  background:linear-gradient(90deg,rgba(45,90,79,.85),rgba(232,132,62,.7),transparent);
  color:#fff;
}

/* BOSS 战 sheet 整体高亮 */
.battle-sheet.boss-mode{
  border:1px solid var(--gold);box-shadow:0 0 12px rgba(201,169,97,.25);
}
.battle-sheet.win{box-shadow:0 0 12px rgba(47,208,138,.35) inset}
.battle-sheet.lose{
  background:linear-gradient(180deg,rgba(184,65,47,.18),transparent);
  border-color:rgba(184,65,47,.5);
}

/* 双色 HP 条（我方/怪物）+ 平滑过渡 + 受击闪烁 */
.hp-bar{
  position:relative;height:14px;overflow:hidden;border:1px solid var(--line);
  background:rgba(255,255,255,.05);
}
.hp-bar .hp-fill{
  height:100%;transition:width .6s cubic-bezier(.4,0,.2,1),background .3s;
}
.hp-bar .hp-fill.player{background:linear-gradient(90deg,#2d5a4f,#2fd08a)}
.hp-bar .hp-fill.monster{background:linear-gradient(90deg,#b8412f,#ff5a5f)}
.battle-sheet.boss-mode .hp-bar .hp-fill.monster{
  background:linear-gradient(90deg,var(--gold),#ff5a5f);box-shadow:0 0 6px rgba(201,169,97,.6);
}
.hp-bar.hit{animation:hpFlash .48s ease-out}
@keyframes hpFlash{
  0%,100%{box-shadow:none}
  35%{box-shadow:0 0 0 2px rgba(255,90,95,.7) inset;filter:brightness(1.4)}
}
.hp-bar .hp-num{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font:11px/1 "JetBrains Mono",monospace;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.8);
}

/* 伤害浮字 */
.dmg-float{
  position:absolute;left:50%;top:0;transform:translate(-50%,0);
  font:700 16px/1 "JetBrains Mono",monospace;color:#ff5a5f;
  text-shadow:0 1px 2px rgba(0,0,0,.9);pointer-events:none;z-index:5;
  animation:floatUp 1.1s ease-out forwards;
}
.dmg-float.good{color:#2fd08a}
.dmg-float.bad{color:#ff5a5f}
@keyframes floatUp{
  0%{opacity:0;transform:translate(-50%,0) scale(.8)}
  15%{opacity:1;transform:translate(-50%,-12px) scale(1.2)}
  100%{opacity:0;transform:translate(-50%,-42px) scale(1)}
}

/* 技能卡选中高亮（金边）+ 未选灰化 */
.skill-pick{position:relative;border-radius:2px;transition:opacity .2s,border-color .2s}
.skill-pick .sp-card{opacity:.45;filter:grayscale(.6);transition:opacity .25s,filter .25s,box-shadow .25s}
.skill-pick.on .sp-card{
  opacity:1;filter:none;border-color:var(--gold)!important;
  box-shadow:0 0 0 1px var(--gold),0 0 10px rgba(201,169,97,.4);
}
.skill-pick input{position:absolute;opacity:0;pointer-events:none}

/* 战斗按钮组 */
.bs-actions{display:flex;gap:6px;margin-top:8px}
.bs-actions .done-btn{flex:1}
.escape-btn{
  flex:0 0 auto;padding:0 12px;background:transparent;border:1px solid var(--text3);
  color:var(--text2);font-size:12px;
}
.escape-btn:active{background:var(--text3);color:var(--ink)}

/* 暴击/会心标记 */
.crit-mark{
  display:inline-block;margin-right:4px;color:var(--gold);
  font:700 12px/1 "Ma Shan Zheng",cursive;letter-spacing:2px;
  text-shadow:0 0 4px rgba(201,169,97,.6);
}

/* 僵持结果样式 */
.battle-result.draw{
  color:var(--text2);background:rgba(255,255,255,.05);border:1px dashed var(--text3);
}

/* 战斗奖励行 */
.bs-reward-row{display:flex;gap:6px;justify-content:center;margin-top:6px}
.bs-reward.drop{
  text-align:center;padding:6px;font-size:13px;color:var(--gold2);
  border:1px dashed var(--gold);background:rgba(201,169,97,.06);
}

/* 胜利掉落弹窗 */
.drop-popup{
  position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;
  align-items:center;justify-content:center;z-index:9999;
}
.drop-popup .dp-card{
  background:var(--scroll);border:2px solid var(--gold);padding:20px 24px;
  text-align:center;min-width:240px;
  box-shadow:0 0 20px rgba(201,169,97,.5);
  animation:dropPop .4s ease-out;
}
@keyframes dropPop{
  0%{opacity:0;transform:scale(.6)}
  100%{opacity:1;transform:scale(1)}
}
.dp-title{font:700 14px/1 "Ma Shan Zheng";color:var(--gold2);letter-spacing:3px;margin-bottom:8px}
.dp-icon{font-size:42px;margin:6px 0}
.dp-name{font-size:16px;color:var(--paper);font-weight:600;margin-bottom:2px}
.dp-rarity{font-size:11px;color:var(--gold2);letter-spacing:2px;margin-bottom:12px}
.dp-ok{
  padding:6px 24px;background:var(--gold);color:var(--ink);font-weight:700;
  border:none;cursor:pointer;letter-spacing:2px;
}

/* ============================================================
 * 江湖排行榜 + 跨服 PVP 视图（2026-09-22）
 * ============================================================ */
.leaderboard-page,.pvp-page{padding-bottom:24px}
.lb-tabs{
  display:flex;overflow-x:auto;gap:4px;padding:4px 8px 8px;
  border-bottom:1px solid var(--line);margin-bottom:8px;
  scrollbar-width:none;
}
.lb-tabs::-webkit-scrollbar{display:none}
.lb-tab{
  flex:0 0 auto;padding:6px 12px;font-size:12px;color:var(--text2);
  background:var(--scroll);border:1px solid var(--line);white-space:nowrap;
  cursor:pointer;
}
.lb-tab.on{color:var(--ink);background:var(--gold);border-color:var(--gold)}
.lb-myrank{
  text-align:center;padding:6px;margin:0 8px 8px;font-size:12px;
  color:var(--gold2);background:rgba(201,169,97,.06);border:1px dashed var(--gold);
}
.lb-myrank b{font-size:16px;color:var(--gold);font-family:"JetBrains Mono",monospace}

.lb-list{display:flex;flex-direction:column;gap:4px;padding:0 8px}
.lb-row{
  display:grid;grid-template-columns:36px 36px 1fr auto;align-items:center;gap:8px;
  padding:8px 10px;background:var(--scroll);border:1px solid var(--line);
}
.lb-row.top{
  border-color:var(--gold);
  background:linear-gradient(90deg,rgba(201,169,97,.12),var(--scroll));
}
.lb-medal{font-size:18px;text-align:center}
.lb-rk{
  font:600 14px/1 "JetBrains Mono",monospace;color:var(--text3);text-align:center;
}
.lb-av{
  width:32px;height:32px;border-radius:50%;background:var(--ink2);
  display:flex;align-items:center;justify-content:center;color:var(--paper);
  font-size:14px;font-weight:600;
}
.lb-av-img{width:32px;height:32px;border-radius:50%;object-fit:cover}
.lb-body{min-width:0}
.lb-name{font-size:14px;color:var(--paper);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-lv{font:11px/1 "JetBrains Mono";color:var(--gold2);margin-left:4px}
.lb-meta{font:11px/1.4 "JetBrains Mono";color:var(--text3);margin-top:2px}
.lb-value{font:600 13px/1 "JetBrains Mono";color:var(--gold2);text-align:right;white-space:nowrap}

.pvp-server{margin:0 8px 16px}
.pvp-server-head{
  font:700 14px/1 "Ma Shan Zheng";color:var(--gold2);letter-spacing:3px;
  padding:8px 10px;border-left:3px solid var(--gold);
  background:linear-gradient(90deg,rgba(201,169,97,.1),transparent);margin-bottom:6px;
}

/* 跨服切磋 sheet */
.pvp-challenge{padding:8px 4px}
.pvp-target{padding:8px 10px;background:var(--scroll);border:1px solid var(--line);margin-bottom:8px;font-size:14px;color:var(--paper)}
.pvp-target b{color:var(--gold)}
.pvp-cta{background:var(--ink2);border:1px solid var(--gold);color:var(--gold);font-size:13px}

/* ===== 任务系统扩展 / 武学升阶 / 赛季（2026-09-22）===== */

/* 任务分类/状态 tab */
.qtab-bar{display:flex;gap:4px;padding:0 8px 6px;overflow-x:auto;scrollbar-width:none}
.qtab-bar::-webkit-scrollbar{display:none}
.qtab{
  flex:0 0 auto;padding:6px 10px;border:1px solid var(--line);background:var(--scroll);
  color:var(--text2);font:12px/1 "JetBrains Mono";border-radius:14px;white-space:nowrap;
}
.qtab.on{background:var(--gold);color:var(--ink);border-color:var(--gold);font-weight:600}
.qsf-bar{display:flex;gap:6px;padding:0 16px 8px}
.qsf{
  padding:4px 8px;border:1px solid var(--line);background:transparent;color:var(--text3);
  font:11px/1 "JetBrains Mono";border-radius:10px;
}
.qsf.on{border-color:var(--orange);color:var(--orange)}

/* 任务卡片新元素 */
.qtype-chip{
  display:inline-block;padding:1px 6px;border:1px solid var(--gold);color:var(--gold);
  font:10px/1.4 "JetBrains Mono";border-radius:8px;margin-left:4px;vertical-align:middle;
}
.qdiff{color:var(--orange);font-size:11px;letter-spacing:1px;margin-left:4px}

/* 任务详情 sheet */
.qd-meta{padding:4px 0 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.qd-route{padding:4px 0;color:var(--text2);font:13px/1.4 "JetBrains Mono"}
.qd-desc{padding:8px 0;color:var(--paper);font-size:14px;line-height:1.6;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:4px 0}
.qd-reward{padding:8px 0;color:var(--gold2);font:13px/1.5 "JetBrains Mono"}
.qd-progress{padding:8px 0}
.qd-plabel{font:12px/1 "JetBrains Mono";color:var(--text2);margin-bottom:4px}
.qd-pbar{height:6px;background:var(--ink2);border-radius:3px;overflow:hidden}
.qd-pfill{height:100%;background:linear-gradient(90deg,var(--orange),var(--gold));transition:width .3s}
.qd-tip{padding:6px 8px;background:var(--scroll);border-left:2px solid var(--gold);color:var(--text2);font:12px/1.5 "JetBrains Mono";margin:6px 0}
.qd-actions{padding:8px 0;display:flex;gap:8px;flex-wrap:wrap}

/* 每日修行卡片 */
.daily-card.done{opacity:.65}
.daily-card.done .lc-title{color:var(--text3);text-decoration:line-through}

/* 武学碎片 / 升阶 */
.shard-card{border-left:3px solid var(--gold)}
.sc-tier{
  display:inline-block;padding:1px 6px;background:var(--gold);color:var(--ink);
  font:600 11px/1.4 "JetBrains Mono";border-radius:6px;margin-left:4px;
}
.max-tier{background:var(--ink2)!important;color:var(--text3)!important;border:1px solid var(--line)}

/* 赛季页 */
.season-page .season-meta{padding:0 16px 8px;color:var(--text3);font:12px/1.5 "JetBrains Mono"}
.season-card{border-left:3px solid var(--gold)}

/* 赛季倒计时顶栏 */
.season-bar{
  position:fixed;top:56px;left:0;right:0;z-index:45;
  display:flex;align-items:center;gap:8px;padding:6px 12px;
  background:linear-gradient(90deg,rgba(201,169,97,.18),rgba(232,132,62,.12));
  border-bottom:1px solid var(--line);color:var(--paper);
  font:12px/1.4 "JetBrains Mono";
  backdrop-filter:blur(12px);
}
/* 赛季条显示时:内容区整体让位 30px,跑马灯/附近车友同步下移,避免重叠 */
body.jh-season-on #view{top:86px}
body.jh-season-on .rumor-bar{top:92px}
body.jh-season-on .nearby-pill{top:92px}
.season-bar .sb-ic{font-size:14px}
.season-bar .sb-txt{flex:1;min-width:0;color:var(--text2)}
.season-bar .sb-txt b{color:var(--gold)}
.season-bar .sb-mine{color:var(--orange);font-size:11px}
.season-bar .sb-go{color:var(--gold);text-decoration:none;font-weight:600}

/* ============================================================
 * LLM + 社交强化（2026-09-22）
 * ============================================================ */

/* 顶栏私信未读红点 */
.msg-badge{
  position:absolute;top:2px;right:2px;min-width:16px;height:16px;padding:0 4px;
  background:linear-gradient(135deg,var(--red),var(--orange));color:var(--paper);
  font:700 10px/16px "JetBrains Mono";border-radius:8px;text-align:center;
}
.iconbtn{position:relative}

/* 好友卡片 */
.friend-card{
  display:flex;align-items:center;gap:10px;padding:10px 12px;margin:6px 0;
  background:rgba(201,169,97,.05);border:1px solid var(--line);border-radius:8px;
}
.friend-card.pending{border-color:var(--gold);background:rgba(201,169,97,.1)}
.friend-card .fc-ava{
  width:42px;height:42px;border-radius:50%;flex:0 0 auto;
  display:grid;place-items:center;font:600 18px/1 "Ma Shan Zheng",serif;
  background:linear-gradient(135deg,var(--gold2),var(--orange));color:var(--ink)
}
.friend-card .fc-body{flex:1;min-width:0}
.friend-card .fc-name{font:600 13px/1.4 "Noto Serif SC";color:var(--paper)}
.friend-card .fc-name .muted{font-weight:400;font-size:11px}
.friend-card .fc-actions{display:flex;gap:6px;flex:0 0 auto}
.online-dot{color:#5dff8a;font-size:10px;margin-left:4px}

/* 私信/对话流 */
.msg-stream{
  height:48vh;overflow-y:auto;padding:10px;display:flex;flex-direction:column;gap:8px;
  background:rgba(var(--ink-rgb),.5);border:1px solid var(--line);border-radius:8px;margin:8px 0;
}
.msg-row{display:flex;flex-direction:column;max-width:78%}
.msg-row.mine{align-self:flex-end;align-items:flex-end}
.msg-row.them{align-self:flex-start;align-items:flex-start}
.msg-bubble{
  padding:8px 12px;border-radius:12px;font:13px/1.5 "Noto Serif SC";word-break:break-word;
}
.msg-row.mine .msg-bubble{background:linear-gradient(135deg,var(--gold2),var(--orange));color:var(--ink);border-bottom-right-radius:4px}
.msg-row.them .msg-bubble{background:rgba(201,169,97,.12);color:var(--paper);border:1px solid var(--line);border-bottom-left-radius:4px}
.msg-input-bar{display:flex;gap:6px;padding:8px 0;border-top:1px solid var(--line)}
.msg-input-bar .field{flex:1}

/* AI 节点重叙 */
.ai-scene-body{padding:14px;background:rgba(201,169,97,.05);border:1px solid var(--line);border-radius:8px;margin:6px 0}
.ai-scene-text{font:500 14px/1.8 "Noto Serif SC";color:var(--paper);letter-spacing:.4px}
.ai-link{color:var(--gold);cursor:pointer;font-size:11px;text-decoration:underline}

/* 江湖问答 */
.qa-input-card{padding:12px;background:rgba(201,169,97,.05);border:1px solid var(--line);border-radius:8px;margin:6px 16px}
.qa-row{padding:10px 12px;margin:6px 0;background:rgba(var(--ink-rgb),.4);border:1px solid var(--line);border-radius:8px}
.qa-row .qa-q{font:600 13px/1.4 "Noto Serif SC";color:var(--gold);margin-bottom:4px}
.qa-row .qa-a{font:400 13px/1.6 "Noto Serif SC";color:var(--paper);white-space:pre-wrap}
.chip.ok{background:rgba(47,208,138,.18);color:#2fd08a;border:1px solid rgba(47,208,138,.4)}
.chip.warn{background:rgba(255,90,95,.18);color:var(--red);border:1px solid rgba(255,90,95,.4)}

/* AI 对话中的"正在输入" 占位 */
#npcTyping .msg-bubble{opacity:.6;font-style:italic}

/* ============================================================
 * P0 ① 文字冒险房间视图（2026-09-24）
 * 卷轴墨韵风格：零圆角、暖金/墨绿/朱红、Noto Serif SC
 * ============================================================ */
.room-page{padding:0 0 64px;background:var(--ink);min-height:100vh}
.room-page .sec{padding:0 16px;font:700 13px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:3px;margin:18px 0 8px;text-shadow:0 1px 2px #000}
.room-head{padding:16px 16px 12px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(201,169,97,.06),transparent);position:sticky;top:0;z-index:5;backdrop-filter:blur(8px)}
.room-back{position:absolute;top:14px;left:14px;background:transparent;border:1px solid var(--gold);color:var(--gold2);font:700 12px/1 "Noto Serif SC";padding:6px 10px;letter-spacing:2px;cursor:pointer}
.room-back:hover{background:rgba(201,169,97,.12);box-shadow:0 0 8px rgba(201,169,97,.3) inset}
.room-title{font:900 22px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:3px;text-align:center;text-shadow:0 1px 4px #000,0 0 14px rgba(201,169,97,.3);margin-top:8px}
.room-name{font:400 12px/1 "Noto Serif SC";color:var(--text3);letter-spacing:1px}
.room-meta{font:400 11px/1.6 "JetBrains Mono";color:var(--text2);text-align:center;margin-top:4px}
.room-alt{display:flex;align-items:center;gap:6px;padding:6px 12px;margin:8px 16px;background:rgba(255,90,95,.06);border:1px solid rgba(255,90,95,.25);font:400 11px/1.4 "Noto Serif SC";color:var(--paper)}
.room-alt .alt-ic{font-size:14px}
.room-alt .alt-advice{color:var(--text3);margin-left:auto;font-size:10px;max-width:60%;text-align:right}
.room-alt.alt-high{background:rgba(255,159,46,.06);border-color:rgba(255,159,46,.3)}
.room-alt.alt-extreme{background:rgba(255,90,95,.1);border-color:rgba(255,90,95,.4)}
.room-mood{font:400 13px/1 "Noto Serif SC";color:var(--gold);letter-spacing:6px;text-align:center;padding:10px 0;text-shadow:0 0 8px rgba(201,169,97,.2)}
.room-desc{font:400 14px/1.95 "Noto Serif SC";color:var(--paper);padding:14px 18px;margin:8px 16px;background:linear-gradient(180deg,rgba(201,169,97,.04),rgba(var(--ink-rgb),.5));border:1px solid var(--line);border-left:3px solid var(--gold);text-indent:2em;white-space:pre-wrap}
.room-npcs,.room-items{padding:0 16px;display:flex;flex-direction:column;gap:6px}
.room-empty{padding:10px 4px;font:400 12px/1.4 "Noto Serif SC";color:var(--text3);font-style:italic}
.room-npc{display:grid;grid-template-columns:36px 1fr auto;align-items:center;gap:10px;padding:8px 10px;background:rgba(var(--ink2-rgb),.6);border:1px solid var(--line);transition:border-color .2s,box-shadow .2s}
.room-npc:hover{border-color:var(--gold);box-shadow:0 0 0 1px rgba(201,169,97,.2),0 4px 12px rgba(0,0,0,.4)}
.room-npc .rn-ic{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:rgba(201,169,97,.08);border:1px solid var(--gold);font-size:18px}
.room-npc .rn-name{font:700 14px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.room-npc .rn-role{font:400 10px/1 "Noto Serif SC";color:var(--text3);margin-left:6px;padding:2px 5px;background:rgba(201,169,97,.08);border:1px solid var(--line)}
.room-npc .rn-desc{font:400 12px/1.5 "Noto Serif SC";color:var(--text2);margin-top:3px}
.room-npc .rn-talk{font-size:11px;padding:4px 8px;border-color:var(--gold);color:var(--gold2)}
.room-item{display:grid;grid-template-columns:30px 1fr auto;align-items:center;gap:10px;padding:8px 10px;background:rgba(var(--ink2-rgb),.5);border:1px solid var(--line);transition:opacity .2s}
.room-item.taken{opacity:.4}
.room-item .ri-ic{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:rgba(45,90,79,.15);border:1px solid var(--moss,#2d5a4f);font-size:16px}
.room-item .ri-name{font:700 13px/1.2 "Noto Serif SC";color:var(--paper)}
.room-item .ri-desc{font:400 11px/1.4 "Noto Serif SC";color:var(--text3);margin-top:2px}
.room-item .ri-take{font-size:11px;padding:3px 8px;border-color:var(--moss,#2d5a4f);color:#7fd4b8}
.room-item .ri-tag{font:400 10px/1 "Noto Serif SC";color:var(--text3);padding:3px 6px;background:rgba(47,208,138,.06);border:1px solid rgba(47,208,138,.25)}
.room-compass{padding:0 16px;display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px}
.room-exit{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 6px;background:linear-gradient(180deg,rgba(201,169,97,.08),rgba(var(--ink2-rgb),.6));border:1px solid var(--gold);color:var(--paper);cursor:pointer;transition:all .2s;font-family:"Noto Serif SC"}
.room-exit:hover{background:linear-gradient(180deg,rgba(201,169,97,.18),rgba(var(--ink2-rgb),.5));box-shadow:0 0 0 1px var(--gold2),0 0 16px rgba(201,169,97,.35) inset,0 4px 14px rgba(0,0,0,.5);transform:translateY(-1px)}
.room-exit:active{transform:translateY(0)}
.room-exit .re-ic{font:900 18px/1 "JetBrains Mono";color:var(--gold2)}
.room-exit .re-dir{font:700 12px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.room-exit .re-target{font:400 11px/1.4 "Noto Serif SC";color:var(--text2)}
.room-exit.void{border-color:var(--line);background:rgba(var(--ink2-rgb),.4);cursor:not-allowed;opacity:.4}
.room-exit.void .re-ic,.room-exit.void .re-dir,.room-exit.void .re-target{color:var(--text3)}
.room-actions{display:flex;gap:6px;flex-wrap:wrap;padding:0 16px;margin:12px 0}
.room-actions .mini-btn{font-size:11px;padding:5px 10px}
.room-stamp{border-color:var(--gold);color:var(--gold2)}
.room-stamped{font:400 11px/1.4 "Noto Serif SC";color:var(--good);padding:5px 10px;border:1px solid rgba(47,208,138,.3);background:rgba(47,208,138,.06)}
.room-enter{border-color:var(--gold);color:var(--gold2);background:rgba(201,169,97,.08)}
.room-statusbar{position:fixed;left:0;right:0;bottom:0;display:flex;align-items:center;gap:10px;padding:8px 16px;background:linear-gradient(180deg,rgba(var(--ink-rgb),.85),rgba(var(--ink-rgb),.95));border-top:1px solid var(--gold);backdrop-filter:blur(12px);z-index:50}
.room-statusbar .rs-stat{font:700 12px/1 "JetBrains Mono";color:var(--paper);padding:3px 8px;background:rgba(201,169,97,.06);border:1px solid var(--line)}
.room-statusbar .rs-coins{color:var(--gold2)}
.room-statusbar .rs-hint{margin-left:auto;font:400 10px/1 "Noto Serif SC";color:var(--text3);letter-spacing:1px}
@media (max-width:380px){
  .room-compass{grid-template-columns:1fr}
  .room-statusbar .rs-hint{display:none}
}

/* ============================================================
 * P1-② NPC 对话树 sheet（2026-09-24）
 * ============================================================ */
.dlog-sheet-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--gold);background:linear-gradient(180deg,rgba(201,169,97,.08),transparent)}
.dlog-close{background:transparent;border:1px solid var(--line);color:var(--text2);font-size:14px;padding:3px 8px;cursor:pointer}
.dlog-close:hover{border-color:var(--gold);color:var(--gold2)}
.dlog-title{font:700 14px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.dlog-body{padding:14px;max-height:60vh;overflow-y:auto}
.dlog-npc{padding:10px 12px;background:rgba(201,169,97,.04);border-left:3px solid var(--gold);margin-bottom:10px}
.dlog-npc-name{font:700 13px/1 "Noto Serif SC";color:var(--gold2);margin-bottom:6px;letter-spacing:1px}
.dlog-line{font:400 13px/1.7 "Noto Serif SC";color:var(--paper);white-space:pre-wrap}
.dlog-llm-tag{font:400 10px/1 "JetBrains Mono";color:var(--gold);padding:2px 5px;background:rgba(201,169,97,.1);border:1px solid var(--gold);margin-left:4px}
.dlog-options{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.dlog-opt{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 12px;background:rgba(var(--ink2-rgb),.6);border:1px solid var(--line);color:var(--paper);font:400 13px/1.4 "Noto Serif SC";cursor:pointer;transition:all .2s}
.dlog-opt:hover:not(.muted){border-color:var(--gold);background:rgba(201,169,97,.08);box-shadow:0 0 0 1px rgba(201,169,97,.2) inset}
.dlog-opt.muted{color:var(--text3);font-style:italic}
.dlog-rew{font:700 11px/1 "JetBrains Mono";color:var(--gold2);padding:2px 6px;background:rgba(201,169,97,.08);border:1px solid var(--gold)}
.dlog-reward{font:400 12px/1.4 "Noto Serif SC";color:var(--good);margin-top:6px;padding:4px 8px;background:rgba(47,208,138,.06);border:1px solid rgba(47,208,138,.25)}

/* ============================================================
 * P1-③ 逐回合战斗 sheet（2026-09-24）
 * 卷轴墨韵：墨底+暖金边+朱红怪物+墨绿玩家
 * ============================================================ */
.rbattle-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--gold);background:linear-gradient(180deg,rgba(184,65,47,.08),transparent)}
.rbattle-head [data-rb-close]{background:transparent;border:1px solid var(--line);color:var(--text2);font-size:14px;padding:3px 8px;cursor:pointer}
.rbattle-head [data-rb-close]:hover{border-color:var(--gold);color:var(--gold2)}
.rbattle-title{font:900 15px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:3px;text-shadow:0 0 8px rgba(201,169,97,.4)}
.rbattle-body{padding:14px}
.rb-arena{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center;padding:10px 8px;background:linear-gradient(180deg,rgba(var(--ink-rgb),.7),rgba(var(--ink-rgb),.95));border:1px solid var(--line);margin-bottom:12px;position:relative}
.rb-side{padding:8px 6px;position:relative;min-height:64px}
.rb-monster{border-right:1px dashed var(--line)}
.rb-name{font:700 13px/1 "Noto Serif SC";color:var(--paper);margin-bottom:6px;letter-spacing:1px}
.rb-monster .rb-name{color:#e8843e}
.rb-player .rb-name{color:var(--good)}
.rb-boss{font:900 10px/1 "JetBrains Mono";color:#b8412f;padding:2px 5px;background:rgba(184,65,47,.15);border:1px solid #b8412f;margin-left:6px}
.rb-hp-bar{position:relative;height:14px;background:rgba(0,0,0,.6);border:1px solid var(--line);overflow:hidden}
.rb-hp-fill{height:100%;transition:width .4s cubic-bezier(.4,0,.2,1)}
.rb-php{background:linear-gradient(90deg,#1f6b5a,#2fd08a)}
.rb-mhp{background:linear-gradient(90deg,#8a2f1f,#e8843e)}
.rb-hp-num{position:absolute;top:0;left:50%;transform:translateX(-50%);font:700 10px/14px "JetBrains Mono";color:#fff;text-shadow:0 0 3px #000,0 1px 1px #000}
.rb-stamina{font:700 10px/1 "JetBrains Mono";color:var(--gold2);margin-top:4px;text-align:right}
.rb-vs{font:900 16px/1 "Noto Serif SC";color:var(--gold2);text-align:center;text-shadow:0 0 6px rgba(201,169,97,.4)}
.rb-dmg-float{position:absolute;top:-4px;left:50%;transform:translateX(-50%);font:900 16px/1 "JetBrains Mono";color:#ffd23f;text-shadow:0 0 4px #000,0 2px 4px rgba(0,0,0,.6);animation:rbFloatUp 1.1s ease-out forwards;pointer-events:none;z-index:10}
.rb-dmg-float.crit{font-size:22px;color:#ff5a5f;text-shadow:0 0 6px rgba(255,90,95,.6),0 2px 4px #000}
@keyframes rbFloatUp{0%{opacity:0;transform:translate(-50%,0) scale(.6)}20%{opacity:1;transform:translate(-50%,-8px) scale(1.2)}100%{opacity:0;transform:translate(-50%,-32px) scale(1)}}
.rb-log{max-height:140px;overflow-y:auto;padding:8px 10px;background:rgba(0,0,0,.4);border:1px solid var(--line);margin-bottom:10px;font:400 11px/1.5 "Noto Serif SC";color:var(--text2)}
.rb-log-line{padding:3px 0;border-bottom:1px dashed rgba(201,169,97,.08)}
.rb-log-line:last-child{border-bottom:none}
.rb-rd{color:var(--gold2);font-weight:700;margin-right:4px}
.rb-skill{color:var(--paper);margin-right:4px}
.rb-pdmg{color:var(--good);margin-right:4px}
.rb-mdmg{color:#e8843e;margin-right:4px}
.rb-logtxt{color:var(--text3)}
.rb-skills{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:6px;margin-bottom:10px}
.rb-skill{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;background:rgba(var(--ink2-rgb),.7);border:1px solid var(--gold);color:var(--paper);cursor:pointer;transition:all .2s;font-family:"Noto Serif SC"}
.rb-skill:hover:not(:disabled){background:rgba(201,169,97,.15);box-shadow:0 0 0 1px var(--gold2),0 0 12px rgba(201,169,97,.3) inset;transform:translateY(-1px)}
.rb-skill:disabled{opacity:.4;cursor:not-allowed}
.rb-sk-name{font:700 12px/1 "Noto Serif SC";color:var(--gold2)}
.rb-sk-cost{font:400 10px/1 "JetBrains Mono";color:var(--text3)}
.rb-sk-type{font:400 9px/1 "Noto Serif SC";color:var(--text3);padding:1px 4px;background:rgba(0,0,0,.3)}
.rb-actions{display:flex;justify-content:center}
.rb-flee{padding:6px 14px;background:rgba(184,65,47,.1);border:1px solid #b8412f;color:#e8843e;font:700 12px/1 "Noto Serif SC";cursor:pointer;letter-spacing:1px}
.rb-flee:hover{background:rgba(184,65,47,.2);box-shadow:0 0 8px rgba(184,65,47,.3) inset}
.rb-result{text-align:center;padding:20px 14px}
.rb-result-label{font:900 24px/1 "Noto Serif SC";letter-spacing:6px;margin-bottom:12px;text-shadow:0 0 12px currentColor}
.rb-win .rb-result-label{color:var(--good)}
.rb-lose .rb-result-label{color:#e8843e}
.rb-draw .rb-result-label{color:var(--gold2)}
.rb-escape .rb-result-label{color:var(--text2)}
.rb-rewards{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:10px 0}
.rb-rw{font:700 12px/1 "JetBrains Mono";color:var(--gold2);padding:4px 8px;background:rgba(201,169,97,.08);border:1px solid var(--gold)}
.rb-drop{color:var(--paper)}
.rb-drop .rar-common{color:#9ca3af}
.rb-drop .rar-rare{color:#3b82f6}
.rb-drop .rar-epic{color:#a855f7}
.rb-drop .rar-legend{color:#fbbf24}
.rb-final-log{font:400 11px/1 "Noto Serif SC";color:var(--text3);margin-bottom:14px}
.rb-done{padding:8px 20px;background:rgba(201,169,97,.1);border:1px solid var(--gold);color:var(--gold2);font:700 13px/1 "Noto Serif SC";cursor:pointer;letter-spacing:2px}
.rb-done:hover{background:rgba(201,169,97,.2);box-shadow:0 0 12px rgba(201,169,97,.4) inset}

/* ============================================================
 * P2 增强样式（2026-09-24）：聊天室 / AI 剧情分支 / 帮会战 / PVP 排位
 * ============================================================ */

/* ===== P2-① 聊天室 ===== */
.chat-tabs{display:flex;gap:0;border-bottom:2px solid var(--gold);background:var(--card)}
.chat-tab{flex:1;padding:10px 4px;background:none;border:none;color:var(--text3);font:700 12px/1 "Noto Serif SC";cursor:pointer;letter-spacing:1px;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}
.chat-tab.on{color:var(--gold2);border-bottom-color:var(--gold2);background:rgba(201,169,97,.08)}
.chat-tab:hover:not(.on){color:var(--text2)}
.chat-stream{padding:8px 12px;min-height:240px;max-height:52vh;overflow-y:auto;background:var(--bg);display:flex;flex-direction:column;gap:6px}
.chat-msg{display:flex;flex-direction:column;max-width:78%;gap:2px}
.chat-msg.mine{align-self:flex-end;align-items:flex-end}
.chat-msg.other{align-self:flex-start;align-items:flex-start}
.chat-msg.sys{align-self:center;max-width:90%}
.chat-sys-text{font:400 11px/1.5 "Noto Serif SC";color:var(--text3);background:rgba(201,169,97,.06);padding:4px 10px;border-left:2px solid var(--gold)}
.chat-author{font:400 10px/1 "Noto Serif SC";color:var(--text3);padding:0 4px}
.chat-bubble{padding:7px 11px;font:400 13px/1.5 "Noto Serif SC";color:var(--text);word-break:break-word}
.chat-msg.mine .chat-bubble{background:rgba(201,169,97,.15);border:1px solid var(--gold)}
.chat-msg.other .chat-bubble{background:var(--card2);border:1px solid rgba(106,95,74,.3)}
.chat-time{font:400 9px/1 "JetBrains Mono";color:var(--text3);padding:0 4px}
.chat-input-bar{display:flex;gap:6px;padding:8px 12px;border-top:2px solid var(--gold);background:var(--card)}
.chat-input-bar .field{flex:1}

/* ===== P2-② AI 剧情分支 ===== */
.branch-body{padding:14px 16px}
.branch-scenario{font:400 14px/1.7 "Noto Serif SC";color:var(--text);background:rgba(45,90,79,.12);border-left:3px solid var(--green,#2d5a4f);padding:12px 14px;margin-bottom:14px}
.branch-options{display:flex;flex-direction:column;gap:8px}
.branch-opt{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:11px 14px;background:var(--card2);border:1px solid rgba(201,169,97,.3);color:var(--text);font:400 13px/1.4 "Noto Serif SC";cursor:pointer;text-align:left;transition:all .2s}
.branch-opt:hover{border-color:var(--gold);background:rgba(201,169,97,.1);box-shadow:0 0 10px rgba(201,169,97,.2) inset}
.branch-impact{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.branch-tags{font:700 10px/1 "JetBrains Mono";color:var(--gold2);white-space:nowrap}

/* ===== P2-③ 帮会战 ===== */
.cw-body{padding:12px 16px}
.cw-item{padding:10px 12px;background:var(--card2);border-left:3px solid var(--text3);margin-bottom:8px}
.cw-item.pending{border-left-color:var(--orange,#e8843e)}
.cw-item.finished{border-left-color:var(--gold)}
.cw-item.active{border-left-color:var(--red,#b8412f)}
.cw-vs{font:700 13px/1.4 "Noto Serif SC";color:var(--gold2);margin-bottom:4px}
.cw-meta{font:400 11px/1 "Noto Serif SC";color:var(--text3)}
.cw-score{font:400 11px/1 "JetBrains Mono";color:var(--text2);margin-top:2px}
.cw-round{font:400 12px/1.5 "Noto Serif SC";color:var(--text);padding:4px 0;border-bottom:1px dashed rgba(106,95,74,.2)}
.cw-result{font:700 15px/1 "Noto Serif SC";color:var(--gold2);padding:8px 0;text-align:center}
.cw-report{margin-top:6px}

/* ===== P2-④ PVP 排位 ===== */
.pvp-my-stat{display:flex;gap:12px;justify-content:center;padding:10px 12px;background:rgba(201,169,97,.08);border:1px solid var(--gold);margin:8px 16px}
.pvp-rating{font:900 16px/1 "JetBrains Mono";color:var(--gold2)}
.pvp-streak{font:700 12px/1 "Noto Serif SC";color:var(--orange,#e8843e)}
.pvp-pos{font:400 11px/1 "Noto Serif SC";color:var(--text3)}
.pvp-cand-list{padding:0 16px}
.pvp-cand{display:flex;justify-content:space-between;align-items:center;padding:9px 12px;background:var(--card2);border-bottom:1px solid rgba(106,95,74,.2);gap:8px}
.pvp-cand-info{display:flex;flex-direction:column;gap:2px}
.pvp-cand-name{font:700 13px/1 "Noto Serif SC";color:var(--text)}
.pvp-cand-meta{font:400 10px/1 "JetBrains Mono";color:var(--text3)}
.pvp-rank-list{padding:0 16px}
.pvp-rank-row{display:flex;align-items:center;gap:6px;padding:7px 8px;border-bottom:1px solid rgba(106,95,74,.15);font:400 12px/1 "Noto Serif SC"}
.pvp-rank-row.me{background:rgba(201,169,97,.1);border-left:2px solid var(--gold)}
.pvp-rank-pos{width:28px;text-align:center;font:700 13px/1 "Noto Serif SC";color:var(--gold2)}
.pvp-rank-name{flex:1;font:700 12px/1 "Noto Serif SC";color:var(--text)}
.pvp-rank-meta{font:400 9px/1 "JetBrains Mono";color:var(--text3);margin-right:6px}
.pvp-rank-rating{font:900 12px/1 "JetBrains Mono";color:var(--gold2)}
.pvp-rank-wl{font:400 10px/1 "JetBrains Mono";color:var(--text3)}

/* ============================================================
 * P3 增强：副本/秘境 + 坐骑/宠物 + 成就/勋章
 * 卷轴墨韵：零圆角 · 暖金边 · 玻璃底
 * ============================================================ */

/* ---------- P3-① 副本/秘境 ---------- */
.dg-page{max-width:1200px;margin:0 auto}
.dg-card{display:flex;gap:12px;align-items:flex-start;padding:14px}
.dg-card.locked{opacity:.55;filter:grayscale(.4)}
.dg-ic{font-size:28px;flex-shrink:0;width:40px;text-align:center;padding-top:2px}
.dg-body{flex:1;min-width:0}
.dg-foot{display:flex;flex-direction:column;gap:3px;margin-top:6px;font:400 11px/1.5 "Noto Serif SC";color:var(--text3)}
.dg-boss{color:var(--red)}
.dg-reward{color:var(--gold2)}
.dg-times{color:var(--weak)}
.dg-times.hot{color:var(--bad)}
.dg-report{max-height:220px;overflow:auto;margin:10px 0;padding:8px 10px;background:var(--scroll-glass);border:1px solid var(--line);font:400 11px/1.6 "JetBrains Mono";color:var(--text3)}
.br-round{padding:3px 0;border-bottom:1px dashed rgba(106,95,74,.2)}
.br-hp{float:right;color:var(--weak)}
.dg-runs{padding:4px 0}
.dg-run-row{padding:7px 4px;border-bottom:1px solid rgba(106,95,74,.15);font:400 12px/1.4 "Noto Serif SC";color:var(--paper);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dg-boss-row{padding:6px 4px;font:400 12px/1.4 "Noto Serif SC";color:var(--paper)}
.dg-boss-row b{color:var(--gold2)}

/* ---------- P3-② 坐骑/宠物 ---------- */
.mt-page{max-width:1200px;margin:0 auto}
.mt-card{display:flex;gap:12px;align-items:flex-start;padding:14px}
.mt-card.active{border-color:var(--gold);box-shadow:0 0 0 1px rgba(201,169,97,.3) inset}
.mt-ic{font-size:30px;flex-shrink:0;width:40px;text-align:center;padding-top:2px}
.mt-body{flex:1;min-width:0}
.mt-body .hp-bar-wrap{padding:0;margin-top:6px}
.mt-body .hp-bar{height:5px}
.mt-body .lb-label{font:400 10px/1 "JetBrains Mono";color:var(--text3);margin-top:2px}
.mt-actions{display:flex;gap:6px;margin-top:8px}
.mt-market{padding:4px 0}
.mt-mkt-row{display:flex;gap:10px;align-items:center;padding:10px 4px;border-bottom:1px solid rgba(106,95,74,.15)}
.mt-mkt-row.owned{opacity:.5}
.mt-mkt-body{flex:1;min-width:0}
.mt-mkt-act{flex-shrink:0}

/* ---------- P3-③ 成就/勋章 ---------- */
.ach-page{max-width:1200px;margin:0 auto}
.ach-list{padding:0 4px}
.ach-card{display:flex;gap:12px;align-items:center;padding:12px;margin-bottom:8px;background:var(--scroll-glass);border:1px solid var(--line);opacity:.55}
.ach-card.on{opacity:1;border-color:var(--gold);box-shadow:0 0 0 1px rgba(201,169,97,.2) inset}
.ach-ic{font-size:26px;flex-shrink:0;width:36px;text-align:center}
.ach-body{flex:1;min-width:0}
.ach-t{font:700 13px/1.3 "Noto Serif SC";color:var(--paper)}
.ach-card.on .ach-t{color:var(--gold2)}
.ach-d{font:400 11px/1.4 "Noto Serif SC";color:var(--text3);margin-top:2px}
.ach-meta{font:400 10px/1.4 "JetBrains Mono";color:var(--weak);margin-top:3px}
.ach-act{flex-shrink:0}
@media (min-width:900px){
  .dg-page,.mt-page,.ach-page{max-width:1200px;margin:0 auto}
}

/* ============================================================
 * P4 增强：世界BOSS / 师徒 / 交易市集 / 装备强化
 * 卷轴墨韵：零圆角 · 暖金边 · 玻璃底
 * ============================================================ */

/* ---------- P4-① 世界BOSS（.wb-） ---------- */
.wb-page{max-width:1200px;margin:0 auto}
.wb-boss-card{display:flex;gap:12px;align-items:flex-start;padding:14px;background:var(--scroll-glass);border:1px solid var(--line);margin-bottom:10px}
.wb-ic{font-size:34px;flex-shrink:0;width:46px;text-align:center;padding-top:2px}
.wb-body{flex:1;min-width:0}
.wb-stats{font:400 11px/1.6 "JetBrains Mono";color:var(--text3);margin-top:2px}
.wb-body .hp-bar-wrap{padding:0;margin-top:6px}
.wb-body .hp-bar{height:6px}
.wb-hp-fill{height:100%;background:linear-gradient(90deg,var(--red),var(--orange));border:1px solid rgba(184,65,47,.6)}
.wb-body .lb-label{display:flex;justify-content:space-between;font:400 10px/1.4 "JetBrains Mono";color:var(--text3);margin-top:2px;gap:6px;flex-wrap:wrap}
.wb-my{padding:6px 4px;font:400 12px/1.4 "Noto Serif SC";color:var(--paper)}
.wb-my b{color:var(--gold2)}
.wb-rank{padding:4px 0}
.wb-rank-row{display:flex;align-items:center;gap:8px;padding:7px 6px;border-bottom:1px solid rgba(106,95,74,.15);font:400 12px/1.4 "Noto Serif SC";color:var(--paper)}
.wb-rank-row.top1 .wb-rank-no{color:var(--gold2)}
.wb-rank-row.top2 .wb-rank-no{color:var(--paper)}
.wb-rank-row.top3 .wb-rank-no{color:var(--orange)}
.wb-rank-no{font:700 14px/1 "JetBrains Mono";width:24px;flex-shrink:0;text-align:center}
.wb-rank-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-rank-dmg{font:600 12px/1 "JetBrains Mono";color:var(--gold2);flex-shrink:0}
.wb-hist-card{display:flex;gap:10px;align-items:flex-start;padding:12px}
.wb-top{font:400 11px/1.5 "Noto Serif SC";color:var(--gold2);margin-top:2px}

/* ---------- P4-② 师徒（复用 .mt-） ---------- */
.mt-form{padding:8px 4px;display:flex;flex-direction:column;gap:8px}
.mt-form input,.mk-form input,.mk-form select{width:100%;box-sizing:border-box;padding:9px 10px;background:var(--scroll-glass);border:1px solid var(--line);color:var(--paper);font:400 13px/1.4 "Noto Serif SC";border-radius:0}
.mt-form input:focus,.mk-form input:focus,.mk-form select:focus{outline:none;border-color:var(--gold)}

/* ---------- P4-③ 交易市集（.mk-） ---------- */
.mk-page{max-width:1200px;margin:0 auto}
.mk-tabs{display:flex;gap:6px;padding:4px 4px 8px;flex-wrap:wrap}
.mk-card{display:flex;gap:10px;align-items:center;padding:12px}
.mk-card.sold{opacity:.5}
.mk-ic{font-size:26px;flex-shrink:0;width:38px;text-align:center}
.mk-body{flex:1;min-width:0}
.mk-act{flex-shrink:0}
.mk-form{padding:6px 4px;display:flex;flex-direction:column;gap:6px}
.mk-form label{font:400 11px/1.4 "Noto Serif SC";color:var(--text3);margin-top:4px}

/* ---------- P4-④ 装备强化（.en-） ---------- */
.en-page{max-width:1200px;margin:0 auto}
.en-card{display:flex;gap:10px;align-items:flex-start;padding:12px}
.en-ic{font-size:26px;flex-shrink:0;width:38px;text-align:center}
.en-body{flex:1;min-width:0}
.en-actions{display:flex;gap:6px;margin-top:8px;align-items:center}
.en-set-card{padding:10px 12px;margin-bottom:8px;background:var(--scroll-glass);border:1px solid var(--line);opacity:.6}
.en-set-card.on{opacity:1;border-color:var(--gold);box-shadow:0 0 0 1px rgba(201,169,97,.2) inset}
.en-set-t{font:700 13px/1.3 "Noto Serif SC";color:var(--paper);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.en-set-card.on .en-set-t{color:var(--gold2)}
.en-set-d{font:400 11px/1.4 "Noto Serif SC";color:var(--text3);margin-top:2px}
.en-preview{padding:4px 4px 8px}
@media (min-width:900px){
  .wb-page,.mk-page,.en-page{max-width:1200px;margin:0 auto}
}

/* ============================================================
 * P5 主线剧情/章节系统（前缀 .st-，卷轴墨韵，零圆角）
 * ============================================================ */
.st-page{max-width:1200px;margin:0 auto}
.st-card{display:flex;gap:12px;padding:12px;margin-bottom:10px;background:var(--scroll-glass);border:1px solid var(--line);cursor:pointer;transition:border-color .15s,box-shadow .15s}
.st-card:hover{border-color:var(--gold);box-shadow:0 0 0 1px rgba(201,169,97,.18) inset}
.st-card.done{border-color:var(--moss);opacity:.85}
.st-card.done .lc-title{color:var(--moss)}
.st-card.locked{opacity:.55;cursor:not-allowed}
.st-card.locked:hover{border-color:var(--line);box-shadow:none}
.st-icon{font-size:24px;line-height:1.2;flex:0 0 auto;color:var(--gold)}
.st-body{flex:1 1 auto;min-width:0}
.st-body .lc-title{font:700 14px/1.3 "Noto Serif SC";color:var(--paper);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.st-body .lc-meta{font:400 12px/1.4 "Noto Serif SC";color:var(--text3);margin-top:2px}
.st-progress{height:6px;background:var(--ink);border:1px solid var(--line);margin-top:8px;overflow:hidden}
.st-bar{height:100%;background:linear-gradient(90deg,var(--orange),var(--gold));transition:width .3s}
.st-card.done .st-bar{background:var(--moss)}
.st-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px;margin-top:6px;font:400 11px/1.3 "JetBrains Mono";color:var(--text3)}
.st-scene{padding:10px 12px;margin:6px 8px;background:var(--ink);border-left:3px solid var(--gold);font:400 13px/1.7 "Noto Serif SC";color:var(--paper);font-style:italic}
.st-steps{padding:0 4px}
.st-step{display:flex;gap:8px;padding:8px 10px;margin-bottom:6px;background:var(--scroll-glass);border:1px solid var(--line);align-items:flex-start}
.st-step.cur{border-color:var(--orange);box-shadow:0 0 0 1px rgba(232,132,62,.2) inset}
.st-step.done{opacity:.6}
.st-step.done .st-step-t{text-decoration:line-through;color:var(--text3)}
.st-step-ic{flex:0 0 auto;font:700 14px/1 "Noto Serif SC";color:var(--gold);min-width:18px;text-align:center}
.st-step.cur .st-step-ic{color:var(--orange)}
.st-step.done .st-step-ic{color:var(--moss)}
.st-step-body{flex:1 1 auto;min-width:0}
.st-step-t{font:500 12px/1.4 "Noto Serif SC";color:var(--paper)}
.st-step-q{font:400 11px/1.4 "Noto Serif SC";color:var(--text3);margin-top:2px}
.st-actions{display:flex;gap:8px;flex-wrap:wrap;padding:10px 8px 8px;align-items:center}
.st-actions .done-btn{flex:1 1 auto;min-width:140px}
@media (min-width:900px){
  .st-page{max-width:760px;margin:0 auto}
}




/* ============================================================
 * 白天模式 · 地图覆盖（2026-09-26）
 * 日间：高德瓦片不反相；marker 文字去黑影
 * ============================================================ */
body.jh-light .leaflet-tile-pane{filter:none}
body.jh-light .jh-node-name,body.jh-light .jh-node-meta,
body.jh-light .node-label,body.jh-light .node-alt{text-shadow:none}
body.jh-light .brand-zh,body.jh-light .route-label{text-shadow:none}

/* ============================================================
 * 左侧路线边栏（跟随日夜模式 · 窄栏 hover 加宽 · 2026-09-26）
 * 默认:上部路线图标(318/219/独库) 下部问号；
 * hover:向右加宽显示 名称+彩色路线小图；问号=帮助页
 * 背景/文字走 --dock-* 变量:黑夜黑玻璃、白天米白卷轴
 * ============================================================ */
:root{
  --dock-bg:rgba(8,10,12,.92);
  --dock-line:rgba(201,169,97,.45);
  --dock-shadow:0 6px 24px rgba(0,0,0,.45);
}
body.jh-light{
  --dock-bg:var(--scroll-glass);
  --dock-line:rgba(154,119,47,.5);
  --dock-shadow:0 6px 24px rgba(90,70,30,.18);
}
.route-dock{
  position:absolute;left:12px;top:100px;z-index:22;
  display:flex;flex-direction:column;gap:4px;
  width:52px;padding:8px 7px;
  background:var(--dock-bg);backdrop-filter:blur(14px);
  border:1px solid var(--dock-line);
  box-shadow:var(--dock-shadow);
  max-height:calc(100% - 280px);
  overflow:hidden;overflow-y:auto;scrollbar-width:none;
  transition:width .22s cubic-bezier(.2,.8,.3,1);
}
.route-dock::-webkit-scrollbar{display:none}
.route-dock:hover,.route-dock:focus-within{width:244px}
.route-dock .rd-item{
  display:flex;align-items:center;gap:10px;width:100%;
  padding:4px 0;background:none;border:none;cursor:pointer;
  flex:0 0 auto;text-align:left;
}
.route-dock .rd-ic{
  flex:0 0 38px;width:38px;height:38px;display:grid;place-items:center;
  border:1px solid var(--rc,#c9a961);color:var(--rc,#c9a961);
  font:800 11px/1 "JetBrains Mono";background:rgba(var(--ink-rgb),.06);
  transition:background .18s,color .18s;
}
.route-dock .rd-ic.rd-q{font:900 20px/1 "Noto Serif SC";color:var(--gold2);border-color:var(--dock-line)}
.route-dock .rd-body{display:none;flex-direction:column;gap:4px;min-width:0;flex:1 1 auto}
.route-dock:hover .rd-body,.route-dock:focus-within .rd-body{display:flex}
.route-dock .rd-name{font:700 13px/1.2 "Noto Serif SC";color:var(--paper);white-space:nowrap}
.route-dock .rd-sub{font:400 10px/1.3 "Noto Serif SC";color:var(--weak);white-space:nowrap}
.route-dock .rd-item.on .rd-ic{background:var(--rc,#c9a961);color:#0a0d0f}
.route-dock .rd-item.on .rd-name{color:var(--gold2)}
.route-dock .rd-flex{flex:1 1 auto;min-height:6px}
.route-dock .rd-mini{width:100%;height:46px;border:1px solid rgba(201,169,97,.25);background:rgba(var(--ink-rgb),.04)}
.route-label{cursor:pointer}
.jh-route-label{pointer-events:auto}
@media (max-width:899px){
  .route-dock{left:8px;top:92px;width:44px;padding:6px 5px;max-height:calc(100% - 320px)}
  .route-dock .rd-ic{flex-basis:32px;width:32px;height:32px;font-size:10px}
  .route-dock:hover,.route-dock:focus-within{width:216px}
}

/* ============================================================
 * 帮助页（#/help · 详细说明含图 · 2026-09-26）
 * ============================================================ */
.help-page{max-width:1200px;margin:0 auto;padding:18px 16px 120px}
.help-page h2{font:900 22px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:3px;margin:26px 0 10px;text-shadow:0 1px 4px rgba(var(--ink-rgb),.8)}
.help-page h2:first-child{margin-top:6px}
.help-page h3{font:700 15px/1.4 "Noto Serif SC";color:var(--gold);letter-spacing:2px;margin:16px 0 6px}
.help-fig{border:1px solid var(--line);background:var(--scroll);padding:10px;margin:12px 0}
.help-fig svg{display:block;width:100%;height:auto}
.help-fig figcaption{font:400 11px/1.6 "Noto Serif SC";color:var(--text3);margin-top:6px;letter-spacing:1px}
.help-page p,.help-page li{font:400 13.5px/1.9 "Noto Serif SC";color:var(--paper)}
.help-page ul{padding-left:20px;margin:8px 0}
.help-page li{margin:4px 0}
.help-page b{color:var(--gold2)}
.help-route-row{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:center;border:1px solid var(--line);background:var(--scroll);padding:10px;margin:8px 0}
.help-route-row svg{width:120px;height:70px;display:block}
.help-route-info .hr-name{font:700 15px/1.3 "Noto Serif SC"}
.help-route-info .hr-meta{font:400 11.5px/1.7 "Noto Serif SC";color:var(--weak);margin-top:2px}
.help-tip{border-left:3px solid var(--gold);background:rgba(201,169,97,.07);padding:10px 12px;margin:10px 0;font:400 12.5px/1.8 "Noto Serif SC";color:var(--paper)}
@media (max-width:600px){.help-route-row{grid-template-columns:1fr}.help-route-row svg{width:100%;height:90px}}

/* ============================================================
 * 帮助页左侧导航菜单（2026-09-26）：桌面左栏 sticky，移动端横向滑动
 * ============================================================ */
.help-layout{display:grid;grid-template-columns:176px minmax(0,1fr);gap:24px;align-items:start}
.help-nav{
  position:sticky;top:76px;
  display:flex;flex-direction:column;gap:2px;
  border:1px solid var(--line);background:var(--scroll);
  padding:10px 8px;box-shadow:var(--dock-shadow);
}
.help-nav .hn-title{font:900 12px/1 "Noto Serif SC";letter-spacing:3px;color:var(--gold);padding:2px 8px 10px}
.help-nav a{
  font:500 12.5px/1 "Noto Serif SC";color:var(--weak);text-decoration:none;
  padding:9px 8px;letter-spacing:1.5px;border-left:2px solid transparent;
  transition:color .15s,background .15s,border-color .15s;
}
.help-nav a:hover{color:var(--gold2);background:rgba(201,169,97,.08)}
.help-nav a.on{color:var(--gold2);border-left-color:var(--gold);background:rgba(201,169,97,.06)}
.help-sec{scroll-margin-top:84px}
.help-main{min-width:0}
.hs-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0}
.hs-stat{
  --sc:#c9a961;
  border:1px solid color-mix(in srgb,var(--sc) 55%,transparent);
  background:color-mix(in srgb,var(--sc) 10%,var(--scroll));
  padding:10px 12px;
}
.hs-stat b{display:block;font:700 13.5px/1.4 "Noto Serif SC";color:var(--sc);letter-spacing:1px}
.hs-stat span{font:400 11px/1.5 "Noto Serif SC";color:var(--weak)}
@media (max-width:899px){
  .help-layout{grid-template-columns:1fr;gap:14px}
  .help-nav{
    position:static;flex-direction:row;overflow-x:auto;scrollbar-width:none;
    gap:6px;padding:8px;
  }
  .help-nav::-webkit-scrollbar{display:none}
  .help-nav .hn-title{display:none}
  .help-nav a{border-left:none;border:1px solid var(--line);white-space:nowrap;padding:7px 12px}
  .help-nav a.on{border-color:var(--gold)}
  .hs-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ============================================================
 * 顶部主菜单图标化（2026-09-26）：只留图标，hover 下方浮出文字
 * 顶栏 tab 结构 <button class="tab" data-label="地图"><span class="ic">🗺</span><span>地图</span></button>
 * ============================================================ */
.topbar-nav .tab{position:relative;flex:0 0 auto}
.topbar-nav .tab > span:not(.ic){display:none}
.topbar-nav .tab::after{
  content:attr(data-label);
  position:absolute;top:calc(100% + 7px);left:50%;
  transform:translateX(-50%) translateY(-4px);
  padding:5px 10px;white-space:nowrap;
  background:var(--dock-bg);backdrop-filter:blur(12px);
  border:1px solid var(--dock-line);
  color:var(--gold2);font:700 11px/1 "Noto Serif SC";letter-spacing:2px;
  opacity:0;pointer-events:none;z-index:70;
  transition:opacity .16s ease,transform .16s ease;
}
.topbar-nav .tab:hover::after,.topbar-nav .tab:focus-visible::after{
  opacity:1;transform:translateX(-50%) translateY(0);
}

/* ============================================================
 * 夺舍附身（2026-09-26）
 * ============================================================ */
.poss-pend{
  position:absolute;top:6px;right:8px;min-width:16px;height:16px;padding:0 4px;
  border-radius:8px;background:#b0432a;color:#fff;font:700 10px/16px serif;text-align:center;
}
.poss-hint{font-size:11px;line-height:1.6;text-align:center;padding:2px 4px}

/* —— f79 附身卡（行者卡内） —— */
.poss-card{
  margin:8px 0 10px;padding:12px 14px;border-radius:14px;position:relative;overflow:hidden;
  border:1px solid rgba(201,169,97,.5);
  background:
    radial-gradient(130% 90% at 50% -20%,rgba(201,169,97,.16),transparent 55%),
    color-mix(in srgb,var(--dock-bg) 72%,transparent);
  box-shadow:0 6px 22px rgba(0,0,0,.35),inset 0 0 0 1px rgba(201,169,97,.08);
  animation:psEv .35s ease both;
}
.poss-card::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(242,217,140,.10) 45%,transparent 60%);
  background-size:220% 100%;animation:pcSheen 4.5s ease-in-out infinite;
}
@keyframes pcSheen{0%{background-position:120% 0}55%{background-position:-60% 0}100%{background-position:-60% 0}}
.pc-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.pc-eye{
  flex:0 0 34px;width:34px;height:34px;border-radius:50%;position:relative;
  border:1.5px solid var(--gold);
  background:radial-gradient(circle at 50% 42%,rgba(242,217,140,.35),rgba(36,29,14,.9) 70%);
  animation:pcEyePulse 2.6s ease-in-out infinite;
}
.pc-eye i{position:absolute;left:50%;top:50%;width:14px;height:9px;transform:translate(-50%,-50%);border-radius:50%;background:var(--gold2)}
.pc-eye i::after{content:"";position:absolute;left:50%;top:50%;width:4px;height:4px;transform:translate(-50%,-50%);border-radius:50%;background:#241d0e}
@keyframes pcEyePulse{0%,100%{box-shadow:0 0 0 0 rgba(201,169,97,.5)}50%{box-shadow:0 0 0 6px rgba(201,169,97,0)}}
.pc-tt{display:flex;flex-direction:column;line-height:1.35;flex:1 1 auto;min-width:0}
.pc-tt b{font:700 15px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:2px}
.pc-tt span{font-size:11.5px;color:var(--weak)}
.pc-cost{flex:0 0 auto;font-size:10.5px;color:var(--gold2);border:1px solid rgba(201,169,97,.45);border-radius:999px;padding:2px 8px;opacity:.9}
.pc-actions{display:flex;gap:8px;flex-wrap:wrap}
.pc-btn{
  flex:1 1 46%;min-width:150px;display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:9px 10px;border-radius:11px;cursor:pointer;
  font:700 14px/1.2 "Noto Serif SC";letter-spacing:1px;
  transition:transform .12s ease,box-shadow .2s ease;
}
.pc-btn:active{transform:scale(.97)}
.pc-gold{
  border:1px solid var(--gold);
  background:linear-gradient(180deg,#3a2f17,#241d0e);color:var(--gold2);
  box-shadow:0 4px 14px rgba(201,169,97,.25);
}
.pc-gold:hover{box-shadow:0 6px 20px rgba(201,169,97,.4)}
.pc-danger{
  border:1px solid #b8442f;
  background:linear-gradient(180deg,#3a1a14,#241009);color:#f0b8a8;
  box-shadow:0 4px 14px rgba(184,68,47,.22);
}
.pc-danger:hover{box-shadow:0 6px 20px rgba(184,68,47,.38)}
.pc-sub2{font-size:10.5px;font-weight:400;opacity:.75;letter-spacing:.5px}
.pc-rate{
  font-size:11px;padding:1px 8px;border-radius:999px;margin-top:2px;
  border:1px solid rgba(240,184,168,.5);background:rgba(184,68,47,.25);
}
.pc-sub{margin-top:9px;font-size:11px;line-height:1.7;color:var(--weak);text-align:center}
.pc-sub b{color:var(--gold2)}
.poss-card.pc-active .pc-eye{animation-duration:1.2s}
.poss-card.pc-busy{opacity:.75;border-style:dashed}
.poss-card.pc-busy .pc-eye{filter:grayscale(.6);animation:none}
.poss-card .pc-btn{width:100%}
.poss-card .pc-actions{flex-direction:column}
.poss-card .pc-actions .pc-btn{flex-direction:row;justify-content:center;gap:8px}
@media (prefers-reduced-motion:reduce){
  .poss-card::after,.pc-eye{animation:none!important}
}
.poss-badge2{
  display:inline-block;min-width:18px;padding:0 5px;border-radius:9px;height:18px;
  background:#b0432a;color:#fff;font:700 11px/18px serif;text-align:center;vertical-align:2px;
}
.poss-item{
  border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:8px 0;
  background:rgba(201,169,97,.05);
}
.poss-item-h{display:flex;align-items:center;gap:8px;font-size:14px;flex-wrap:wrap}
.poss-ava{
  width:30px;height:30px;flex:0 0 30px;border-radius:50%;display:grid;place-items:center;
  background:hsla(38,45%,58%,.18);font-size:16px;
}
.poss-msg{font-size:12px;line-height:1.7;margin:5px 0 2px 38px}
.poss-item-b{display:flex;gap:8px;margin-top:6px;margin-left:38px;flex-wrap:wrap}
.poss-tag{
  font:700 10px/1.6 "Noto Serif SC";letter-spacing:1px;padding:1px 8px;border-radius:9px;
  border:1px solid var(--line);color:var(--weak);
}
.poss-tag.ask{color:var(--gold2);border-color:rgba(201,169,97,.5)}
.poss-tag.force{color:#d98a7a;border-color:rgba(176,67,42,.55)}
.poss-tag.active,.poss-tag.pending{color:var(--gold2)}
.poss-tag.rejected,.poss-tag.ended{opacity:.6}

/* —— 第一人称游历页 —— */
/* —— f80 附身页：全屏游戏化 HUD —— */
.possess-page.pf{padding:0;max-width:none;margin:0 calc(50% - 50vw)}
.pf-topbar{
  display:flex;align-items:center;gap:8px;padding:8px 12px;
  background:linear-gradient(180deg,rgba(8,10,14,.92),rgba(8,10,14,.55) 80%,transparent);
  position:relative;z-index:6;
}
.pf-back{
  flex:0 0 30px;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  border:1px solid rgba(201,169,97,.5);color:var(--gold2);font-size:18px;line-height:1;
  background:rgba(20,24,29,.6);backdrop-filter:blur(6px);
}
.pf-route{flex:1 1 auto;min-width:0;line-height:1.35}
.pf-route-name{font:700 14px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:1px;text-shadow:0 1px 4px #000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf-route-sub{font-size:11px;color:rgba(232,224,208,.75);text-shadow:0 1px 3px #000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf-route-sub b{color:var(--gold2)}
.pf-end{
  flex:0 0 auto;padding:7px 14px;border-radius:999px;cursor:pointer;
  border:1px solid #b8442f;background:linear-gradient(180deg,rgba(58,26,20,.85),rgba(36,16,9,.85));
  color:#f0b8a8;font:700 12.5px/1 "Noto Serif SC";letter-spacing:2px;backdrop-filter:blur(6px);
}
.pf-end:active{transform:scale(.96)}
/* 场景全屏化：顶导脱离文档流叠加在场景上，场景占满可视区 */
.possess-page.pf{position:relative}
.possess-page.pf .pf-topbar{position:absolute;top:0;left:0;right:0}
.possess-page.pf .poss-stage-wrap{
  border:none;border-radius:0;margin:0;
  height:calc(100svh - 176px);min-height:480px;
}
.possess-page.pf .poss-stage-wrap::after{border-radius:0}
.poss-scene{display:block;width:100%;height:100%}
/* HUD 覆盖层 */
.pf-hud{position:absolute;inset:0;pointer-events:none;z-index:4;display:flex;flex-direction:column;justify-content:space-between;padding:12px}
.pf-hud-top{display:flex;justify-content:flex-start;padding-top:46px}
.pf-who{
  display:flex;align-items:center;gap:9px;padding:7px 14px 7px 8px;border-radius:999px;
  background:rgba(10,13,18,.55);border:1px solid rgba(201,169,97,.4);backdrop-filter:blur(8px);
}
.pf-who-eye{width:26px;height:26px;border-radius:50%;position:relative;flex:0 0 26px;
  border:1.5px solid var(--gold);background:radial-gradient(circle at 50% 42%,rgba(242,217,140,.35),rgba(36,29,14,.9) 70%);
  animation:pcEyePulse 2.6s ease-in-out infinite}
.pf-who-eye i{position:absolute;left:50%;top:50%;width:11px;height:7px;transform:translate(-50%,-50%);border-radius:50%;background:var(--gold2)}
.pf-who-eye i::after{content:"";position:absolute;left:50%;top:50%;width:3px;height:3px;transform:translate(-50%,-50%);border-radius:50%;background:#241d0e}
.pf-who-tx{line-height:1.25}
.pf-who-tx b{display:block;font:700 13.5px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:1px;text-shadow:0 1px 3px #000}
.pf-who-tx span{font-size:10.5px;color:rgba(232,224,208,.7)}
.pf-hud-bottom{display:flex;flex-direction:column;gap:8px;padding-bottom:112px}
.pf-bars{display:flex;flex-direction:column;gap:6px;max-width:340px}
.pf-bar{position:relative;height:16px;border-radius:999px;overflow:hidden;background:rgba(8,10,14,.6);border:1px solid rgba(201,169,97,.35);backdrop-filter:blur(6px)}
.pf-bar i{position:absolute;inset:1px auto 1px 1px;border-radius:999px;transition:width .5s ease}
.pf-bar.hp i{background:linear-gradient(90deg,#8c2f24,#c65a3a,#e8935a)}
.pf-bar.st i{background:linear-gradient(90deg,#5a7a3f,#8fae5e,#c9d98a)}
.pf-bar span{position:absolute;inset:0;display:grid;place-items:center;font:600 10px/1 "Noto Serif SC";color:#fff;text-shadow:0 1px 2px #000;letter-spacing:1px}
.pf-chips{display:flex;gap:8px}
.pf-chip{
  padding:5px 12px;border-radius:999px;font-size:12px;color:rgba(232,224,208,.9);
  background:rgba(10,13,18,.55);border:1px solid rgba(201,169,97,.35);backdrop-filter:blur(6px);
}
.pf-chip b{color:var(--gold2);margin:0 3px;font-size:13px}
/* 事件卡：玻璃拟态 + 金章 */
.poss-event-card{
  pointer-events:auto;margin:0 12px 12px;padding:14px 16px;border-radius:14px;
  background:rgba(10,13,18,.72);backdrop-filter:blur(14px);
  border:1px solid rgba(201,169,97,.6);
  box-shadow:0 10px 34px rgba(0,0,0,.55),inset 0 1px 0 rgba(242,217,140,.12);
  animation:psEv .28s ease both;
}
@keyframes psEv{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.poss-ev-h{display:flex;align-items:center;gap:8px;font:700 16px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.poss-ev-h::before,.poss-ev-h::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(201,169,97,.5))}
.poss-ev-h::after{background:linear-gradient(90deg,rgba(201,169,97,.5),transparent)}
.poss-ev-icon{font-size:20px}
.poss-ev-text{font-size:13.5px;line-height:1.8;margin:8px 0 12px;color:rgba(232,224,208,.95)}
.poss-ev-opts{display:flex;gap:10px;flex-wrap:wrap}
.pf-evbtn{
  flex:1 1 auto;min-width:150px;display:flex;align-items:center;justify-content:center;gap:8px;
  padding:13px 16px;border-radius:12px;cursor:pointer;text-decoration:none;
  border:1px solid rgba(201,169,97,.45);color:var(--paper);
  background:rgba(20,24,29,.65);font:700 14px/1.3 "Noto Serif SC";
  transition:transform .12s ease,box-shadow .2s ease,border-color .2s;
}
.pf-evbtn:hover{border-color:var(--gold2);box-shadow:0 4px 18px rgba(201,169,97,.25)}
.pf-evbtn:active{transform:scale(.97)}
.pf-evbtn.gold{
  border:1px solid var(--gold);color:var(--gold2);
  background:linear-gradient(180deg,#3a2f17,#241d0e);
  box-shadow:0 4px 16px rgba(201,169,97,.28);
}
.pf-evbtn-n{
  flex:0 0 20px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;
  border:1px solid currentColor;font-size:11px;font-weight:400;opacity:.8;
}
/* 前行按钮：大圆盘 + 呼吸光环，场景内底部居中 */
.poss-go{
  position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:6;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  width:88px;height:88px;border-radius:50%;cursor:pointer;
  border:2px solid var(--gold);color:var(--gold2);
  background:radial-gradient(circle at 50% 38%,#3a2f17,#1a1408 75%);
  font:700 15px/1.2 "Noto Serif SC";letter-spacing:2px;
  box-shadow:0 8px 30px rgba(0,0,0,.6),inset 0 1px 0 rgba(242,217,140,.25);
  transition:transform .12s ease;
}
.poss-go:active{transform:translateX(-50%) scale(.95)}
.pf-go-ring{position:absolute;inset:-2px;border-radius:50%;border:2px solid rgba(201,169,97,.6);animation:pfGoPulse 2s ease-out infinite;pointer-events:none}
@keyframes pfGoPulse{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.35);opacity:0}}
.pf-go-cost{font-size:10.5px;letter-spacing:.5px;opacity:.75;font-weight:400}
/* 事件出现时让位给事件卡 */
.poss-stage-mask{position:absolute;inset:0;pointer-events:none;display:flex;flex-direction:column;justify-content:flex-end}
.possess-page.pf .poss-stage-mask{z-index:7;inset:auto 0 0 0;min-height:280px;justify-content:flex-start;transform:translateY(26px)}
.possess-page.pf .poss-stage-mask .poss-event-card{margin:0 12px 16px}
/* 日志：透明玻璃、紧凑 */
.pf-log{
  margin:0;border:none;border-top:1px solid rgba(201,169,97,.2);border-radius:0;
  padding:6px 14px;max-height:64px;overflow-y:auto;font-size:12px;line-height:1.6;
  background:rgba(8,10,14,.9);
}
.poss-log-line{display:flex;gap:8px;padding:3px 0}
.poss-log-line span{flex:0 0 20px;text-align:center}
.poss-log-line b{color:var(--gold2);font-weight:600}
.poss-log-line.kind-event b{color:#e3c987}
.poss-log-line.kind-choice{color:var(--weak)}
.poss-log-line.kind-end b{color:#d98a7a}
/* 结算页：全屏金章 */
.pf-sum{
  min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:40px 20px;gap:4px;
}
.pf-sum-eye{
  width:72px;height:72px;border-radius:50%;position:relative;margin-bottom:14px;
  border:2px solid var(--gold);
  background:radial-gradient(circle at 50% 42%,rgba(242,217,140,.4),rgba(36,29,14,.95) 72%);
  animation:pcEyePulse 2.4s ease-in-out infinite;
  box-shadow:0 0 40px rgba(201,169,97,.3);
}
.pf-sum-eye i{position:absolute;left:50%;top:50%;width:30px;height:19px;transform:translate(-50%,-50%);border-radius:50%;background:var(--gold2)}
.pf-sum-eye i::after{content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;transform:translate(-50%,-50%);border-radius:50%;background:#241d0e}
.pf-sum h2{font:900 30px/1.3 "Noto Serif SC";letter-spacing:8px;color:var(--gold2);margin:0;text-shadow:0 0 24px rgba(201,169,97,.35)}
.pf-sum-sub{font-size:13px;color:var(--weak);margin-top:6px}
.pf-sum-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:26px 0;max-width:420px;width:100%}
.pf-sum-grid div{
  border:1px solid rgba(201,169,97,.4);border-radius:14px;padding:16px 6px;
  background:linear-gradient(180deg,rgba(201,169,97,.1),transparent);
}
.pf-sum-grid b{display:block;font:900 26px/1.2 "JetBrains Mono";color:var(--gold2)}
.pf-sum-grid span{font-size:12px;color:var(--weak)}
.pf-sum-btns{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
@media (prefers-reduced-motion:reduce){
  .pf-go-ring,.pf-who-eye,.pf-sum-eye{animation:none!important}
  .pf-bar i{transition:none}
}

/* —— SVG 墨韵场景：f78 右行四视角，四档速度，昼/夜配色 —— */
.poss-scene.mode-car{--dashD:.45s;--sideD:2.4s;--onD:3s;--bobd:.7s}
.poss-scene.mode-moto{--dashD:.6s;--sideD:3s;--onD:3.8s;--bobd:.45s}
.poss-scene.mode-bike{--dashD:1.15s;--sideD:5.2s;--onD:6.5s;--bobd:.55s}
.poss-scene.mode-walk{--dashD:2.4s;--sideD:10s;--onD:15s;--bobd:.55s}
.psgSky1{stop-color:#8fc1e3}.psgSky2{stop-color:#cfe3ec}.psgSky3{stop-color:#f7e9c4}
.psgGnd1{stop-color:#a89a72}.psgGnd2{stop-color:#6f6a52}
.psgRoad1{stop-color:#6b675a}.psgRoad2{stop-color:#3c3a33}
.psgHood1{stop-color:#23262c}.psgHood2{stop-color:#101216}
.psgVig1{stop-color:#000;stop-opacity:0}.psgVig2{stop-color:#000;stop-opacity:.42}
.poss-scene.night .psgSky1{stop-color:#070c18}.poss-scene.night .psgSky2{stop-color:#131f36}.poss-scene.night .psgSky3{stop-color:#233450}
.poss-scene.night .psgGnd1{stop-color:#14181f}.poss-scene.night .psgGnd2{stop-color:#10141b}
.poss-scene.night .psgRoad1{stop-color:#2a2b31}.poss-scene.night .psgRoad2{stop-color:#1c1d22}
.poss-scene.night .psgHood1{stop-color:#0a0c10}.poss-scene.night .psgHood2{stop-color:#07090d}
.poss-scene.night .psgVig2{stop-opacity:.6}
.ps-far-fill{fill:#aebfcb}
.ps-near-fill{fill:#5d6f6a}
.ps-snow{fill:#f4f7f9;opacity:.92}
.poss-scene.night .ps-far-fill{fill:#1b2740}
.poss-scene.night .ps-near-fill{fill:#0e1522}
.poss-scene.night .ps-snow{fill:#5a6a80;opacity:.5}
.ps-sun{fill:#fff3c4;filter:drop-shadow(0 0 8px rgba(242,217,140,.55));animation:psSunGlow 6s ease-in-out infinite alternate}
.ps-moon{fill:#e8e4d4;filter:drop-shadow(0 0 6px rgba(200,210,235,.45));animation:psMoonGlow 7s ease-in-out infinite alternate}
.ps-moon-cut{fill:#0d1526}
@keyframes psSunGlow{from{filter:drop-shadow(0 0 4px rgba(242,217,140,.3))}to{filter:drop-shadow(0 0 20px rgba(242,217,140,.95))}}
@keyframes psMoonGlow{from{filter:drop-shadow(0 0 3px rgba(200,210,235,.25))}to{filter:drop-shadow(0 0 16px rgba(200,210,235,.75))}}
.ps-star{fill:#f4ecd6;opacity:.85;animation:psTwinkle 1.8s ease-in-out infinite alternate}
@keyframes psTwinkle{from{opacity:.25}to{opacity:.95}}
.ps-clouds{fill:#fff;opacity:.55;animation:psMove 90s linear infinite}
.poss-scene.night .ps-clouds{fill:#232f42;opacity:.4}
.ps-clouds{will-change:transform}
@keyframes psMove{to{transform:translateX(-720px)}}
/* f90 山纵深逼近：朝山行进山越变越大（绕灭点 270,205 放大，两相位无缝），不再横向滚动 */
.ps-mtn{transform-box:view-box;transform-origin:270px 205px;will-change:transform,opacity}
.ps-mtn-far{animation:psMtnFar 46s linear infinite}
.ps-mtn-near{animation:psMtnNear 26s linear infinite}
.ps-mtn-b{animation-delay:-23s}
.ps-mtn-near.ps-mtn-b{animation-delay:-13s}
@keyframes psMtnFar{0%{transform:scale(.92);opacity:0}9%{opacity:1}80%{opacity:1}100%{transform:scale(1.5);opacity:0}}
@keyframes psMtnNear{0%{transform:scale(.9);opacity:0}10%{opacity:1}78%{opacity:1}100%{transform:scale(1.62);opacity:0}}
.ps-edge{stroke:#d8d2c0;stroke-width:2.5;opacity:.75}
.poss-scene.night .ps-edge{stroke:#4a4636;opacity:.5}
.ps-dash{stroke:var(--gold);stroke-width:4;stroke-dasharray:16 26;animation:psDash var(--dashD,.7s) linear infinite}
.poss-scene.night .ps-dash{opacity:.6}
@keyframes psDash{to{stroke-dashoffset:-42}}
/* 路边实景：贴地从地平线移近（经旙/玛尼堆/牦牛/电线杆） */
.ps-side{will-change:transform,opacity;transform-box:fill-box;transform-origin:50% 100%}
.ps-side-r{animation:psSideR var(--sideD,2.4s) linear infinite}
.ps-side-r2{animation-delay:calc(var(--sideD,2.4s)*-.5)}
.ps-side-l{animation:psSideL var(--sideD,2.4s) linear infinite}
.ps-side-l2{animation-delay:calc(var(--sideD,2.4s)*-.67)}
@keyframes psSideR{0%{transform:translate(0,0) scale(.15);opacity:0}8%{opacity:1}92%{opacity:1}100%{transform:translate(320px,112px) scale(1.25);opacity:0}}
@keyframes psSideL{0%{transform:translate(0,0) scale(.15);opacity:0}8%{opacity:1}92%{opacity:1}100%{transform:translate(-320px,112px) scale(1.25);opacity:0}}
.ps-pole{stroke:#3a3f45;stroke-width:2}
.ps-pole2{stroke:#3a3f45;stroke-width:2.5}
.ps-wire{stroke:#8a8578;stroke-width:1;fill:none}
.poss-scene.night .ps-pole,.poss-scene.night .ps-pole2{stroke:#22262c}
.poss-scene.night .ps-wire{stroke:#3a3f45}
.ps-flag{fill:#d9b45c}.ps-flag2{fill:#b8442f}.ps-flag3{fill:#4a7fb5}.ps-flag4{fill:#e8e2d2}.ps-flag5{fill:#3f7a52}
.ps-mani{fill:#6a6558}.ps-mani2{fill:#7d7668}.ps-mani3{fill:#8d8676}
.ps-yak{fill:#2a2e35}.ps-yak-h{stroke:#2a2e35;stroke-width:1.5}.ps-yak-l{stroke:#2a2e35;stroke-width:2}
/* 车流：对向来车/超车/前方慢车 */
.ps-oncoming,.ps-overtake{will-change:transform,opacity;transform-box:fill-box;transform-origin:50% 100%}
.ps-oncoming{animation:psOncoming calc(var(--onD,3s)*2) linear infinite}
/* f99 超车全流程常识化（修 f97 遗留：超车只在左道缩小消失、不并回右道；拐点急+scale 早缩导致"抖/变大变小异常"）：
   右道追上（0~28%）→ 慢车正后方斜前变道到左道（28~50%，23 帧密折线拟弧）→
   左道并行越过慢车（50~66%，尺度 1.02 平台稳定不缩）→ 越过慢车 18px 后斜并回右道（66~90%）→
   右道内继续驶向灭点淡出（90~100%，全程在动不再定格）。
   scale 追近单调增、超越平台、远离单调减；delay 系数 -.2167。
   f99 对向车改为与超车同周期（onD*2）锁相编排：对向来车在超车占用左道窗口（约 17%~71%）内不来车
   （9%~60% visibility:hidden 无车），消除"逆行窗口里必然撞上对向车"的结构碰撞；
   上一辆 0~8% 在左道近场正常会车后驶出，下一辆 68% 起从灭点逼近，此时超车已并回右道 */
.ps-overtake{animation:psOvertake calc(var(--onD,3s)*2) linear infinite;animation-delay:calc(var(--onD,3s)*-.2167)}
.ps-ahead{animation:psAhead 4s ease-in-out infinite alternate}
/* f97 有横穿者（前车停下）时不允许超车：超车车直接不出现，避免压横穿者/停驶前车 */
.ps-overtake.rs-hide{display:none}
/* f101 对向车从远到近渐进：68% 灭点小点 → 100% 近场全尺寸，中间 8 帧平滑过渡，不再突兀冒出 */
@keyframes psOncoming{0%{transform:translate(-55px,110px) scale(1);opacity:1;visibility:visible}8%{transform:translate(-72px,130px) scale(1.07);opacity:0;visibility:visible}9%{transform:translate(0,0) scale(.12);opacity:0;visibility:hidden}60%{transform:translate(0,0) scale(.12);opacity:0;visibility:hidden}64%{transform:translate(0,0) scale(.12);opacity:0;visibility:visible}68%{transform:translate(0,0) scale(.12);opacity:1;visibility:visible}72%{transform:translate(-2px,4px) scale(.16);opacity:1}76%{transform:translate(-5px,10px) scale(.22);opacity:1}80%{transform:translate(-9px,18px) scale(.30);opacity:1}84%{transform:translate(-14px,28px) scale(.40);opacity:1}88%{transform:translate(-20px,40px) scale(.52);opacity:1}92%{transform:translate(-28px,55px) scale(.66);opacity:1}96%{transform:translate(-38px,75px) scale(.82);opacity:1}100%{transform:translate(-55px,110px) scale(1);opacity:1;visibility:visible}}
@keyframes psOvertake{0%{transform:translate(230px,48px) scale(.40);opacity:0}6%{opacity:1}10%{transform:translate(212px,34px) scale(.58)}18%{transform:translate(194px,18px) scale(.76)}24%{transform:translate(172px,2px) scale(.90)}28%{transform:translate(156px,-10px) scale(.96)}32%{transform:translate(132px,-12px) scale(.98)}36%{transform:translate(102px,-14px) scale(.99)}40%{transform:translate(78px,-17px) scale(1)}44%{transform:translate(62px,-22px) scale(1.01)}47%{transform:translate(57px,-27px) scale(1.015)}50%{transform:translate(55px,-32px) scale(1.02)}54%{transform:translate(54px,-52px) scale(1.02)}58%{transform:translate(53px,-72px) scale(1.02)}62%{transform:translate(55px,-92px) scale(1)}66%{transform:translate(57px,-112px) scale(.92)}70%{transform:translate(61px,-120px) scale(.80)}74%{transform:translate(66px,-124px) scale(.68)}78%{transform:translate(72px,-128px) scale(.56)}82%{transform:translate(78px,-132px) scale(.46)}86%{transform:translate(82px,-136px) scale(.38)}90%{transform:translate(84px,-139px) scale(.30)}94%{transform:translate(82px,-141px) scale(.24)}97%{transform:translate(80px,-142px) scale(.20);opacity:.6}100%{transform:translate(78px,-143px) scale(.18);opacity:0}}
@keyframes psAhead{from{transform:translateX(-3px)}to{transform:translateX(3px)}}
.ps-vb1{fill:#5a3e36}.ps-vg1{fill:#3a2e28}.ps-vb2{fill:#2e3a4a}.ps-vg2{fill:#1c2530}.ps-vb3{fill:#3f4a3a}.ps-vg3{fill:#2a3328}
.ps-vl{fill:#fff8e0}.ps-vt{fill:#e84c3d}
.ps-vtire{fill:#1a1d20}
.poss-scene.night .ps-vb1{fill:#33221c}.poss-scene.night .ps-vb2{fill:#161e28}.poss-scene.night .ps-vb3{fill:#232b22}
.poss-scene.night .ps-vl{filter:drop-shadow(0 0 6px rgba(255,248,224,.95))}
.poss-scene.night .ps-vt{filter:drop-shadow(0 0 5px rgba(232,76,61,.9))}
/* ============ f88 路边实景生态 ============ */
/* f98 阴影收淡：远车/路侧实体底不再是一个托着车的深⭕，只是接地的淡投影 */
.rs-shadow{fill:rgba(24,18,10,.16)}
.poss-scene.night .rs-shadow{fill:rgba(0,0,0,.34)}
/* 远处草原畜群剪影 */
.rs-far{fill:#6a5e4c;stroke:#6a5e4c;animation:rsFar 58s linear infinite;transform-box:fill-box;transform-origin:50% 100%}
.poss-scene.night .rs-far{fill:#2a3450;stroke:#2a3450}
/* f100：远景畜群近乎静止的极缓慢纵深蠕动（向灭点方向一点点移近+微放大，58s 一个循环） */
@keyframes rsFar{0%{transform:translate(0,0) scale(1)}50%{transform:translate(var(--fx,0),2px) scale(1.05)}100%{transform:translate(0,0) scale(1)}}
/* 夜间整层压暗（动物/人物/植物自然融入夜色） */
.poss-scene.night .rs-world{filter:brightness(.56) saturate(.78)}
/* 路人挥手 */
.rs-wave{transform-box:fill-box;transform-origin:0% 88%;animation:rsArmWave 1.3s ease-in-out infinite}
@keyframes rsArmWave{0%,100%{transform:rotate(-20deg)}50%{transform:rotate(24deg)}}
/* 沙鼠快速横穿路肩 */
.rs-dart{will-change:transform}
.rs-dart.ltr{animation:rsDartL linear infinite}
.rs-dart.rtl{animation:rsDartR linear infinite}
@keyframes rsDartL{from{transform:translateX(-46px)}to{transform:translateX(766px)}}
@keyframes rsDartR{from{transform:translateX(766px)}to{transform:translateX(-46px)}}
/* 畜群过马路 */
.rs-cross{will-change:transform}
.rs-cross.ltr{animation:rsCrossL linear infinite}
.rs-cross.rtl{animation:rsCrossR linear infinite}
@keyframes rsCrossL{from{transform:translateX(-86px)}to{transform:translateX(806px)}}
@keyframes rsCrossR{from{transform:translateX(806px)}to{transform:translateX(-86px)}}
/* 畜群过路时前车停稳（不左右游移） */
/* f94 畜群过路时前车靠右停让（下移到 y≈280 右车道中心，车顶 255 低于畜群脚线 250——绝不重叠穿车） */
.ps-ahead.rs-stopped{animation:none;transform:translate(20px,26px)}
/* f91 近景实体掠过：灭点小点 → 放大至路侧 → 继续放大向侧后方掠出画面（位置相对角色，周期随车速 --sideD） */
.rs-pass{transform-box:fill-box;transform-origin:50% 100%;will-change:transform,opacity;animation:rsPass calc(var(--sideD,2.4s)*2.8) linear infinite;animation-delay:var(--pl,0s)}
@keyframes rsPass{0%{transform:translate(var(--sx,246px),var(--sy,208px)) scale(.05);opacity:0}12%{opacity:1}72%{transform:translate(var(--ex),var(--ey)) scale(1);opacity:1}100%{transform:translate(calc(var(--ex) + var(--dx,0px)),calc(var(--ey) + 74px)) scale(1.45);opacity:0}}
/* f90 动物呼吸（轻微起伏，可爱感）；f92 错拍：掠过实体 2.2s / 过路畜群 2.9s，不同主体不同步 */
.rs-soft{transform-box:fill-box;transform-origin:50% 100%;animation:rsBreath 2.6s ease-in-out infinite}
.rs-pass .rs-soft{animation-duration:2.2s}
.rs-cross .rs-soft{animation-duration:2.9s}
@keyframes rsBreath{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.045)}}
/* f91 畜群步行颠簸（个体随机周期 alternate 上下） */
.rs-bob{transform-box:fill-box;transform-origin:50% 100%;animation:rsBob .6s ease-in-out infinite alternate}
@keyframes rsBob{to{transform:translateY(-1.4px)}}
/* f98 步行者：双腿绕髋前后交替迈步（fill-box 顶边中点=髋/肩关节），双臂与腿反相；
   步频 1.05s 慢行，腿摆 ±22° 步幅小——路人是一步步走，不是飘 */
.rs-wleg-l,.rs-wleg-r,.rs-warm-l,.rs-warm-r{transform-box:fill-box;transform-origin:50% 0%}
.rs-wleg-l{animation:rsLegL 1.05s ease-in-out infinite}
.rs-wleg-r{animation:rsLegR 1.05s ease-in-out infinite}
.rs-warm-l{animation:rsArmL 1.05s ease-in-out infinite}
.rs-warm-r{animation:rsArmR 1.05s ease-in-out infinite}
.rs-wbob{animation:rsWalkBob 1.05s ease-in-out infinite}
@keyframes rsLegL{0%,100%{transform:rotate(22deg)}50%{transform:rotate(-20deg)}}
@keyframes rsLegR{0%,100%{transform:rotate(-20deg)}50%{transform:rotate(22deg)}}
@keyframes rsArmL{0%,100%{transform:rotate(-17deg)}50%{transform:rotate(14deg)}}
@keyframes rsArmR{0%,100%{transform:rotate(14deg)}50%{transform:rotate(-17deg)}}
@keyframes rsWalkBob{0%,100%{transform:translateY(0)}25%,75%{transform:translateY(-.6px)}}
/* f98 骑行者：轱辘辐条持续转动（真圆轮子要滚），车身随踩踏轻伏 */
.rs-spin{transform-box:fill-box;transform-origin:center;animation:rsSpin .55s linear infinite}
.rs-cbob{animation:rsCycleBob .38s ease-in-out infinite alternate}
@keyframes rsSpin{to{transform:rotate(360deg)}}
@keyframes rsCycleBob{from{transform:translateY(0)}to{transform:translateY(-.5px)}}
/* 停车等待按钮 */
.poss-go-wait{background:linear-gradient(135deg,#6b5a2e,#453a20)!important;color:#ecd9a4!important;border-color:#8a7436!important;cursor:wait;animation:rsWaitPulse 1.6s ease-in-out infinite}
.poss-go-wait b{color:#ffe9b0;font-size:1.15em;margin:0 .15em}
@keyframes rsWaitPulse{0%,100%{box-shadow:0 0 0 rgba(201,169,97,0)}50%{box-shadow:0 0 24px rgba(201,169,97,.35)}}
/* 车灯光锥（夜间可见） */
.ps-hl{fill:#ffdf9a;opacity:0}
.poss-scene.night .ps-hl{opacity:.16}
/* f89 车内后视镜：反射渐变 + 镜中地平线 + 后方来车小影 */
.ps-mirror-frame{fill:#15181d;stroke:#3a3f45;stroke-width:1}
.ps-mirror-m{stroke:#20242a;stroke-width:3;stroke-linecap:round}
.ps-mirror-arm{stroke:#20242a;stroke-width:2;opacity:.8}
.psgMirror1{stop-color:#8fb4d4}.psgMirror2{stop-color:#cfc9b8}.psgMirror3{stop-color:#7a7466}.psgMirror4{stop-color:#57524a}
.poss-scene.night .psgMirror1{stop-color:#1c2434}.poss-scene.night .psgMirror2{stop-color:#2a3450}.poss-scene.night .psgMirror3{stop-color:#1a2028}.poss-scene.night .psgMirror4{stop-color:#10151c}
.ps-mirror-hz{stroke:rgba(40,35,25,.45);stroke-width:1}
.ps-mirror-car{fill:#3a2f28;opacity:.85}
.poss-scene.night .ps-mirror-car{fill:#181c22}
/* f89 地平线远景薄雾（空气透视，远处景物自然融入） */
.psgHaze1{stop-color:#fff8ea;stop-opacity:0}.psgHaze2{stop-color:#fff8ea;stop-opacity:.18}.psgHaze3{stop-color:#fff8ea;stop-opacity:0}
.poss-scene.night .psgHaze1{stop-color:#aebbd0;stop-opacity:0}.poss-scene.night .psgHaze2{stop-color:#aebbd0;stop-opacity:.08}.poss-scene.night .psgHaze3{stop-color:#aebbd0;stop-opacity:0}
.ps-glare{fill:#fff;opacity:.06}
.poss-scene.night .ps-glare{opacity:0}
/* f93 车窗玻璃渐变（白天泛天光、夜间深暗） */
.psgGlass1{stop-color:#e6eef4}.psgGlass2{stop-color:#a9bcc9}
.poss-scene.night .psgGlass1{stop-color:#1c2434}.poss-scene.night .psgGlass2{stop-color:#0e1622}
/* 前景四视角 */
.ps-fg{animation:psBob var(--bobd,.6s) ease-in-out infinite alternate}
.poss-scene.mode-walk .ps-fg{animation:none}
.poss-scene.mode-walk .ps-bg{animation:psBob .55s ease-in-out infinite alternate}
@keyframes psBob{from{transform:translateY(0)}to{transform:translateY(2.5px)}}
.ps-hood{fill:url(#psgHood)}
.ps-hood-hl{stroke:#fff;stroke-width:2;opacity:.12}
.poss-scene.night .ps-hood-hl{opacity:.05}
.ps-trim{stroke:var(--gold);stroke-width:2;opacity:.35}
.ps-pillar{fill:#0b0d11;opacity:.92}
.poss-scene.night .ps-pillar{fill:#05070b;opacity:.95}
.ps-mirror-m{stroke:#10131a;stroke-width:4}
.ps-mirror{fill:#10131a;stroke:rgba(255,255,255,.15)}
.ps-mirror-r{stroke:var(--gold);stroke-width:1;stroke-dasharray:3 3}
.ps-wheel{fill:none;stroke:#14161b;stroke-width:15}
.ps-wheel2{stroke:var(--gold2);stroke-width:4;opacity:.8}
.ps-spoke{stroke:#1a1d22;stroke-width:9}
.ps-hub{fill:#14161b;stroke:var(--gold);stroke-width:1.5}
.ps-steer{transform-box:view-box;transform-origin:490px 396px;animation:psSteer 3.2s ease-in-out infinite alternate}
/* f87：地平线 + 徒步腿裤 */
.ps-horizon{stroke:rgba(255,240,200,.18);stroke-width:.7}
.poss-scene.night .ps-horizon{stroke:rgba(140,170,220,.16);stroke-width:.6}
.ps-leg-pant{fill:#3a4350;stroke:#1a2029;stroke-width:.7}
.ps-leg-pant2{fill:#2b3340;stroke:#141920;stroke-width:.7}
@keyframes psSteer{from{transform:rotate(-3.5deg)}to{transform:rotate(3.5deg)}}
.ps-moto-panel{fill:#14161b}
.ps-fender{fill:#1a1d22;stroke:var(--gold);stroke-width:1.5;opacity:.95}
/* f87：车把改透视梯形（fill），不再用 stroke line */
.ps-bar{fill:#23262c;stroke:rgba(255,255,255,.06);stroke-width:.6}
.ps-bar2{fill:#23262c;stroke:rgba(255,255,255,.05);stroke-width:.5}
.ps-grip{fill:#0d0f13}
.ps-bar-inner{stroke:#3a3f46;stroke-width:3;stroke-linecap:round}
.ps-mstalk{stroke:#23262c;stroke-width:5}
.ps-mglass{fill:#10131a;stroke:rgba(255,255,255,.2)}
.ps-mdash{fill:#0d0f13;stroke:var(--gold);stroke-width:1.5}
.ps-mdash-t{fill:var(--gold2);font-size:10px}
.ps-cable{stroke:#3a3f45;stroke-width:2}
.ps-bwheel{transform-box:view-box;transform-origin:400px 432px;animation:psSpin calc(var(--sideD,5.2s)*.22) linear infinite}
.ps-bwheel-tire{fill:none;stroke:#14161b;stroke-width:8}
.ps-bwheel-sp line{stroke:#4a5058;stroke-width:2}
.ps-bwheel-arc{stroke:var(--gold2);stroke-width:3;opacity:.8}
@keyframes psSpin{to{transform:rotate(360deg)}}
.ps-shoe2{fill:#1a1d22;stroke:var(--gold);stroke-width:1.5}
.ps-shoe3{fill:#14161b}
.ps-legl{animation:psStep2 .8s ease-in-out infinite}
.ps-legr{animation:psStep2 .8s ease-in-out infinite;animation-delay:-.4s}
@keyframes psStep2{0%,100%{transform:translate(0,0)}50%{transform:translate(-8px,-16px)}}
.ps-eye-ring{fill:none;stroke:var(--gold2);stroke-width:1.6;opacity:.8;animation:psAura 2.2s ease-in-out infinite alternate}
.ps-eye{fill:var(--gold2);opacity:.9}
.ps-eye-p{fill:#241d0e}
.ps-aura{animation:psAura2 3s ease-in-out infinite alternate}
@keyframes psAura{from{opacity:.35;r:15px}to{opacity:.9;r:19px}}
@keyframes psAura2{from{opacity:.75}to{opacity:1}}

/* —— 抉择浮层 / 结算 —— */
.poss-delta-toast{
  position:fixed;left:50%;bottom:86px;transform:translate(-50%,16px);z-index:80;
  max-width:min(420px,88vw);padding:12px 16px;border-radius:12px;
  background:color-mix(in srgb,var(--dock-bg) 94%,transparent);
  border:1px solid rgba(201,169,97,.6);
  box-shadow:0 10px 30px rgba(0,0,0,.5);
  font-size:13px;line-height:1.7;opacity:0;pointer-events:none;
  transition:opacity .25s ease,transform .25s ease;
}
.poss-delta-toast.show{opacity:1;transform:translate(-50%,0)}
.poss-delta-toast b{color:var(--gold2)}
.poss-delta{margin-top:6px;color:var(--gold2);font-weight:700;letter-spacing:1px}
.poss-sum-card{
  margin:26px 12px;padding:26px 20px;text-align:center;
  border:1px solid var(--line);border-radius:16px;
  background:radial-gradient(120% 90% at 50% 0%,rgba(201,169,97,.12),transparent 60%);
  animation:psEv .45s ease both;
}
.poss-sum-icon{font-size:40px;margin-bottom:6px}
.poss-sum-card h2{font:700 22px/1.4 "Noto Serif SC";letter-spacing:4px;color:var(--gold2);margin:0 0 6px}
.poss-sum-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}
.poss-sum-grid div{border:1px solid var(--line);border-radius:12px;padding:12px 6px}
.poss-sum-grid b{display:block;font-size:22px;color:var(--gold2)}
.poss-sum-grid span{font-size:12px;color:var(--weak)}
@media (prefers-reduced-motion:reduce){
  .ps-mtn,.ps-clouds,.ps-dash,.ps-side,.ps-oncoming,.ps-overtake,.ps-ahead,.ps-fg,.ps-bg,.ps-steer,.ps-bwheel,.ps-legl,.ps-legr,.ps-star,.ps-eye-ring,.ps-aura,.ps-sun,.ps-moon,.rs-pass,.rs-far,.rs-soft,.rs-dart,.rs-cross,.rs-wave,.rs-bob,.rs-wleg-l,.rs-wleg-r,.rs-warm-l,.rs-warm-r,.rs-wbob,.rs-spin,.rs-cbob{animation:none!important}
}

/* ============ f84 附身/旁观状态标记 + 旁观第三视角 ============ */
/* 地图头像角标 */
.traveler-pin{position:relative}
.trav-badge{
  position:absolute;top:-8px;font-style:normal;font-size:9px;line-height:1;
  padding:2px 4px;border-radius:8px;white-space:nowrap;pointer-events:none;
  background:linear-gradient(135deg,#2a2117,#171208);border:1px solid var(--gold);
  color:var(--gold2);box-shadow:0 1px 6px rgba(0,0,0,.55);
}
.trav-badge.poss{right:-8px}
.trav-badge.watch{left:-8px;border-color:#7fb4d8;color:#cfe8f7}
.jh-trav-detail .trav-badge{top:-9px;font-size:9.5px}
/* 身份卡状态标记行 */
.t-marks{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 2px}
.t-mark{
  font-size:12px;padding:4px 10px;border-radius:12px;letter-spacing:.5px;
  border:1px solid var(--gold);color:var(--gold2);background:rgba(201,169,97,.12);
}
.t-mark.poss{border-color:rgba(201,169,97,.8);background:rgba(201,169,97,.16);box-shadow:0 0 8px rgba(201,169,97,.18)}
.t-mark.watch{border-color:#7fb4d8;color:#cfe8f7;background:rgba(127,180,216,.12)}
/* 旁观入口按钮 */
.watch-btn{border:1px solid rgba(201,169,97,.65)!important;color:var(--gold2)!important;background:rgba(201,169,97,.10)!important}
.watch-btn:disabled{opacity:.55;border-color:rgba(127,180,216,.4)!important;color:#9db8c6!important;background:rgba(127,180,216,.06)!important}
/* 附身录旁观标签 */
.poss-tag.watch{border-color:#7fb4d8;color:#cfe8f7;background:rgba(127,180,216,.12)}
/* 旁观页：隐藏第一人称前景/附身之眼/车灯，叠第三人称剪影 */
.watch-scene{position:absolute;inset:0}
.watch-scene .poss-scene{position:absolute;inset:0}
.watch-scene .ps-fg,.watch-scene .ps-aura,.watch-scene .ps-hl{display:none}
.watch-overlay{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
.ws-trav{animation:wsBob 1.6s ease-in-out infinite;transform-box:fill-box;transform-origin:50% 100%}
@keyframes wsBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-2.5px)}}
.ws-shadow{fill:rgba(0,0,0,.35)}
.ws-body{fill:#2b3340;stroke:#0c0f14;stroke-width:1.5}
.ws-glass{fill:#9fc6de;opacity:.85}
.ws-tail{fill:#ff5b4d}
/* f85 夜间车灯发光 */
.poss-scene.night ~ .watch-overlay .ws-taillamp{filter:drop-shadow(0 0 5px #ff4d40) drop-shadow(0 0 9px rgba(255,77,64,.55))}
.poss-scene.night ~ .watch-overlay .ws-headlamp{filter:drop-shadow(0 0 6px #ffe9a8) drop-shadow(0 0 11px rgba(255,225,150,.5))}
.poss-scene:not(.night) ~ .watch-overlay .ws-headlamp{opacity:.85}
.ws-wheel{fill:#14181f;stroke:#39414e;stroke-width:2}
.ws-rider{fill:#31435c;stroke:#0c0f14;stroke-width:1.5}
.ws-helmet,.ws-head{fill:#e8d9b8;stroke:#0c0f14;stroke-width:1.5}
.ws-frame{stroke:#c9a961;stroke-width:2.5;stroke-linecap:round}
.ws-pack{fill:#7a5a36;stroke:#0c0f14;stroke-width:1}
.ws-legs line{stroke:#222a36;stroke-width:4;stroke-linecap:round}
.ws-act-walk .ws-legs,.ws-act-bike .ws-legs{animation:wsLegs 1s ease-in-out infinite;transform-box:fill-box;transform-origin:50% 0}
@keyframes wsLegs{0%,100%{transform:rotate(7deg)}50%{transform:rotate(-7deg)}}
.ws-tag-ring{fill:rgba(12,10,6,.78);stroke:var(--gold);stroke-width:2;filter:drop-shadow(0 0 6px rgba(201,169,97,.45))}
.ws-tag-tx{font-size:14px}
/* 旁观 HUD：顶部右侧旁观席、底部让位传音条 */
.watch-hud .pf-hud-top{justify-content:space-between;align-items:flex-start;gap:8px}
.watch-eye{border-color:#7fb4d8!important;background:radial-gradient(circle at 50% 42%,rgba(207,232,247,.35),rgba(14,22,30,.9) 70%)!important}
.watch-eye i{background:#cfe8f7!important}
.ws-watchers{
  pointer-events:auto;font-size:11px;color:#cfe8f7;max-width:46%;line-height:1.5;
  background:rgba(12,10,6,.55);border:1px solid rgba(127,180,216,.4);border-radius:12px;
  padding:5px 10px;backdrop-filter:blur(8px);
}
.ws-watcher{margin-left:4px;opacity:.9;white-space:nowrap}
.watch-page .pf-hud-bottom{padding-bottom:64px}
/* 传音沟通条 */
.ws-msgbar{
  position:absolute;left:12px;right:12px;bottom:12px;z-index:5;display:flex;gap:8px;pointer-events:auto;
}
.ws-msgbar .field{
  flex:1;background:rgba(12,10,6,.72);border:1px solid rgba(201,169,97,.45);
  color:var(--gold2);backdrop-filter:blur(8px);border-radius:12px;padding:10px 12px;
}
.ws-msgbar .field::placeholder{color:rgba(232,224,208,.45)}
.ws-msgbar .mini-btn{border-radius:12px}
/* 宽屏微调 */
@media (min-width:900px){
  .ws-msgbar{left:24px;right:24px;bottom:18px}
  .watch-hud .pf-hud-top{padding-top:52px}
}
@media (prefers-reduced-motion:reduce){
  .ws-trav,.ws-act-walk .ws-legs,.ws-act-bike .ws-legs{animation:none!important}
}

/* ============ f86 标记升级 / 三机位 / 飘字 / 聊天 / 行者感知 ============ */
/* —— 角标动效与名额分级 —— */
.trav-badge{cursor:pointer;pointer-events:auto;z-index:3;animation:travBadgeIn .3s ease both}
@keyframes travBadgeIn{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
.trav-badge.poss{animation:travBadgeIn .3s ease both, possBadgePulse 1.8s ease-in-out infinite}
@keyframes possBadgePulse{0%,100%{box-shadow:0 1px 6px rgba(0,0,0,.55),0 0 0 rgba(201,169,97,0)}50%{box-shadow:0 1px 6px rgba(0,0,0,.55),0 0 9px rgba(201,169,97,.85)}}
.trav-badge.watch.w1{border-color:#7fb4d8;color:#cfe8f7}
.trav-badge.watch.w2{border-color:#8fc7e8;color:#e4f4ff;box-shadow:0 1px 6px rgba(0,0,0,.55),0 0 7px rgba(127,180,216,.5)}
.trav-badge.watch.w3{border-color:var(--gold);color:var(--gold2);background:linear-gradient(135deg,#2a2117,#171208);animation:travBadgeIn .3s ease both, watchFullPulse 1.4s ease-in-out infinite}
@keyframes watchFullPulse{0%,100%{box-shadow:0 1px 6px rgba(0,0,0,.55),0 0 0 rgba(201,169,97,0)}50%{box-shadow:0 1px 6px rgba(0,0,0,.55),0 0 10px rgba(201,169,97,.9)}}
.traveler-pin.pin-poss{box-shadow:0 0 0 rgba(201,169,97,0);animation:pinPossRing 1.8s ease-out infinite}
@keyframes pinPossRing{0%{box-shadow:0 0 0 0 rgba(201,169,97,.55)}70%{box-shadow:0 0 0 9px rgba(201,169,97,0)}100%{box-shadow:0 0 0 0 rgba(201,169,97,0)}}
/* —— 三机位：背景视差 + 切换淡入 + 手持跟拍呼吸 —— */
.watch-scene .poss-scene{transition:transform .45s ease}
.watch-scene.cam-bg-rear .poss-scene{transform:scale(1.09) translateX(-2.2%)}
.watch-scene.cam-bg-far .poss-scene{transform:scale(1.015)}
.watch-overlay{transition:opacity .3s ease}
.watch-overlay.cam-side{animation:wsCamSway 5.5s ease-in-out infinite}
.watch-overlay.cam-rear{animation:wsCamSway 7s ease-in-out infinite}
.watch-overlay.cam-far{animation:wsCamSway 4.2s ease-in-out infinite}
@keyframes wsCamSway{0%,100%{transform:translate(0,0) rotate(0deg)}50%{transform:translate(3px,-2px) rotate(.18deg)}}
.ws-camname{
  position:absolute;top:52px;left:50%;transform:translateX(-50%);z-index:6;pointer-events:none;
  font-size:12px;letter-spacing:2px;color:var(--gold2);padding:4px 14px;border-radius:12px;
  background:rgba(12,10,6,.6);border:1px solid rgba(201,169,97,.35);backdrop-filter:blur(6px);
  animation:wsCamName 2.2s ease forwards;
}
@keyframes wsCamName{0%{opacity:0;transform:translateX(-50%) translateY(-6px)}15%,75%{opacity:1;transform:translateX(-50%) translateY(0)}100%{opacity:0}}
.ws-camswitch{
  position:absolute;right:10px;top:96px;z-index:7;display:flex;flex-direction:column;gap:6px;pointer-events:auto;
}
.ws-cam-btn{
  width:38px;height:38px;border-radius:50%;border:1px solid rgba(201,169,97,.45);
  background:rgba(12,10,6,.6);color:var(--gold2);font-size:14px;backdrop-filter:blur(8px);cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:all .2s;
}
.ws-cam-btn.on{background:linear-gradient(135deg,var(--gold2),var(--gold));color:#1a1408;border-color:var(--gold2);box-shadow:0 0 10px rgba(201,169,97,.55)}
/* —— 飘字气泡 —— */
.ws-bubbles{position:absolute;transform:translate(-50%,-50%);z-index:5;pointer-events:none;width:0;height:0}
.ws-bubble{
  position:absolute;right:0;bottom:0;white-space:nowrap;max-width:230px;overflow:hidden;text-overflow:ellipsis;
  font-size:12.5px;padding:7px 12px;border-radius:14px;margin-bottom:6px;
  background:rgba(12,10,6,.78);border:1px solid rgba(201,169,97,.5);color:var(--gold2);
  backdrop-filter:blur(8px);box-shadow:0 4px 16px rgba(0,0,0,.4);
  animation:wsFloatUp 4.5s ease forwards;
}
.ws-bubble b{color:#e8c87a;margin-right:5px}
.ws-bubble.t{border-color:#7fb4d8;color:#dceff8}
.ws-bubble.t b{color:#9fd0ec}
.ws-bubble.fade{opacity:0;transform:translateY(-14px);transition:all .9s ease}
@keyframes wsFloatUp{0%{opacity:0;transform:translateY(14px) scale(.9)}12%{opacity:1;transform:translateY(0) scale(1)}80%{opacity:1}100%{opacity:0;transform:translateY(-46px)}}
/* —— 传音聊天面板 —— */
.ws-chat{
  position:absolute;left:10px;right:10px;bottom:60px;z-index:6;pointer-events:auto;
  max-height:0;opacity:0;overflow:hidden;transition:all .3s ease;border-radius:16px;
  background:rgba(10,9,6,.82);border:1px solid rgba(201,169,97,.35);backdrop-filter:blur(14px);
}
.ws-chat.open{max-height:42vh;opacity:1;padding-bottom:4px}
.ws-chat-h{display:flex;justify-content:space-between;align-items:center;padding:9px 14px;color:var(--gold2);font-size:13px;border-bottom:1px solid rgba(201,169,97,.2)}
.ws-chat-x{background:none;border:none;color:var(--weak);font-size:12px;cursor:pointer}
.ws-chat-body{max-height:32vh;overflow-y:auto;padding:8px 12px}
.ws-chat-empty{color:var(--weak);font-size:12px;text-align:center;padding:14px 0}
.ws-msg{display:flex;align-items:flex-end;gap:6px;margin:7px 0;font-size:12.5px}
.ws-msg .ws-msg-n{font-size:10.5px;color:#b9a06a;white-space:nowrap;align-self:center}
.ws-msg .ws-msg-b{padding:6px 11px;border-radius:12px;background:rgba(201,169,97,.14);border:1px solid rgba(201,169,97,.3);color:var(--gold2);max-width:72%;word-break:break-word}
.ws-msg em{font-size:10px;color:rgba(232,224,208,.35);font-style:normal;white-space:nowrap;align-self:center}
.ws-msg.w{justify-content:flex-end}.ws-msg.w .ws-msg-n{color:#8fb6cc;order:-1}
.ws-msg.w .ws-msg-b{background:rgba(127,180,216,.14);border-color:rgba(127,180,216,.35);color:#dceff8}
.ws-msg .ws-msg-b{max-width:58%}
.ws-msg.t .ws-msg-b{background:linear-gradient(135deg,rgba(201,169,97,.3),rgba(201,169,97,.15));border-color:rgba(201,169,97,.55)}
.ws-msg.me .ws-msg-b{box-shadow:inset 0 0 0 1px rgba(242,217,140,.35)}
.ws-chat-toggle{position:relative;padding:0 10px!important}
.ws-chat-toggle i{
  position:absolute;top:-7px;right:-7px;font-style:normal;font-size:9.5px;line-height:1;
  background:linear-gradient(135deg,var(--gold2),var(--gold));color:#1a1408;border-radius:8px;padding:2px 5px;font-weight:700;
}
/* —— 行者本人感知条 —— */
.jh-aware{position:fixed;top:62px;left:50%;transform:translateX(-50%) translateY(-16px);z-index:1600;opacity:0;pointer-events:none;transition:all .35s cubic-bezier(.2,.8,.2,1)}
.jh-aware.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.jh-aware-pill{
  display:flex;gap:8px;align-items:center;border:1px solid rgba(201,169,97,.5);border-radius:18px;
  background:rgba(12,10,6,.72);backdrop-filter:blur(12px);padding:6px 14px;cursor:pointer;
  box-shadow:0 4px 18px rgba(0,0,0,.5);font-size:12.5px;
}
.jh-aware-pill .aw-poss{color:var(--gold2)}
.jh-aware-pill .aw-watch{color:#cfe8f7}
.aw-dot{width:8px;height:8px;border-radius:50%;background:#ff5b4d;box-shadow:0 0 8px #ff5b4d;animation:awDot 1s ease-in-out infinite}
@keyframes awDot{0%,100%{transform:scale(1)}50%{transform:scale(1.35)}}
.jh-aware.ping .jh-aware-pill{animation:awPing .6s ease 2}
@keyframes awPing{0%,100%{box-shadow:0 4px 18px rgba(0,0,0,.5)}50%{box-shadow:0 0 0 4px rgba(255,91,77,.35),0 4px 18px rgba(0,0,0,.5)}}
body:has(.watch-page) .jh-aware{display:none}
/* —— 感知面板 —— */
.jh-aware-panel{position:fixed;inset:0;z-index:1700;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.55);backdrop-filter:blur(3px);padding:16px}
.jh-aware-panel.show{display:flex}
.aw-card{
  width:100%;max-width:440px;max-height:78vh;overflow:hidden;display:flex;flex-direction:column;
  background:linear-gradient(180deg,#17130b,#0e0c08);border:1px solid rgba(201,169,97,.5);border-radius:18px;
  box-shadow:0 18px 60px rgba(0,0,0,.7);animation:awCardIn .28s ease both;
}
@keyframes awCardIn{from{transform:translateY(14px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.aw-head{display:flex;justify-content:space-between;align-items:center;padding:13px 16px;border-bottom:1px solid rgba(201,169,97,.22);color:var(--gold2);font-size:15px}
.aw-x{background:none;border:none;color:var(--weak);font-size:15px;cursor:pointer}
.aw-sec{padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.05);font-size:13px}
.aw-sec-t{color:#b9a06a;font-size:11.5px;margin-bottom:7px;letter-spacing:1px}
.aw-poss-box{color:var(--gold2);background:rgba(201,169,97,.1);border:1px solid rgba(201,169,97,.3);border-radius:10px;padding:8px 11px}
.aw-empty{color:var(--weak);font-size:12px;padding:4px 0}
.aw-w-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0}
.aw-kick{padding:3px 12px!important;font-size:11.5px!important;border-color:rgba(255,120,100,.5)!important;color:#ff9d8f!important}
.aw-chat{flex:1;min-height:120px;display:flex;flex-direction:column}
.aw-msgs{flex:1;overflow-y:auto;max-height:24vh}
.aw-reply{display:flex;gap:8px;padding:11px 16px}
.aw-reply .field{flex:1;background:rgba(255,255,255,.05);border:1px solid rgba(201,169,97,.4);color:var(--gold2);border-radius:12px;padding:9px 12px}
.aw-reply .field::placeholder{color:rgba(232,224,208,.4)}
@media (min-width:900px){
  .ws-camswitch{right:24px;top:110px}
  .ws-chat{left:24px;right:24px}
  .jh-aware{top:66px}
}
@media (prefers-reduced-motion:reduce){
  .watch-overlay,.trav-badge.poss,.trav-badge.watch.w3,.traveler-pin.pin-poss,.aw-dot{animation:none!important}
  .watch-scene .poss-scene{transition:none}
}
/* 平板/桌面（≥768）用顶栏菜单；手机用底部 Tab（与全站断点对齐） */
@media (min-width:768px){
  .topbar-nav{display:flex !important;}
  .tabbar{display:none !important;}
}
@media (max-width:767.98px){
  .topbar-nav{display:none !important;}
  .tabbar{display:flex;}
}
