/* ============================================================
 * Path Walker · 卷轴墨韵 + 暗夜地图美学（按 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 记忆，独立于主站主题 */
html.pw-light,
html.pw-light body,
body.pw-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%;max-width:100%;overflow-x:clip}
body{
  font-family:"Noto Serif SC",serif;
  background:var(--ink);color:var(--paper);
  -webkit-font-smoothing:antialiased;overflow:hidden;overflow-x:clip;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));
  border-bottom:1px solid var(--line);
  box-shadow:0 2px 12px rgba(0,0,0,.4);
  max-width:100%;overflow:hidden; /* 防顶栏图标/导航撑出视口横向滚动 */
}
.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));
  box-shadow:0 4px 14px rgba(0,0,0,.4);
  border-radius:0;
  display:none;
}
.rumor-bar.show{display:flex}
/* v6：古塘报卷轴轴头（内侧，overflow:hidden 裁不掉） */
.rumor-bar::before,.rumor-bar::after{content:'';position:absolute;top:2px;bottom:2px;width:6px;border-radius:3px;z-index:2;
  background:linear-gradient(90deg,#3a2e1c,#9a7c46 45%,#241b0e);
  box-shadow:0 0 0 1px rgba(0,0,0,.6),0 0 6px rgba(201,169,97,.35)}
.rumor-bar::before{left:2px}.rumor-bar::after{right:2px}
.rumor-bar .rumor-label{margin-left:8px}
.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:translate3d(0,0,0)}100%{transform:translate3d(-50%,0,0)}}

/* 搜索框 */
.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}
.top-auth{
  display:flex;align-items:center;gap:6px;flex:0 0 auto;
  padding:0 10px;height:100%;border-left:1px solid var(--line);
}
.pw-auth-btn{
  display:inline-flex;align-items:center;justify-content:center;
  height:28px;padding:0 12px;border:1px solid var(--line);
  color:var(--gold2);text-decoration:none;font:700 12px/1 "Noto Serif SC";
  letter-spacing:1px;white-space:nowrap;background:transparent;
  transition:background .15s,border-color .15s,color .15s;
}
.pw-auth-btn:hover{border-color:var(--gold);background:rgba(201,169,97,.12);color:var(--gold2)}
.pw-auth-btn.gold{
  border-color:var(--gold);color:#1a1408;
  background:linear-gradient(180deg,var(--gold2),var(--gold));
}
.pw-auth-btn.gold:hover{filter:brightness(1.06)}
.pw-gate{
  max-width:420px;margin:48px auto 0;padding:28px 22px 24px;text-align:center;
  background:var(--scroll-glass);border:1px solid var(--line);
  box-shadow:0 12px 40px rgba(0,0,0,.35);
}
.pw-gate-seal{
  width:56px;height:56px;margin:0 auto 14px;display:grid;place-items:center;
  border:2px solid var(--gold);color:var(--gold2);font:800 22px/1 "Noto Serif SC";
  box-shadow:0 0 16px rgba(201,169,97,.25);
}
.pw-gate h2{font:800 20px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:3px;margin:0 0 8px}
.pw-gate p{font-size:13px;color:var(--weak);line-height:1.7;margin:0 0 18px}
.pw-gate-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.pw-gate-btns .pw-auth-btn{height:34px;padding:0 18px;font-size:13px}
.pw-auth-strip{
  margin:10px 0;padding:10px 12px;border:1px dashed var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  background:rgba(var(--ink-rgb),.35);
}
.pw-auth-strip span{font-size:12.5px;color:var(--gold2);line-height:1.5}
.pw-auth-strip .pw-auth-btns{display:flex;gap:6px}
html.pw-light .pw-auth-btn.gold{color:#1a1408;background:linear-gradient(180deg,#e3c987,#c9a961)}
html.pw-light .pw-auth-btn.gold:hover{filter:none;background:linear-gradient(180deg,#eed9a1,#d4b671)}
/* v6 亮底适配：sheet 石雕叠影/轴头压浅，金钉改深金 */
html.pw-light .sheet{
  box-shadow:0 0 0 1px rgba(80,60,30,.3),inset 0 0 0 1px rgba(154,119,47,.35),inset 0 0 0 3px rgba(255,253,248,.5),inset 0 2px 0 rgba(124,95,34,.14),0 -14px 40px rgba(90,70,40,.28)}
html.pw-light .sheet h3{box-shadow:0 2px 0 -1px rgba(80,60,30,.2),0 3px 0 -1px rgba(154,119,47,.25)}
html.pw-light .sheet h3::before,html.pw-light .sheet h3::after,
html.pw-light .rumor-bar::before,html.pw-light .rumor-bar::after{
  background:linear-gradient(90deg,#5a4526,#b8934f 45%,#4a3820);box-shadow:0 0 0 1px rgba(80,60,30,.35),0 0 6px rgba(154,119,47,.4)}
html.pw-light .field,html.pw-light .tinput{box-shadow:inset 0 1px 0 rgba(154,119,47,.15),inset 0 0 0 1px rgba(255,253,248,.6)}

.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,弹层同步让位 */
.pw-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.pw-season-on .pw-search-pop{top:126px}
.pw-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;width:100%;max-width:100%;height:auto;min-height:calc(100vh - 56px);min-height:calc(100dvh - 56px);overflow-x:clip;overflow-y:auto;-webkit-overflow-scrolling:touch}

/* ============================================================
 * 地图 · Leaflet 暗金滤镜
 * ============================================================ */
.map-wrap{position:absolute;inset:0;width:100%;height:100%;min-height:calc(100vh - 56px);background:var(--ink)}
.map-wrap .leaflet-host{position:absolute;inset:0;width:100%;height:100%;min-height:100%;z-index:10}
/* 路线图例（勾选显隐；默认关，后台 pw_route_legend_enabled 打开后加 .is-on） */
.map-legend{display:none;position:absolute;top:12px;right:12px;z-index:40;flex-direction:column;gap:4px;padding:8px 10px;max-height:min(52vh,360px);overflow:auto;background:var(--scroll-glass,rgba(var(--ink2-rgb),.85));border:1px solid var(--gold,#c9a961);box-shadow:0 4px 16px rgba(0,0,0,.5)}
.map-legend.is-on{display:flex}
.lg-head{font:700 11px/1.2 "Noto Serif SC";color:var(--gold2,#e8d5a3);letter-spacing:2px;margin-bottom:2px}
.lg-item{display:flex;align-items:center;gap:6px;font:400 11px/1.3 "Noto Serif SC";color:var(--paper,#e8e0d0);white-space:nowrap;cursor:pointer;margin:0}
.lg-item.off{opacity:.42}
.lg-item input{margin:0;accent-color:#145c5a;width:12px;height:12px}
.lg-line{display:inline-block;width:18px;height:3px;border:none;border-radius:1px;flex:0 0 18px}
.pw-route-pop .leaflet-popup-content{margin:10px 12px 12px}
.pw-rpop{min-width:200px}
.pw-rpop-k{font:600 10px/1 "Noto Serif SC";color:var(--rc,#145c5a);letter-spacing:2px;margin-bottom:4px}
.pw-rpop-name{font:700 15px/1.3 "Noto Serif SC";color:var(--paper,#e8e0d0);margin-bottom:8px}
.pw-rpop-quote{margin:0 0 8px;padding:8px 10px;border-left:2px solid var(--rc,#145c5a);font:400 12px/1.7 "Noto Serif SC";color:var(--gold2,#e8d5a3);background:rgba(20,92,90,.12)}
.pw-rpop-intro{margin:0 0 8px;font:400 12px/1.55 "Noto Serif SC";color:var(--paper,#e8e0d0);opacity:.88}
.pw-rpop-h{font:600 11px/1 "Noto Serif SC";color:var(--weak,#9a8f7a);margin:8px 0 4px;letter-spacing:1px}
.pw-rpop-wps{margin:0;padding-left:18px;max-height:160px;overflow:auto}
.pw-rpop-wps li{margin:3px 0}
.pw-rpop-wps a{color:var(--gold2,#e8d5a3);text-decoration:none;border-bottom:1px dashed rgba(201,169,97,.45)}
.pw-rpop-wps a:hover{color:#fff}
/* 路线名称标签（中点永久标签） */
.pw-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)}
/* 白天 / 卫星：瓦片不反相，跟 UI 日夜同步。海外街道图夜间同样走反相，避免地图还是浅色、界面已是墨韵 */
html.pw-light .leaflet-tile-pane,
body.pw-light .leaflet-tile-pane,
html.pw-sat .leaflet-tile-pane,
body.pw-sat .leaflet-tile-pane,
body.pw-map-world .leaflet-tile-pane{filter:none !important}
.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;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);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 · 金圆点 */
.pw-node{background:transparent !important;border:none !important}
.pw-node-pin{
  position:relative;width:60px;text-align:center;color:var(--paper);
}
.pw-node-dot{
  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);
  margin:0 auto;
  transition:transform .16s ease, box-shadow .16s ease;
}
/* v8：节点层次——外圈细环（驿站灯罩），已点亮节点加旋转印章环 */
.pw-node-dot::after{
  content:'';position:absolute;inset:-5px;border-radius:50%;
  border:1px solid rgba(201,169,97,.35);pointer-events:none;
}
.pw-node-pin.stamped .pw-node-dot::after,.pw-node-pin[style*="--pc:#2FD08A"] .pw-node-dot::after{
  border:1px dashed rgba(47,208,138,.75);
  animation:pwNodeSeal 9s linear infinite;
}
@keyframes pwNodeSeal{to{transform:rotate(360deg)}}
.pw-node:hover .pw-node-dot,
.pw-node-pin.is-hot .pw-node-dot{
  transform:scale(1.55);
  box-shadow:0 0 0 5px rgba(232,213,163,.35),0 0 18px rgba(232,213,163,.7);
}
.pw-node:hover .pw-node-name,
.pw-node-pin.is-hot .pw-node-name{color:#fff}
.pw-node-pin.stamped .pw-node-dot,.pw-node-pin[style*="--pc:#2FD08A"] .pw-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);
}
.pw-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;
}
.pw-node-meta{font:400 10px/1 "JetBrains Mono";color:var(--weak);text-shadow:0 1px 3px #000}
.pw-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 */
.pw-poi{background:transparent !important;border:none !important}
.pw-poi-i{font-size:18px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.7))}

/* 行者 pin */
.pw-trav{background:transparent !important;border:none !important}
.pw-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） */
.pw-trav-detail{overflow:visible !important}
.pw-trav-detail .traveler-pin.lg{
  position:absolute;bottom:0;left:50%;transform:translateX(-50%);
  width:34px;height:34px;font-size:17px;animation:none;
}
.pw-trav-detail .traveler-pin.lg.bob{animation:bob 1.6s ease-in-out infinite}
.pw-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}}
.pw-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;
}
.pw-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 */
.pw-me{background:transparent !important;border:none !important}
.pw-me-i{
  position:relative;
  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);
}
/* v8：当前所在地高亮——双环雷达脉冲（内环快、外环慢），金色辉光 */
.pw-me-i::before,.pw-me-i::after{
  content:'';position:absolute;inset:-3px;border-radius:50%;
  border:2px solid rgba(255,194,51,.75);pointer-events:none;
  animation:pwMeRadar 2.4s ease-out infinite;
}
.pw-me-i::after{animation-delay:1.2s;border-color:rgba(227,201,135,.55)}
@keyframes pwMeRadar{0%{transform:scale(.7);opacity:.95}75%{transform:scale(2.1);opacity:0}100%{transform:scale(2.1);opacity:0}}

/* v8：路径流动虚线（JS 叠加层）——沿路线行进的光点 */
.pw-route-flow{animation:pwRouteFlow 1.05s linear infinite}
@keyframes pwRouteFlow{to{stroke-dashoffset:-22px}}

/* v8：地图画框渐隐——四边墨色渐收，与战场边缘渐隐同一语言 */
.map-wrap::after{
  content:'';position:absolute;inset:0;z-index:11;pointer-events:none;
  box-shadow:inset 0 0 90px 18px rgba(10,13,15,.55),inset 0 0 24px 4px rgba(10,13,15,.5);
}
html.pw-light .map-wrap::after,body.pw-light .map-wrap::after{
  box-shadow:inset 0 0 90px 18px rgba(120,95,55,.22),inset 0 0 24px 4px rgba(120,95,55,.18);
}

/* 路线折线双层已由 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);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)}
/* 出行方式三态分段控件：步行 / 摩托 / 汽车（单点切换，记忆在 localStorage） */
.pw-mode-ctrl{position:absolute;top:100px;right:12px;z-index:24;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.pw-mode-seg{display:flex;border:1px solid var(--gold);background:var(--scroll-glass);box-shadow:0 4px 16px rgba(0,0,0,.42)}
.pw-mode-btn{
  display:flex;align-items:center;justify-content:center;gap:3px;
  min-width:52px;height:44px;padding:0 8px;border:0;border-left:1px solid rgba(201,169,97,.26);
  background:transparent;color:var(--paper);font:600 12px/1 "Noto Serif SC";cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}
.pw-mode-btn:first-child{border-left:0}
.pw-mode-btn .pm-ic{font-size:15px;line-height:1}
.pw-mode-btn.on{background:rgba(201,169,97,.24);color:var(--gold2)}
.pw-mode-btn:focus-visible{outline:2px solid var(--gold2);outline-offset:2px;position:relative;z-index:1}
.pw-mode-note{
  max-width:196px;padding:3px 7px;border:1px solid rgba(201,169,97,.34);
  background:rgba(14,14,20,.82);color:#cfc6ad;font:400 10.5px/1.35 "Noto Serif SC";
  text-align:right;pointer-events:none;
}
.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);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{
  /* 卡宽按容器自适应：每档正好铺满 N 张整卡（gap 10px），不足一档由 calc 均分 */
  --pw-card-w:100%;
  display:flex;flex-wrap:nowrap;gap:10px;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
}
.route-scroll::-webkit-scrollbar{display:none}
/* 右侧常驻浮层(#pwDock/#fab)避让：用尾部占位 flex item，而不是容器 padding。
   padding 会缩小百分比基准，且第 N+1 张卡会露在 padding 区，破坏“每档正好 N 张整卡”。 */
.route-scroll-tail{flex:0 0 190px;scroll-snap-align:end}
.route-scroll:focus-visible{outline:2px solid var(--gold2);outline-offset:2px}
.route-scroll-wrap{position:relative}
.route-scroll-wrap::before,.route-scroll-wrap::after{
  content:'';position:absolute;top:0;bottom:2px;width:32px;
  pointer-events:none;z-index:2;opacity:0;transition:opacity .16s linear;
}
.route-scroll-wrap::before{left:0;background:linear-gradient(90deg,rgba(var(--ink-rgb),.94),rgba(var(--ink-rgb),0))}
.route-scroll-wrap::after{right:0;background:linear-gradient(270deg,rgba(var(--ink-rgb),.94),rgba(var(--ink-rgb),0))}
.route-scroll-wrap.can-left::before{opacity:1}
.route-scroll-wrap.can-right::after{opacity:1}
.route-scroll-hint{
  /* 底部右侧被 #pwDock(启程/收功) 与 #fab 常驻覆盖，提示改放卡片带上沿（标签行右侧），
     仍不新增整行高度；极矮视口改回带内顶部。 */
  position:absolute;right:40px;top:-28px;z-index:3;
  width:104px;padding:3px 0 3px 10px;text-align:right;
  font:400 11.5px/1.5 "Noto Serif SC",serif;letter-spacing:.5px;white-space:nowrap;
  color:#cfc6ad;
  background:linear-gradient(270deg,rgba(var(--ink-rgb),.92) 42%,rgba(var(--ink-rgb),0));
  pointer-events:none;opacity:1;transition:opacity .18s linear;
}
@media (max-height:520px){
  .route-scroll-hint{top:2px}
}
/* 车机条屏（800×156 一类）：模式控件收成 30px 图标条，贴右上角，不压地图主体 */
@media (max-height:200px){
  .pw-mode-ctrl{top:4px;right:6px;gap:0}
  .pw-mode-note{display:none}
  .pw-mode-btn{height:30px;min-width:40px;padding:0 4px}
  .pw-mode-btn span{display:none}
  .pw-mode-btn .pm-ic{display:inline}
  .pw-mode-btn .pm-ic{font-size:13px}
}
.route-scroll-wrap:not(.is-scrollable) .route-scroll-hint,
.route-scroll-wrap:not(.can-right) .route-scroll-hint{opacity:0}
html.pw-light .route-scroll-hint,body.pw-light .route-scroll-hint{color:#5a4d36}
.route-card{
  position:relative;flex:0 0 var(--pw-card-w);padding:12px 14px;scroll-snap-align:start;
  background:var(--scroll-glass);border:1px solid var(--line);
  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}
@media (min-width:600px) and (max-width:899.98px){
  .route-scroll{--pw-card-w:calc((100% - 10px)/2)}
}

/* 路线 chip（地图顶部筛选） */
.route-chip{
  background:var(--scroll-glass);border:1px solid var(--line);
  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);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);
  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);
  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:80;width:min(360px,92vw);max-height:min(72vh,520px);overflow:auto;
  left:50%;top:50%;
  background:var(--scroll-glass);border:1px solid var(--gold);
  box-shadow:0 16px 60px rgba(0,0,0,.7);
  transform:translate(-50%,-50%);display:none;
}
.scene-pop.show{display:block;animation:popIn .25s ease}
@keyframes popIn{from{opacity:0;transform:translate(-50%,-46%)}to{opacity:1;transform:translate(-50%,-50%)}}
.scene-pop .scene-head,.scene-head{
  padding:16px 18px 12px;border-bottom:1px solid rgba(201,169,97,.4);position:relative;
  /* v8：与 v6 战斗面板同一语言——头部底边双金线 */
  box-shadow:0 2px 0 -1px rgba(0,0,0,.55),0 3px 0 -1px rgba(227,201,135,.2);
}
.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);
  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}
a.list-card{display:block;text-decoration:none;color:inherit}
.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;
  /* v6 界面框架：石雕三层叠影（外深压边→金细线→内浅亮边）+ 多背景四角纹样（L 形双描边+角尖金钉），
     角饰画在 background 层——innerHTML 换内容也抹不掉 */
  box-shadow:0 0 0 1px rgba(0,0,0,.8),inset 0 0 0 1px rgba(227,201,135,.32),inset 0 0 0 3px rgba(10,8,5,.55),inset 0 2px 0 rgba(227,201,135,.14),0 -14px 44px rgba(0,0,0,.55);
  background-image:
    linear-gradient(var(--gold2),var(--gold2)),linear-gradient(var(--gold2),var(--gold2)),
    linear-gradient(var(--gold2),var(--gold2)),linear-gradient(var(--gold2),var(--gold2)),
    linear-gradient(var(--gold2),var(--gold2)),linear-gradient(var(--gold2),var(--gold2)),
    linear-gradient(var(--gold2),var(--gold2)),linear-gradient(var(--gold2),var(--gold2)),
    radial-gradient(circle 2.6px at 50% 50%,var(--gold2) 96%,transparent),
    radial-gradient(circle 2.6px at 50% 50%,var(--gold2) 96%,transparent),
    radial-gradient(circle 2.6px at 50% 50%,var(--gold2) 96%,transparent),
    radial-gradient(circle 2.6px at 50% 50%,var(--gold2) 96%,transparent);
  background-size:15px 2px,2px 15px, 15px 2px,2px 15px, 15px 2px,2px 15px, 15px 2px,2px 15px, 5px 5px,5px 5px,5px 5px,5px 5px;
  background-position:
    left 6px top 6px,left 6px top 6px,
    right 6px top 6px,right 6px top 6px,
    left 6px bottom 6px,left 6px bottom 6px,
    right 6px bottom 6px,right 6px bottom 6px,
    left 3px top 3px,right 3px top 3px,left 3px bottom 3px,right 3px bottom 3px;
  background-repeat:no-repeat;
  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)}
/* v6：标题卷轴化——居中 + 左右轴头圆柱 + 底边双金线 */
.sheet h3{position:relative;text-align:center;padding:3px 34px 12px;margin:2px 4px 16px;
  border-bottom:1px solid rgba(201,169,97,.55);
  box-shadow:0 2px 0 -1px rgba(0,0,0,.6),0 3px 0 -1px rgba(227,201,135,.22);
  font:700 16px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:3px}
.sheet h3::before,.sheet h3::after{content:'';position:absolute;top:-1px;bottom:9px;width:7px;border-radius:3px;
  background:linear-gradient(90deg,#3a2e1c,#9a7c46 45%,#241b0e);
  box-shadow:0 0 0 1px rgba(0,0,0,.6),0 0 8px rgba(201,169,97,.35)}
.sheet h3::before{left:-3px}.sheet h3::after{right:-3px}
/* v6：把手改金钉玉珏——中央菱形钉 + 两侧渐隐线 */
.grab{position:relative;width:56px;height:4px;margin:0 auto 14px;background:linear-gradient(90deg,transparent,var(--gold) 30%,var(--gold) 70%,transparent)}
.grab::after{content:'';position:absolute;left:50%;top:50%;width:7px;height:7px;transform:translate(-50%,-50%) rotate(45deg);
  background:var(--gold2);box-shadow:0 0 6px rgba(201,169,97,.55)}
.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}
/* v6 表单件双层描边：外暗压边 + 内顶亮线（石刻凹槽感） */
.field{
  width:100%;height:44px;background:rgba(var(--ink-rgb),.6);
  border:1px solid var(--line);padding:0 12px;
  box-shadow:inset 0 1px 0 rgba(227,201,135,.12),inset 0 0 0 1px rgba(0,0,0,.35);
  font:400 14px/1 "Noto Serif SC";color:var(--paper);
}
.tinput{box-shadow:inset 0 1px 0 rgba(227,201,135,.12),inset 0 0 0 1px rgba(0,0,0,.35)}
.type-pick{box-shadow:inset 0 1px 0 rgba(227,201,135,.1),inset 0 0 0 1px rgba(0,0,0,.35)}
.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 10px 15px;
  font:400 13px/1.5 "Noto Serif SC";color:var(--paper);
  opacity:0;transition:opacity .25s,transform .25s;z-index:60;pointer-events:none;
  max-width:min(86vw,460px);
  box-shadow:0 8px 26px rgba(0,0,0,.45),inset 0 0 0 1px rgba(var(--ink-rgb),.4);
}
/* v7：toast 分级——左色条 + 顶部金光扫过 + 回弹入场 */
#toast::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--gold);opacity:.85}
#toast::after{content:'';position:absolute;left:0;right:0;top:0;height:1px;opacity:0;
  background:linear-gradient(90deg,transparent,var(--gold2),transparent)}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0);animation:pwToastIn .34s cubic-bezier(.2,1.35,.4,1)}
#toast.show::after{animation:pwToastSheen .7s ease-out .1s}
#toast.k-ok{border-color:rgba(47,208,138,.5)}
#toast.k-ok::before{background:var(--good)}
#toast.k-warn{border-color:rgba(255,194,51,.5)}
#toast.k-warn::before{background:var(--jam)}
#toast.k-err{border-color:rgba(255,90,95,.55)}
#toast.k-err::before{background:var(--bad)}
@keyframes pwToastIn{0%{transform:translateX(-50%) translateY(14px) scale(.94)}60%{transform:translateX(-50%) translateY(-2px) scale(1.015)}100%{transform:translateX(-50%) translateY(0) scale(1)}}
@keyframes pwToastSheen{0%{opacity:0;transform:translateX(-30%)}25%{opacity:.9}100%{opacity:0;transform:translateX(30%)}}
html.pw-light #toast{box-shadow:0 8px 24px rgba(90,70,40,.3),inset 0 0 0 1px rgba(255,253,248,.5)}

.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);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}
/* v7：升级横幅仪式感——双金线框 + 弹入 + 背景流光 */
.enc-level-up{position:relative;overflow:hidden;margin:10px 0;padding:11px 10px;color:var(--gold2);font:700 14px/1 "Noto Serif SC";letter-spacing:1px;
  border:1px solid rgba(201,169,97,.45);
  box-shadow:inset 0 0 0 1px rgba(201,169,97,.15),0 0 18px rgba(201,169,97,.18);
  background:linear-gradient(100deg,rgba(201,169,97,.1) 20%,rgba(227,201,135,.28) 50%,rgba(201,169,97,.1) 80%) 0 0/220% 100%;
  animation:pwLvlPop .5s cubic-bezier(.2,1.4,.35,1) both,pwLvlSheen 2.8s linear .5s infinite}
@keyframes pwLvlPop{0%{transform:scale(.82);opacity:0}62%{transform:scale(1.045);opacity:1}100%{transform:scale(1)}}
@keyframes pwLvlSheen{0%{background-position:110% 0}100%{background-position:-110% 0}}

/* ============================================================
 * 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);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);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;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;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;min-width:0;flex:1 1 auto;overflow-x:auto}
  .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%}
  /* 右侧 190px 留给常驻 #pwDock；卡带宽 = 视口 - 左24 - (右24+190)，保证整卡不被浮层压住 */
  .route-shelf{padding:18px 214px 26px 24px}
  .route-scroll{--pw-card-w:calc((100% - 20px)/3)}
  .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}
}
/* 线路卡档位：1360+ 4 张、1600+ 5 张（MacBook Pro 默认 1440 → 4 张整卡） */
@media (min-width:1360px){
  .route-scroll{--pw-card-w:calc((100% - 30px)/4)}
}
@media (min-width:1600px){
  .route-scroll{--pw-card-w:calc((100% - 40px)/5)}
  /* ≥1600px 时 #fab 按 50%-620px 居中偏右，右侧避让加大到 380px */
  .route-shelf{padding-right:404px}
  .route-scroll-tail{flex-basis:380px}
}
@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.pw-season-on .rumor-bar{top:92px}
  body.pw-season-on .nearby-pill{top:92px}
  /* 筛选条与横幅左对齐(8px),间距同为 6px(横幅底 88 → 94) */
  .filter-bar{left:8px;top:38px}
  /* 模式控件让开附近车友(62-88)与赛季条(92-118) */
  .pw-mode-ctrl{top:100px;right:8px}
  body.pw-season-on .pw-mode-ctrl{top:122px}
  .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}
  .top-auth{padding:0 6px;gap:4px}
  .pw-auth-btn{height:26px;padding:0 8px;font-size:11px}
  .iconbtn{width:44px;height:44px;font-size:18px}
  #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}
  /* 右侧 190px 留给常驻 #pwDock（移动端它贴在卡带右侧） */
  .map-wrap .route-shelf{padding:14px 202px calc(80px + env(safe-area-inset-bottom)) 12px}
  /* 卡带被右侧避让收窄后，提示回到屏幕右缘（避让区上方），避免压住左侧“推荐路线”标签 */
  .route-scroll-hint{right:-162px}
  .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 var(--pw-card-w)}
  .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";
  }
/* 赛季条显示时:内容区整体让位 30px,跑马灯/附近车友同步下移,避免重叠 */
body.pw-season-on #view{top:86px}
body.pw-season-on .rumor-bar{top:92px}
body.pw-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;}
.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);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);
  box-shadow:0 2px 0 -1px rgba(0,0,0,.55),0 3px 0 -1px rgba(227,201,135,.2)}
.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);
  box-shadow:0 2px 0 -1px rgba(0,0,0,.55),0 3px 0 -1px rgba(227,201,135,.2)}
.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 文字去黑影
 * ============================================================ */
html.pw-light .leaflet-tile-pane,body.pw-light .leaflet-tile-pane{filter:none !important}
html.pw-light .pw-node-name,html.pw-light .pw-node-meta,
body.pw-light .pw-node-name,body.pw-light .pw-node-meta,
body.pw-light .node-label,body.pw-light .node-alt{text-shadow:none}
body.pw-light .brand-zh,body.pw-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.pw-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);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}
.pw-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);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);}
.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;}
.pf-end:active{transform:scale(.96)}
/* 场景全屏化：顶导脱离文档流叠加在场景上，场景占满可视区 */
.possess-page.pf{position:relative}
.possess-page.pf .pf-topbar{position:absolute;top:0;left:0;right:0}
#view .possess-page.pf{height:100%;min-height:100%}
.possess-page.pf .poss-stage-wrap{
  position:relative;overflow:hidden;border:none;border-radius:0;margin:0;
  height:100%;min-height:0;background:#0a0d12;
}
.possess-page.pf .poss-stage-wrap.drive-stage{
  flex:1 1 auto;height:auto;min-height:0;aspect-ratio:auto;width:100%;
  max-height:none;margin-inline:0;
}
.possess-page.pf:has(.drive-chips){height:100%;min-height:0;display:flex;flex-direction:column}
.possess-page.pf .poss-stage-wrap::after{content:none;border-radius:0}
.poss-scene{display:block;width:100%;height:100%;shape-rendering:geometricPrecision;overflow:hidden}
/* 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;flex-direction:column;align-items:flex-start;gap:8px;padding-top:46px;max-width:min(360px,72vw)}
.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);}
.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);}
.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);}
.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);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:.38s;--sideD:2.1s;--onD:2.5s;--bobd:.65s;--rushD:6.5s;--castD:2.6s;--rushZ:1.3}
.poss-scene.mode-moto{--dashD:.62s;--sideD:3.2s;--onD:3.8s;--bobd:.5s;--rushD:10s;--castD:3.8s;--rushZ:1.2}
.poss-scene.mode-bike{--dashD:1.25s;--sideD:5.6s;--onD:7s;--bobd:.55s;--rushD:18s;--castD:6.2s;--rushZ:1.12}
.poss-scene.mode-walk{--dashD:2.8s;--sideD:12s;--onD:16s;--bobd:.75s;--rushD:30s;--castD:11s;--rushZ:1.05}
.psgSky1{stop-color:#4e8ec8}.psgSky1b{stop-color:#86b7dc}.psgSky2{stop-color:#c9dce8}.psgSky3{stop-color:#edd4a0}
.psgGnd1{stop-color:#c4ae78}.psgGnd1b{stop-color:#9a8758}.psgGnd2{stop-color:#6a5c40}
.psgRoad1{stop-color:#5e5e5a}.psgRoad2{stop-color:#3a3a38}.psgRoad3{stop-color:#242422}
.psgHood1{stop-color:#2c3038}.psgHood2{stop-color:#0e1014}
.psgVig1{stop-color:#000;stop-opacity:0}.psgVig2{stop-color:#000;stop-opacity:.22}
.psgFar1{stop-color:#d2e0e8}.psgFar2{stop-color:#8fa8b6}
.psgMid1{stop-color:#8ea09a}.psgMid2{stop-color:#5c7068}
.psgNear1{stop-color:#6a7d62}.psgNear2{stop-color:#3f4c3c}
.poss-scene.night .psgSky1{stop-color:#050914}.poss-scene.night .psgSky1b{stop-color:#0c1426}.poss-scene.night .psgSky2{stop-color:#152238}.poss-scene.night .psgSky3{stop-color:#243654}
.poss-scene.night .psgGnd1{stop-color:#161b24}.poss-scene.night .psgGnd1b{stop-color:#12171f}.poss-scene.night .psgGnd2{stop-color:#0c1016}
.poss-scene.night .psgRoad1{stop-color:#32343b}.poss-scene.night .psgRoad2{stop-color:#22242a}.poss-scene.night .psgRoad3{stop-color:#14151a}
.poss-scene.night .psgHood1{stop-color:#0c0e12}.poss-scene.night .psgHood2{stop-color:#06080c}
.poss-scene.night .psgVig2{stop-opacity:.28}
.poss-scene.night .psgFar1{stop-color:#24344e}.poss-scene.night .psgFar2{stop-color:#121a2c}
.poss-scene.night .psgMid1{stop-color:#1a263c}.poss-scene.night .psgMid2{stop-color:#0e1624}
.poss-scene.night .psgNear1{stop-color:#121a28}.poss-scene.night .psgNear2{stop-color:#0a1018}
.ps-far-fill{fill:url(#psgFarMtn)}
.ps-mid-fill{fill:url(#psgMidMtn)}
.ps-near-fill{fill:url(#psgNearMtn)}
.ps-ridge{stroke:rgba(255,255,255,.28);stroke-width:.8;opacity:.7}
.ps-ridge2{stroke:rgba(20,28,24,.22);stroke-width:1}
.ps-ridge3{stroke:rgba(16,22,16,.28);stroke-width:1.1}
.poss-scene.night .ps-ridge{stroke:rgba(180,200,230,.16)}
.poss-scene.night .ps-ridge2,.poss-scene.night .ps-ridge3{stroke:rgba(0,0,0,.35)}
.ps-shoulder{fill:#7d8b58;opacity:.22}
.poss-scene.night .ps-shoulder{fill:#1a2218;opacity:.35}
.ps-hood-spec{fill:#fff;opacity:.07}
.poss-scene.night .ps-hood-spec{opacity:.03}
.ps-sun-hl{fill:#fff;opacity:.55}
.ps-snow{fill:#f7fafc;opacity:.94}
.poss-scene.night .ps-snow{fill:#6a7a90;opacity:.45}
.ps-sun{fill:#fff6c8;filter:drop-shadow(0 0 10px rgba(255,214,120,.7));animation:psSunGlow 6s ease-in-out infinite alternate}
.ps-moon{fill:#eef1f6;filter:drop-shadow(0 0 8px rgba(200,210,235,.5));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-mid{animation:psMtnNear 34s linear infinite}
.ps-mtn-near{animation:psMtnNear 26s linear infinite}
.ps-mtn-b{animation-delay:-23s}
.ps-mtn-mid.ps-mtn-b{animation-delay:-17s}
.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;vector-effect:non-scaling-stroke}
.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;vector-effect:non-scaling-stroke}
.ps-edge-guide{stroke:var(--gold);stroke-width:5;stroke-dasharray:18 14;stroke-linecap:butt}
.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:none}
.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,.rs-cross.ltr,.rs-cross.rtl{animation:none}
@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{animation:none}
@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:.48}
/* 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:428px 362px;animation:psSteer 3.2s ease-in-out infinite alternate}
.ps-wheel-inner{fill:none;stroke:#2a2e36;stroke-width:7}
.ps-wind{fill:url(#psgWind);opacity:.16}
.poss-scene.night .ps-wind{opacity:.22}
.ps-wind-glare{fill:#fff;opacity:.05}
.poss-scene.night .ps-wind-glare{opacity:.02}
.ps-wind-seal{stroke:rgba(255,255,255,.08);stroke-width:2}
.ps-wiper{stroke:#1c2026;stroke-width:3;stroke-linecap:round;opacity:.7}
.ps-wiper-arm{stroke:#2a3038;stroke-width:4;stroke-linecap:round}
.ps-pillar-r{opacity:.96}
.ps-pillar-in{fill:rgba(255,255,255,.04)}
.ps-cockpit{fill:url(#psgDash)}
.ps-dash-hl{stroke:rgba(255,255,255,.12);stroke-width:1.4}
.ps-vent{fill:#12151a;stroke:#3a4048;stroke-width:.6}
.ps-gauge{fill:#0b0d11;stroke:rgba(201,169,97,.35);stroke-width:.8}
.ps-gauge-t{fill:var(--gold2);font:700 12px/1 "JetBrains Mono";letter-spacing:1px}
.ps-sidemirror{opacity:.95}
.ps-moto-tank{fill:#1c222c;stroke:#0b0d11;stroke-width:1}
.ps-treeline{fill:#4a5a48;opacity:.32}
.poss-scene.night .ps-treeline{fill:#0c1218;opacity:.55}
/* 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{display:none}
@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)}
.ps-grass-rush{pointer-events:none}
@media (prefers-reduced-motion:reduce){
  .ps-grass-rush{display:none!important}
  .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,.ps-tex-rush,.ps-cast-rear,.ps-cast-front,.ps-cast-bob{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}
.pw-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;}
.ws-watcher{margin-left:4px;opacity:.9;white-space:nowrap}
.watch-page .watch-hud{padding:12px 12px 64px 12px;justify-content:flex-end}
.watch-hud .ws-status{width:100%}
/* 传音沟通条 */
.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);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-frame{position:absolute;inset:10px;z-index:5;pointer-events:none;border:1px solid rgba(201,169,97,.18)}
.ws-frame::before,.ws-frame::after{content:"";position:absolute;width:18px;height:18px;border:2px solid var(--gold2);opacity:.85}
.ws-frame::before{top:-2px;left:-2px;border-right:0;border-bottom:0}
.ws-frame::after{top:-2px;right:-2px;border-left:0;border-bottom:0}
.watch-scene{position:relative}
.watch-scene::after{content:"";position:absolute;left:10px;right:10px;bottom:10px;height:18px;z-index:5;pointer-events:none;
  background:linear-gradient(90deg,var(--gold2),transparent 18%,transparent 82%,var(--gold2));opacity:.35;
  mask:linear-gradient(#000,#000) content-box,linear-gradient(#000,#000);padding:0}
.ws-camname{
  position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:6;pointer-events:none;
  display:flex;align-items:center;gap:8px;
  font:600 12px/1 "Noto Serif SC";letter-spacing:3px;color:var(--gold2);padding:6px 16px;
  background:rgba(12,10,6,.72);border:1px solid rgba(201,169,97,.4);animation:wsCamName 2.4s ease forwards;
}
.ws-rec{width:7px;height:7px;border-radius:50%;background:#e24b3c;box-shadow:0 0 8px #e24b3c;animation:wsRec 1.1s ease-in-out infinite;flex:0 0 7px}
@keyframes wsRec{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes wsCamName{0%{opacity:0;transform:translateX(-50%) translateY(-6px)}18%,78%{opacity:1;transform:translateX(-50%) translateY(0)}100%{opacity:.55}}
.ws-camswitch{
  position:absolute;right:12px;top:50%;transform:translateY(-50%);z-index:7;
  display:flex;flex-direction:column;gap:8px;pointer-events:auto;
  padding:8px 7px;background:rgba(10,9,6,.55);border:1px solid rgba(201,169,97,.32);}
.ws-cam-btn{
  width:52px;min-height:48px;border:1px solid rgba(201,169,97,.28);
  background:transparent;color:var(--gold2);cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px 4px;
  transition:background .2s,border-color .2s,box-shadow .2s,color .2s;
}
.ws-cam-ico{font-size:13px;line-height:1;opacity:.9}
.ws-cam-lab{font:600 10px/1.2 "Noto Serif SC";letter-spacing:1px}
.ws-cam-btn:hover{border-color:var(--gold);background:rgba(201,169,97,.12)}
.ws-cam-btn.on{background:linear-gradient(180deg,rgba(227,201,135,.95),rgba(201,169,97,.88));color:#1a1408;border-color:var(--gold2);box-shadow:0 0 14px rgba(201,169,97,.45)}
.ws-cam-btn.on .ws-cam-lab{font-weight:800}
.ws-status{
  pointer-events:none;display:flex;align-items:stretch;gap:10px;max-width:min(560px,calc(100% - 86px));
  margin-top:auto;padding:10px 12px;background:rgba(10,9,6,.78);
  border:1px solid rgba(201,169,97,.4);box-shadow:0 8px 28px rgba(0,0,0,.45);
}
.ws-status-ava{
  width:44px;height:44px;flex:0 0 44px;display:grid;place-items:center;align-self:center;
  font-size:22px;background:radial-gradient(circle at 40% 30%,rgba(242,217,140,.25),rgba(20,16,12,.95));
  border:1.5px solid var(--gold);box-shadow:0 0 12px rgba(201,169,97,.25);
}
.ws-status-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.ws-status-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ws-status-row b{font:700 14px/1.2 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.ws-lv{font:600 10px/1 "Noto Serif SC";color:rgba(232,224,208,.55);font-style:normal;letter-spacing:1px}
.ws-chip{font:600 10px/1 "Noto Serif SC";padding:3px 7px;border:1px solid rgba(201,169,97,.35);color:var(--gold2);background:rgba(201,169,97,.1);letter-spacing:.5px}
.ws-chip.night{border-color:rgba(127,180,216,.45);color:#cfe8f7;background:rgba(80,120,160,.18)}
.ws-chip.day{border-color:rgba(232,180,80,.4);color:#f0d48a}
.ws-chip.poss{border-color:rgba(201,169,97,.6);color:var(--gold2)}
.ws-status-loc{font-size:11px;color:rgba(232,224,208,.72);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-status-loc b{color:var(--gold2);font-weight:700}
.ws-status-meters{display:flex;flex-direction:column;gap:4px}
.ws-status-meters .pf-bar{height:14px;max-width:none}
.ws-status-watch{
  flex:0 0 auto;min-width:72px;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;
  gap:4px;padding-left:10px;border-left:1px solid rgba(201,169,97,.22);
}
.ws-watch-n{font:800 16px/1 "Noto Serif SC";color:#cfe8f7;letter-spacing:1px}
.ws-watch-n small{font-size:11px;font-weight:600;color:rgba(207,232,247,.55)}
.ws-watch-list{font-size:10.5px;color:rgba(207,232,247,.8);text-align:right;max-width:110px;line-height:1.4}
.ws-watcher{display:inline}
html.pw-light .ws-camname,html.pw-light .ws-camswitch,html.pw-light .ws-status{
  background:rgba(255,253,248,.88);border-color:rgba(154,119,47,.4);color:var(--gold2);
}
html.pw-light .ws-status-loc{color:rgba(45,36,24,.7)}
html.pw-light .ws-cam-btn.on{color:#1a1408}
html.pw-light .ws-frame{border-color:rgba(154,119,47,.28)}
/* —— 飘字气泡 —— */
.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);
  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);}
.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;
}
/* —— 行者本人感知条 —— */
.pw-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)}
.pw-aware.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.pw-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);padding:6px 14px;cursor:pointer;
  box-shadow:0 4px 18px rgba(0,0,0,.5);font-size:12.5px;
}
.pw-aware-pill .aw-poss{color:var(--gold2)}
.pw-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)}}
.pw-aware.ping .pw-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) .pw-aware{display:none}
/* —— 感知面板 —— */
.pw-aware-panel{position:fixed;inset:0;z-index:1700;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.55);padding:16px}
.pw-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}
  .pw-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;}
}

.ps-mirr-sky{fill:#8fb8d6}
.ps-mirr-gnd{fill:#8a7d55}
.ps-mirr-rd{fill:#4a453c}
.ps-mirr-glass{stroke:rgba(255,255,255,.18);stroke-width:1}
.ps-mirror-car{fill:#c45a48}
.poss-scene.night .ps-mirr-sky{fill:#1a2438}
.poss-scene.night .ps-mirr-gnd{fill:#1c2220}
.poss-scene.night .ps-mirr-rd{fill:#2a2c30}
.poss-scene.night .ps-mirror-car{fill:#d8a060}
body.pathwalker:has(.possess-page) #rumorBar,
body.pathwalker:has(.possess-page) #fab,
body.pathwalker:has(.possess-page) #heroCard{display:none !important}

.ps-tex-rush{transform-origin:360px 168px;transform-box:view-box;will-change:transform,opacity;animation:psRush var(--rushD,12s) linear infinite}
.ps-tex-rush-b{animation-delay:calc(var(--rushD,12s)*-.5)}
@keyframes psRush{0%{transform:scale(1.05) translateY(0);opacity:0}8%{opacity:1}72%{opacity:1}100%{transform:scale(var(--rushZ,1.34)) translateY(9%);opacity:0}}
.ps-cast-rear{transform-box:fill-box;transform-origin:50% 100%;animation:psCastRear var(--castD,3.4s) ease-in-out infinite alternate}
@keyframes psCastRear{from{transform:translate(0,0) scale(1)}to{transform:translate(8px,10px) scale(1.12)}}
.ps-cast-front{transform-box:fill-box;transform-origin:50% 100%;animation:psCastFront var(--onD,5s) linear infinite}
@keyframes psCastFront{0%{transform:translate(12px,-8px) scale(.62);opacity:.35}18%{opacity:1}100%{transform:translate(-40px,28px) scale(1.2);opacity:0}}
.ps-cast-bob{transform-box:fill-box;transform-origin:50% 100%;animation:psCastBob var(--bobd,1.1s) ease-in-out infinite alternate}
@keyframes psCastBob{from{transform:translate(0,0)}to{transform:translate(-2px,3px)}}
.ps-tex-cockpit{pointer-events:none}
.ps-tex-env{opacity:.96}
.ps-tex-veil{fill:#070b12;opacity:0}
.poss-scene.night .ps-tex-veil{opacity:.18}

.poss-scene.night .ps-tex-env{filter:brightness(.42) saturate(.62) hue-rotate(-18deg) contrast(1.05)}
.ps-photo-cast image{pointer-events:none}

.drive-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 12px;font:600 12px/1 "Noto Serif SC"}
.poss-scene.night .ps-tex-rush{filter:brightness(.42) saturate(.72) hue-rotate(-12deg)}


/* t194c */
@media (max-width:767.98px){
  .pw-auth-btn{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:8px 12px!important;}
  .topbar .tools, .hud-right, .map-tools{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}
}


/* ============================================================
 * P0-2 / P0-3 / P0-4（2026-11-02）
 * 战斗状态徽章 / 五行克制 / 蓄力格挡 / 附身三模式 / 场景五态
 * 纯 CSS 状态机；不新增 JS rAF，降级见 [data-pw-scene-fx="lite"]
 * ============================================================ */

/* —— P0-2 战斗：克制 / 意图 / 状态徽章 —— */
.rb-elem-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0 4px;font-size:11px;color:var(--paper)}
.rb-elem{display:inline-flex;align-items:center;gap:2px;padding:2px 7px;border:1px solid var(--line);border-radius:2px;background:rgba(201,169,97,.12);font-weight:700;letter-spacing:1px}
.rb-elem-tip{color:var(--muted, #9a9388)}
.rb-elem-tip b{color:var(--gold)}
.rb-intent{margin:2px 0 6px;font-size:11px;letter-spacing:.5px;color:var(--paper);opacity:.85}
.rb-intent.heavy{color:#e8843e;font-weight:700;opacity:1}
.rb-buffs{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 8px}
.rb-buff{font-size:10px;line-height:1;padding:4px 6px;border-radius:2px;border:1px solid var(--line);background:rgba(201,169,97,.10);color:var(--paper);white-space:nowrap}
.rb-buff.atk{border-color:rgba(232,132,62,.55);color:#e8843e}
.rb-buff.def{border-color:rgba(108,158,196,.55);color:#8fb8d6}
.rb-buff.crit{border-color:rgba(201,169,97,.8);color:var(--gold)}
.rb-buff.charge{border-color:rgba(201,169,97,.9);color:var(--gold);font-weight:700}
.rb-buff.debuff,.rb-buff.stun{border-color:rgba(178,58,44,.55);color:#d98a7c}
.rb-vs-el{font-size:9px;line-height:1;padding:2px 4px;margin-top:2px;border-radius:2px;letter-spacing:.5px}
.rb-vs-el.win{color:#7fb383;background:rgba(64,140,72,.16);border:1px solid rgba(64,140,72,.5)}
.rb-vs-el.lose{color:#d98a7c;background:rgba(178,58,44,.12);border:1px solid rgba(178,58,44,.45)}
.rb-weak{border-style:dashed!important}
.rb-weak .rb-sk-cost i{font-style:normal;color:#e8843e;font-size:9px}
.rb-tactic{padding:6px 12px;margin:0 4px;background:rgba(201,169,97,.10);border:1px solid var(--gold);color:var(--paper);font:700 12px/1 "Noto Serif SC";letter-spacing:1px;cursor:pointer;transition:background .2s,border-color .2s}
.rb-tactic:hover:not(:disabled){background:rgba(201,169,97,.22)}
.rb-tactic.rb-disabled,.rb-tactic:disabled{opacity:.38;cursor:not-allowed;border-color:var(--line)}
.rb-actions{gap:4px}
.rb-cap{color:#e8843e;border-color:rgba(232,132,62,.5)}

/* —— P0-3 附身三模式 —— */
.pm-modes{display:grid;gap:8px;margin-bottom:8px}
.pm-mode{display:grid;gap:3px;padding:9px 10px;border:1px solid var(--line);background:rgba(201,169,97,.04);cursor:pointer;transition:border-color .2s,background .2s}
.pm-mode.on{border-color:var(--gold);background:rgba(201,169,97,.14);box-shadow:inset 0 0 0 1px rgba(201,169,97,.25)}
.pm-mode input{position:absolute;opacity:0;pointer-events:none}
.pm-mode-h{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--paper)}
.pm-mode-cost{margin-left:auto;font:700 10px/1 "JetBrains Mono";color:var(--gold2,var(--gold))}
.pm-mode-d{font-size:11px;line-height:1.55;color:var(--muted,#9a9388)}
.pm-mode-meta{font-size:10px;line-height:1.4;color:var(--gold);letter-spacing:.4px}
.pf-mode-badge{margin-top:3px;font-size:10px;letter-spacing:.6px;color:var(--gold);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:4px}
/* v9：三模式印记（内联 SVG 徽记），随模式着色 */
.pf-sigil{display:inline-flex;align-items:center;flex:0 0 auto;color:var(--gold2)}
.pm-page-observe .pf-sigil{color:#a9cfe6}
.pm-page-ride .pf-sigil{color:var(--orange)}
.pm-page-meditate .pf-sigil{color:#d8c08a}
/* v9：目标途中状态条——近点/下站双锚 + 行进脉冲点（纯示意，不标百分比） */
.pf-target-track{display:flex;align-items:center;gap:5px;margin-top:4px;max-width:220px}
.pf-target-track .pt-dot{flex:0 0 5px;width:5px;height:5px;border-radius:50%;background:var(--gold);box-shadow:0 0 5px rgba(201,169,97,.6)}
.pf-target-track .pt-dot.b{background:var(--weak);box-shadow:none}
.pf-target-track .pt-line{position:relative;flex:1;height:2px;background:linear-gradient(90deg,rgba(201,169,97,.55),rgba(201,169,97,.15))}
.pf-target-track .pt-runner{position:absolute;top:50%;left:0;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;
  background:var(--gold2);box-shadow:0 0 7px rgba(227,201,135,.9);
  animation:ptRun 3.2s ease-in-out infinite}
@keyframes ptRun{0%{left:0;opacity:0}12%{opacity:1}82%{opacity:1}100%{left:100%;opacity:0}}
/* v9：事件卡三模式着色（不只是换滤镜）+ 图标弹入 */
.pm-page-observe .poss-event-card{border-color:rgba(169,207,230,.55)}
.pm-page-meditate .poss-event-card{border-color:rgba(216,192,138,.6)}
.poss-ev-icon{animation:psEvIcon .45s cubic-bezier(.2,1.4,.4,1) .1s both}
@keyframes psEvIcon{0%{transform:scale(.4);opacity:0}62%{transform:scale(1.18)}100%{transform:scale(1);opacity:1}}
/* v9：抉择 picked/dimmed 态 */
.pf-evbtn.picked{border-color:var(--gold2);color:var(--gold2);background:linear-gradient(180deg,#3a2f17,#241d0e);box-shadow:0 0 0 1px rgba(227,201,135,.35),0 4px 18px rgba(201,169,97,.35)}
.pf-evbtn.dimmed{opacity:.45}
@media (max-width:480px){.pf-mode-badge{white-space:normal}}
.pf-mode-acts{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:center;padding:6px 8px}
.pf-mode-act{padding:6px 10px;background:rgba(201,169,97,.10);border:1px solid var(--gold);color:var(--paper);font:700 11px/1 "Noto Serif SC";cursor:pointer}
.pf-mode-act i{font-style:normal;color:var(--gold);font-family:"JetBrains Mono";font-size:9px}
.pf-mode-act:hover:not(:disabled){background:rgba(201,169,97,.22)}
.pf-mode-act:disabled{opacity:.4;cursor:not-allowed}
.pf-mode-lock{font-size:10px;color:var(--muted,#9a9388);letter-spacing:.4px}
.pf-preview{margin:0 0 6px;padding:6px 8px;font-size:11px;line-height:1.5;color:#8fb8d6;background:rgba(72,118,148,.14);border:1px solid rgba(72,118,148,.35)}
.pf-preview b{color:#a9cfe6}
.pf-ev-auto{margin:6px 0;padding:6px 8px;font-size:11px;line-height:1.5;color:#a9cfe6;background:rgba(72,118,148,.12);border:1px dashed rgba(72,118,148,.45)}
.pf-chip.pm{border-color:rgba(201,169,97,.6)}

/* —— P0-4 场景五态（CSS 状态机）—— */
body::after{content:'';position:fixed;inset:0;pointer-events:none;z-index:9000;opacity:0;background:none;transition:opacity .35s ease}
body[data-pw-scene="combat"]::after{opacity:1;background:radial-gradient(ellipse at 50% 45%,transparent 52%,rgba(201,169,97,.20) 100%)}
body[data-pw-scene="boss"]::after{opacity:1;background:radial-gradient(ellipse at 50% 42%,transparent 38%,rgba(178,58,44,.36) 100%)}
body[data-pw-scene="possess"]::after{opacity:1;background:linear-gradient(180deg,rgba(72,118,148,.20),transparent 26%,transparent 72%,rgba(20,28,38,.34))}
body[data-pw-scene="defeated"]::after{opacity:1;background:radial-gradient(ellipse at 50% 50%,rgba(80,16,12,.10) 18%,rgba(20,6,5,.60) 100%)}
body[data-pw-scene="combat"] .rbattle-body{box-shadow:inset 0 0 0 1px rgba(201,169,97,.35),inset 0 0 60px rgba(201,169,97,.10)}
body[data-pw-scene="boss"] .rbattle-body{box-shadow:inset 0 0 0 1px rgba(178,58,44,.45),inset 0 0 70px rgba(178,58,44,.18)}
body[data-pw-scene="possess"] .poss-stage-wrap{box-shadow:inset 0 0 80px rgba(72,118,148,.22)}
body[data-pw-scene="defeated"] .rb-result.rb-lose{text-shadow:0 0 18px rgba(178,58,44,.6)}

/* 降级：断网 / 减少动态 → 关闭叠加层与过渡 */
body[data-pw-scene-fx="lite"]::after{background:none!important;opacity:0!important;transition:none!important}
body[data-pw-scene-fx="lite"] .rbattle-body,body[data-pw-scene-fx="lite"] .poss-stage-wrap{box-shadow:none!important}
@media (prefers-reduced-motion:reduce){
  body::after{transition:none}
  .rb-skill,.rb-tactic,.pm-mode{transition:none}
}

/* ============================================================
 * P0-5 场景层补完（2026-11-02）
 * 战斗回合反馈：命中率 / 体力条 / 会心·格挡·重击·五行·闪避演出
 * 附身三模式场景差异：观照取景 / 同乘双生 / 入定呼吸
 * 全部为外部样式（CSP nonce 加载），不使用内联 style / onclick
 * ============================================================ */

/* —— 战斗：技能命中率徽章 —— */
.rb-sk-hit{font-size:9px;line-height:1;padding:2px 4px;margin-top:2px;border-radius:2px;letter-spacing:.5px;
  color:#a9cfe6;background:rgba(72,118,148,.16);border:1px solid rgba(72,118,148,.45)}

/* —— 战斗：体力条（覆盖旧的一行文字） —— */
.rb-stamina{margin-top:5px;display:flex;align-items:center;gap:5px;text-align:left}
.rb-stamina-bar{flex:1 1 auto;height:6px;background:rgba(0,0,0,.55);border:1px solid var(--line);overflow:hidden;border-radius:2px}
.rb-stamina-fill{height:100%;background:linear-gradient(90deg,#8a6a1f,#ffd23f);transition:width .42s cubic-bezier(.4,0,.2,1)}
.rb-stamina-fill[data-m2m-style]{will-change:width}
.rb-stamina-num{flex:0 0 auto;font:700 9px/1 "JetBrains Mono";color:var(--gold2);white-space:nowrap}

/* —— 战斗：上回合结算摘要 —— */
.rb-cue{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:0 0 8px;padding:6px 8px;
  border:1px solid rgba(201,169,97,.28);background:linear-gradient(90deg,rgba(201,169,97,.12),rgba(201,169,97,.02));
  animation:rbCueIn .28s ease-out both}
@keyframes rbCueIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.rb-tag{display:inline-flex;align-items:center;gap:3px;font-size:10px;line-height:1;padding:3px 6px;border-radius:2px;
  border:1px solid var(--line);background:rgba(0,0,0,.28);color:var(--paper);white-space:nowrap}
.rb-tag.crit{color:#ff8b8f;border-color:rgba(255,90,95,.55);background:rgba(255,90,95,.12)}
.rb-tag.guard,.rb-tag.dodge{color:#8fb8d6;border-color:rgba(108,158,196,.55);background:rgba(72,118,148,.14)}
.rb-tag.guard-ok{color:#a9cfe6;border-color:rgba(108,158,196,.8)}
.rb-tag.heavy{color:#e8843e;border-color:rgba(232,132,62,.6);background:rgba(232,132,62,.12);font-weight:700}
.rb-tag.elem{color:#7fb383;border-color:rgba(64,140,72,.55);background:rgba(64,140,72,.14)}
.rb-tag.elem.bad{color:#d98a7c;border-color:rgba(178,58,44,.5);background:rgba(178,58,44,.12)}
.rb-tag.miss{color:#b9b3a8;border-color:var(--line)}
.rb-tag.charge{color:var(--gold);border-color:rgba(201,169,97,.7);background:rgba(201,169,97,.12);font-weight:700}

/* —— 战斗：受击 / 会心 / 重击 / 闪避 / 格挡演出 —— */
@keyframes rbShake{0%,100%{transform:translateX(0)}18%{transform:translateX(-6px)}36%{transform:translateX(5px)}54%{transform:translateX(-4px)}72%{transform:translateX(3px)}}
@keyframes rbCritPop{0%{transform:scale(1)}30%{transform:scale(1.12) rotate(-1.2deg)}62%{transform:scale(1.04) rotate(.8deg)}100%{transform:scale(1)}}
@keyframes rbHeavyShake{0%,100%{transform:translate(0,0)}15%{transform:translate(-7px,2px)}32%{transform:translate(6px,-2px)}49%{transform:translate(-5px,1px)}66%{transform:translate(4px,0)}}
@keyframes rbDodge{0%,100%{opacity:1;transform:translateX(0)}26%{opacity:.45;transform:translateX(14px)}60%{opacity:.7;transform:translateX(9px)}}
@keyframes rbGuardGlow{0%{box-shadow:none}45%{box-shadow:inset 0 0 0 2px rgba(108,158,196,.7),inset 0 0 26px rgba(72,118,148,.45)}100%{box-shadow:none}}
.rb-side.rb-hit{animation:rbShake .52s ease-out}
.rb-side.rb-crit{animation:rbCritPop .5s ease-out,rbShake .5s ease-out}
.rb-side.rb-heavy{animation:rbHeavyShake .6s ease-out}
.rb-side.rb-dodge{animation:rbDodge .5s ease-out}
.rb-side.rb-guard-ok{animation:rbGuardGlow .62s ease-out}

/* —— 战斗：飘字分型 —— */
.rb-dmg-float.block{font-size:14px;color:#a9cfe6;text-shadow:0 0 6px rgba(108,158,196,.6),0 2px 4px #000}
.rb-dmg-float.miss{font-size:13px;color:#cfc8ba;text-shadow:0 2px 4px #000}
.rb-dmg-float.heavy{font-size:20px;color:#ff9a4d;text-shadow:0 0 7px rgba(232,132,62,.65),0 2px 4px #000}
.rb-dmg-float.elem{font-size:18px;color:#8fd694;text-shadow:0 0 7px rgba(64,140,72,.6),0 2px 4px #000}

/* —— 附身：三模式场景遮罩 —— */
.pf-mode-veil{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.pf-mode-veil span{position:absolute;display:none;pointer-events:none}
.pf-mode-veil .pf-veil-frame,.pf-mode-veil .pf-veil-scan,
.pf-mode-veil .pf-veil-ring,.pf-mode-veil .pf-veil-tether{opacity:0}

/* 观照：取景框 + 扫描线 + 轻微降饱和（远观不干预） */
.pm-observe .pf-veil-frame{display:block;opacity:1;inset:20px 24px;border:1px solid rgba(169,207,230,.35);
  box-shadow:inset 0 0 0 1px rgba(169,207,230,.06)}
.pm-observe .pf-veil-frame::before,.pm-observe .pf-veil-frame::after{content:'';position:absolute;width:26px;height:26px;border:2px solid rgba(169,207,230,.7)}
.pm-observe .pf-veil-frame::before{left:-1px;top:-1px;border-right:none;border-bottom:none}
.pm-observe .pf-veil-frame::after{right:-1px;bottom:-1px;border-left:none;border-top:none}
.pm-observe .pf-veil-scan{display:block;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,transparent,rgba(169,207,230,.85),transparent);
  box-shadow:0 0 12px rgba(169,207,230,.5);opacity:1;animation:pmScan 4.4s linear infinite}
.pm-observe .poss-scene{filter:saturate(.72) contrast(1.02)}

/* 同乘：暖色调 + 双生连线脉冲（共担风险） */
.pm-ride .pf-veil-tether{display:block;left:50%;bottom:0;width:2px;height:44%;transform:translateX(-50%);opacity:.9;
  background:linear-gradient(180deg,rgba(232,132,62,0),rgba(232,132,62,.72));
  animation:pmTether 2.6s ease-in-out infinite}
.pm-ride .pf-veil-tether::after{content:'';position:absolute;left:50%;top:0;width:10px;height:10px;margin-left:-5px;border-radius:50%;
  background:radial-gradient(circle,#ffd7a6,rgba(232,132,62,.25) 61%,transparent 70%);
  box-shadow:0 0 14px rgba(232,132,62,.75)}
.pm-ride .poss-scene{filter:saturate(1.2) contrast(1.06)}
.pm-ride .poss-stage-mask .poss-event-card{border-color:rgba(232,132,62,.55)}

/* 入定：暗角 + 呼吸同心圆 + 墨色低饱和（高耗高益） */
.pm-meditate .pf-veil-frame{display:block;opacity:1;inset:0;
  background:radial-gradient(ellipse at 50% 46%,transparent 32%,rgba(6,9,13,.58) 100%)}
.pm-meditate .pf-veil-ring{display:block;left:50%;top:46%;width:140px;height:140px;margin:-70px 0 0 -70px;border-radius:50%;
  border:1px solid rgba(201,169,97,.42);opacity:1;animation:pmBreath 5.2s ease-in-out infinite}
.pm-meditate .pf-veil-ring.r2{width:86px;height:86px;margin:-43px 0 0 -43px;border-color:rgba(201,169,97,.62);animation-delay:1.4s}
.pm-meditate .poss-scene{filter:saturate(.55) brightness(.86) contrast(1.12)}
.pm-meditate .pf-mode-badge{color:#d8c08a}

@keyframes pmScan{0%{transform:translateY(20px)}100%{transform:translateY(300px)}}
@keyframes pmTether{0%,100%{opacity:.35;transform:translateX(-50%) scaleY(.82)}50%{opacity:.95;transform:translateX(-50%) scaleY(1)}}
@keyframes pmBreath{0%,100%{transform:scale(.86);opacity:.28}50%{transform:scale(1.16);opacity:.72}}

/* 降级：断网 / 减少动态 / 场景 lite → 只保留静态分层，不跑动画 */
body[data-pw-scene-fx="lite"] .pf-mode-veil span,
body[data-pw-scene-fx="lite"] .rb-side{animation:none!important}
body[data-pw-scene-fx="lite"] .pf-veil-scan,
body[data-pw-scene-fx="lite"] .pf-veil-tether,
body[data-pw-scene-fx="lite"] .pf-veil-ring{display:none!important}
@media (prefers-reduced-motion:reduce){
  .rb-side.rb-hit,.rb-side.rb-crit,.rb-side.rb-heavy,.rb-side.rb-dodge,.rb-side.rb-guard-ok,
  .rb-cue,.pf-veil-scan,.pf-veil-tether,.pf-veil-ring{animation:none!important}
  .pf-veil-scan,.pf-veil-tether,.pf-veil-ring{display:none!important}
  .rb-hp-fill,.rb-stamina-fill{transition:none!important}
}

/* ============================================================
 * 附身页 HUD 穿透 mesh-hub 电影层（2026-11-02 补完）
 * mesh-hub 把真实座舱照片做成 body 级 .pw-cabin（position:fixed;z-index:100000），
 * 原 HUD/遮罩都在 .poss-stage-wrap(z5) 内 → 被整屏盖住，页面只剩座舱照片。
 * 处理：场景留在 stage（电影层照常渲染），HUD/遮罩/事件卡/前行键升为页面直属子层，
 * 并把 #view 整页提层到座舱之上，子层 z-index 100001~100004 在页内继续分层。
 * 全部外置样式，无内联 style/onclick。
 * ============================================================ */
/* 关键：整页容器 #view 提层到座舱（z100000）之上；
   场景 stage 背景置透明，座舱照片从下方透出，HUD/遮罩再压在其上 */
body.pathwalker:has(.possess-page) #view{position:fixed;z-index:100001}
.possess-page.pf > .pf-topbar{position:absolute;top:0;left:0;right:0;z-index:100004}
.possess-page.pf > .pf-mode-veil{position:absolute;inset:0;z-index:100001;pointer-events:none}
.possess-page.pf > .pf-hud{
  display:flex!important;position:absolute;inset:0;z-index:100002;
  pointer-events:none;justify-content:space-between;padding:12px;
}
.possess-page.pf > .poss-stage-mask{
  position:absolute;inset:auto 0 0 0;z-index:100003;min-height:280px;
  display:flex;flex-direction:column;justify-content:flex-start;pointer-events:none;
}
.possess-page.pf > .poss-stage-mask .poss-event-card{pointer-events:auto}
.possess-page.pf > .pf-mode-acts{
  position:absolute;left:0;right:0;bottom:118px;z-index:100003;
  display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:center;
  padding:6px 10px;pointer-events:auto;
}
.possess-page.pf > .poss-go{position:absolute;left:50%;bottom:14px;z-index:100004;transform:translateX(-50%)}
.possess-page.pf > .poss-go:active{transform:translateX(-50%) scale(.95)}
/* 页面自身不压住电影层：仅承载定位，背景透明 */
.possess-page.pf{background:transparent}
body.pathwalker .possess-page.pf > .poss-stage-wrap{background:transparent!important}

/* —— 三种附身模式的整屏色调层（盖在座舱照片上，肉眼可辨） —— */
.pm-observe > .pf-mode-veil{
  background:linear-gradient(180deg,rgba(72,118,148,.20),rgba(72,118,148,.04) 28%,
    rgba(10,16,24,.06) 70%,rgba(6,10,16,.38) 100%);
}
.pm-ride > .pf-mode-veil{
  background:
    radial-gradient(ellipse at 50% 68%,rgba(232,132,62,.24),rgba(232,132,62,.06) 46%,transparent 68%),
    linear-gradient(180deg,rgba(58,26,14,.18),transparent 34%,transparent 78%,rgba(36,16,9,.34));
}
.pm-meditate > .pf-mode-veil{
  background:
    radial-gradient(ellipse at 50% 46%,transparent 26%,rgba(4,7,10,.52) 82%,rgba(2,4,7,.72) 100%),
    linear-gradient(180deg,rgba(20,26,34,.16),transparent 40%,rgba(4,6,9,.42));
}
/* 观照扫描线改成整屏纵向扫描（原 300px 太短，肉眼看不到） */
@keyframes pmScanFull{0%{transform:translateY(24px);opacity:0}8%{opacity:1}92%{opacity:1}100%{transform:translateY(calc(100vh - 96px));opacity:0}}
.pm-observe .pf-veil-scan{animation:pmScanFull 5.6s linear infinite}
/* 同乘双生线加高、加暖；入定呼吸环放大，静态截图也能看出 */
.pm-ride .pf-veil-tether{height:58%}
.pm-meditate .pf-veil-ring{width:190px;height:190px;margin:-95px 0 0 -95px;border-width:2px}
.pm-meditate .pf-veil-ring.r2{width:112px;height:112px;margin:-56px 0 0 -56px}
@media (max-width:767.98px){
  .possess-page.pf > .pf-mode-acts{bottom:108px}
  .pm-meditate .pf-veil-ring{width:150px;height:150px;margin:-75px 0 0 -75px}
  .pm-meditate .pf-veil-ring.r2{width:92px;height:92px;margin:-46px 0 0 -46px}
}

/* ============================================================
 * v2 六边形战场（2026-11-02）：Wesnoth 式石雕边框 + 程序化 SVG 地形
 * 地形/立绘全自绘，无外部素材；演出全 CSS transform/opacity，无 rAF
 * ============================================================ */

/* —— 宽版战斗 sheet —— */
.sheet.rbattle-wide{max-width:980px;max-height:100vh;overflow-y:auto}
.sheet.rbattle-wide .rbattle-body{padding:12px}

/* v10：车机/矮横屏（800×480、1024×600、横屏手机）战斗双栏收口——
   战场左列（跨副栏+战报两行），技能与行动压底，整屏免滚动 */
@media (max-height:620px) and (min-width:700px){
  .sheet.rbattle-wide .rbattle-head{padding:5px 12px}
  .sheet.rbattle-wide .rbattle-body{padding:6px 10px}
  .sheet.rbattle-wide .rb-bf{display:grid;
    grid-template-columns:minmax(0,auto) minmax(0,1fr);
    grid-template-rows:auto auto minmax(0,1fr) auto auto;
    grid-template-areas:"turn turn" "stage sub" "stage log" "skills skills" "actions actions";
    column-gap:10px}
  .sheet.rbattle-wide .rb-turn{grid-area:turn}
  .sheet.rbattle-wide .rb-bf-stage{grid-area:stage;width:auto;height:100%;min-width:300px;max-width:100%;margin:0}
  .sheet.rbattle-wide .rb-subbar{grid-area:sub;border-bottom:1px dashed rgba(201,169,97,.25)}
  .sheet.rbattle-wide .rb-bf .rb-log{grid-area:log;border-top:none;max-height:none;min-height:64px}
  .sheet.rbattle-wide .rb-bf .rb-skills{grid-area:skills;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));padding:6px 8px}
  .sheet.rbattle-wide .rb-bf .rb-actions{grid-area:actions;padding:4px 8px 8px}
}

/* —— 战场石框（暗色羊皮纸 + 金描边） —— */
.rb-bf{border:1px solid var(--gold);background:linear-gradient(180deg,#1a1510,#100d09);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.6),inset 0 2px 0 rgba(227,201,135,.14),0 10px 34px rgba(0,0,0,.5)}

/* —— 顶部回合横幅 —— */
.rb-turn{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;
  background:linear-gradient(180deg,rgba(201,169,97,.14),rgba(201,169,97,.03));
  border-bottom:1px solid rgba(201,169,97,.4)}
.rb-turn-no{font:900 14px/1 "Noto Serif SC";color:var(--gold2);letter-spacing:2px;text-shadow:0 1px 3px #000}
.rb-intent{font:700 11px/1 "Noto Serif SC";color:var(--weak);padding:3px 8px;border:1px solid var(--line);background:rgba(0,0,0,.3)}
.rb-intent.heavy{color:#ff9a4d;border-color:rgba(232,132,62,.7);background:rgba(232,132,62,.14);
  animation:rbIntentPulse 1s ease-in-out infinite}
@keyframes rbIntentPulse{0%,100%{box-shadow:0 0 0 rgba(232,132,62,0)}50%{box-shadow:0 0 10px rgba(232,132,62,.55)}}
.rb-buffs{display:flex;flex-wrap:wrap;gap:4px;margin-left:auto}
.rb-buff{font:700 10px/1 "Noto Serif SC";padding:3px 6px;border:1px solid var(--line);color:var(--paper);background:rgba(0,0,0,.3)}
.rb-buff.charge{color:var(--gold2);border-color:rgba(201,169,97,.7)}
.rb-buff.atk{color:#ff9a4d;border-color:rgba(255,154,77,.5)}
.rb-buff.def{color:#a9cfe6;border-color:rgba(108,158,196,.5)}
.rb-buff.crit{color:#ff8b8f;border-color:rgba(255,90,95,.5)}
.rb-buff.debuff{color:#d98a7c;border-color:rgba(178,58,44,.5)}
.rb-buff.stun{color:#c9b3f5;border-color:rgba(167,139,250,.5)}

/* —— 战场舞台：920×560 等比缩放，窄屏不挤；矮视口按剩余高度收窄宽度，保证整屏不裁头 —— */
.rb-bf-stage{position:relative;margin:0 auto;
  width:min(100%, max(320px, calc((100vh - 435px) * 1.6429)));
  aspect-ratio:920/560;overflow:hidden;
  background:radial-gradient(ellipse at 50% 30%,#2a251c 0%,#191510 62%,#0d0b08 100%);
  border-bottom:1px solid rgba(201,169,97,.4)}
.rb-hexfield{position:absolute;inset:0;width:100%;height:100%}
.hx{stroke:rgba(14,11,7,.9);stroke-width:1.8}
/* v3：地形底色由 SVG 渐变 stop 接管（见下方 s-*-hi/lo），此处不再设 fill */
.hx.t-road.t-bridge{filter:brightness(1.14)}
.hx-rut{fill:#51452f;opacity:.85}
.hx-plank{fill:none;stroke:#3f3423;stroke-width:3}
.hx-face{fill:#5c554e;stroke:rgba(14,11,7,.9);stroke-width:1.4}
.hx-peak{fill:#cfc6b4;opacity:.92}
.hx-tree{fill:#1e301c;stroke:#14240f;stroke-width:.8}
.hx-wave{fill:none;stroke:#8fc3e4;stroke-width:2.4;opacity:.8}

/* —— 单位：立绘 + 阵营环 + 铭牌 —— */
.rb-unit{position:absolute;width:15%;max-width:120px;transform:translate(-50%,-86%);z-index:6;pointer-events:none}
.rb-unit-pla{left:29.6%;top:60.5%;--flinchdir:-1;--dodgedir:-1}
.rb-unit-mon{left:72.6%;top:60.5%;--flinchdir:1;--dodgedir:1}
.rb-unit-mon.is-boss{width:19%;max-width:150px}
.rb-fig{display:block;width:100%;height:auto}
/* 敌方朝向由 rbBeastSvg 内部 u-mir 决定（v12）；不再对整只 SVG 做 CSS 翻转，
   否则镜像会连同阴影/轮廓光一起翻，光源方向与场景不一致 */
.fig-cloak{/* v3：fill 由 SVG url(#plaCloak) 渐变接管 */}
.fig-skin{fill:#e8cfa8}
.fig-hood{fill:#7a5c28}
.fig-staff{fill:none;stroke:#6e5a34;stroke-width:2.6;stroke-linecap:round}
.fig-orb{/* fill=url(#plaOrb) */filter:drop-shadow(0 0 3px rgba(255,210,63,.8))}
.fig-body{/* v3：fill 由 url(#monBody) 渐变接管 */}
.fig-head{fill:#6e3a2c}
.fig-horn{/* v3：fill 由 url(#monHorn) 渐变接管 */}
.fig-eye{fill:#ffd23f}
.fig-leg{fill:#3d1e16}
.fig-crown{fill:#e3c987}
.rb-ring{position:absolute;left:50%;bottom:-4px;width:74%;height:12px;transform:translateX(-50%);
  border-radius:50%;border:2px solid rgba(201,169,97,.75);
  background:radial-gradient(ellipse,rgba(201,169,97,.22),transparent 70%)}
.rb-unit-mon .rb-ring{border-color:rgba(232,90,60,.8);
  background:radial-gradient(ellipse,rgba(184,65,47,.28),transparent 70%)}
/* 铭牌：名 + 等级 + 五行 + 血条(白条滞后) + 经验条 + 体力条 */
.rb-plate{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);width:128px;
  padding:5px 7px 6px;background:rgba(14,11,8,.88);border:1px solid rgba(201,169,97,.6);
  box-shadow:0 3px 10px rgba(0,0,0,.5),inset 0 1px 0 rgba(227,201,135,.12)}
.rb-pl-row{display:flex;align-items:center;gap:4px;margin-bottom:4px}
.rb-pl-name{font:700 11px/1 "Noto Serif SC";color:var(--paper);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:70px}
.rb-pl-lv{font:700 9px/1 "JetBrains Mono";color:var(--gold2)}
.rb-elem{font:700 9px/1 "Noto Serif SC";color:#9fc8ff;border:1px solid rgba(127,176,255,.4);padding:1px 3px;white-space:nowrap}
.rb-bar{position:relative;height:9px;background:rgba(0,0,0,.7);border:1px solid rgba(201,169,97,.35);overflow:hidden}
.rb-bar + .rb-bar{margin-top:3px}
.rb-bar i{position:absolute;left:0;top:0;bottom:0;display:block}
.rb-ghost{background:rgba(255,240,220,.85);transition:width .55s ease .38s} /* 白条：延迟慢回落 */
.rb-fill{background:linear-gradient(90deg,#8a2f1f,#e8553e);transition:width .16s ease-out}
.rb-unit-pla .rb-bar-hp .rb-fill{background:linear-gradient(90deg,#1f6b5a,#2fd08a)}
.rb-bar-num{position:absolute;right:2px;top:0;font:700 8px/9px "JetBrains Mono";color:#fff;text-shadow:0 1px 2px #000;z-index:2}
.rb-bar-xp{height:5px}
.rb-fill-xp{background:linear-gradient(90deg,#6a5f9a,#a78bfa);transition:width .4s ease-out}
.rb-bar-st{height:7px}
.rb-fill-st{background:linear-gradient(90deg,#8a6a1f,#ffd23f);transition:width .3s ease-out}
.rb-st-num{line-height:7px}

/* —— 演出：突进 / 受击 / 闪避 / 格挡 / 重击震屏 / 消散 —— */
.rb-unit.fx-lunge{animation:rbLungeP .52s cubic-bezier(.3,.7,.3,1)}
@keyframes rbLungeP{0%,100%{transform:translate(-50%,-86%)}30%{transform:translate(calc(-50% + 108px),-86%)}}
.rb-unit.fx-lunge-mon{animation:rbLungeM .52s cubic-bezier(.3,.7,.3,1);animation-delay:.32s}
@keyframes rbLungeM{0%,100%{transform:translate(-50%,-86%)}30%{transform:translate(calc(-50% - 108px),-86%)}}
.rb-unit.fx-flinch{animation:rbFlinch .6s ease-out}
@keyframes rbFlinch{0%,100%{transform:translate(-50%,-86%)}
  18%{transform:translate(calc(-50% - var(--flinchdir,1) * 12px),-86%)}
  42%{transform:translate(calc(-50% + var(--flinchdir,1) * 8px),-86%)}
  68%{transform:translate(calc(-50% - var(--flinchdir,1) * 5px),-86%)}}
.rb-unit-pla.fx-flinch{animation-delay:.32s} /* 敌方后手 */
.rb-unit.fx-flinch.crit .rb-fig{filter:drop-shadow(0 0 9px rgba(255,90,95,.95))}
.rb-unit.fx-flinch.heavy{animation-name:rbFlinchHeavy}
.rb-unit.fx-flinch.heavy .rb-fig{filter:drop-shadow(0 0 11px rgba(255,140,66,.95))}
@keyframes rbFlinchHeavy{0%,100%{transform:translate(-50%,-86%)}
  16%{transform:translate(calc(-50% - var(--flinchdir,1) * 20px),-86%)}
  38%{transform:translate(calc(-50% + var(--flinchdir,1) * 13px),-86%)}
  62%{transform:translate(calc(-50% - var(--flinchdir,1) * 9px),-86%)}
  82%{transform:translate(calc(-50% + var(--flinchdir,1) * 4px),-86%)}}
.rb-unit.fx-dodge{animation:rbDodgeU .62s ease-out}
.rb-unit-pla.fx-dodge{animation-delay:.32s}
@keyframes rbDodgeU{0%,100%{transform:translate(-50%,-86%);opacity:1}
  28%{transform:translate(calc(-50% + var(--dodgedir,1) * 26px),-86%);opacity:.5}
  64%{transform:translate(calc(-50% + var(--dodgedir,1) * 13px),-86%);opacity:.85}}
.rb-unit.fx-guard{animation:rbGuardU .72s ease-out}
.rb-unit.fx-guard .rb-fig{filter:drop-shadow(0 0 10px rgba(108,158,196,.95))}
@keyframes rbGuardU{0%,100%{transform:translate(-50%,-86%) scale(1)}35%{transform:translate(-50%,-86%) scale(.94,.96)}}
.rb-bf-stage.fx-quake{animation:rbQuake .52s ease-out;animation-delay:.32s}
@keyframes rbQuake{0%,100%{transform:translate(0,0)}16%{transform:translate(-6px,3px)}34%{transform:translate(5px,-3px)}
  52%{transform:translate(-4px,2px)}70%{transform:translate(3px,-1px)}86%{transform:translate(-2px,1px)}}
.rb-unit.fx-dead{animation:rbDeadU .95s ease-in forwards}
@keyframes rbDeadU{0%{opacity:1;transform:translate(-50%,-86%) scale(1)}
  55%{opacity:.4;transform:translate(-50%,-86%) scale(.92)}
  100%{opacity:0;transform:translate(-50%,-108%) scale(.86);filter:blur(3px)}}
/* 敌方重击意图：立绘红光脉冲 */
.rb-unit-mon.fx-aura-heavy .rb-fig{animation:rbHeavyAura 1s ease-in-out infinite}
@keyframes rbHeavyAura{0%,100%{filter:drop-shadow(0 0 3px rgba(255,110,60,.35))}
  50%{filter:drop-shadow(0 0 13px rgba(255,110,60,.9))}}

/* —— FX 层：挥击轨迹 / 命中火花 / 格挡盾环 —— */
.rb-fx-layer{position:absolute;inset:0;pointer-events:none;z-index:8}
.rb-fx-layer i{position:absolute;display:block;transform:translate(-50%,-50%)}
.rb-fx-layer .at-mon{left:72.6%;top:52%}
/* both：delay 窗口期套用 0% 帧（opacity 0），结束后保持 100% 帧，否则后手特效会先在锚点裸显一条静止横线 */
.rb-fx-layer .at-pla{left:29.6%;top:52%;animation-delay:.34s;animation-fill-mode:both}
/* v5：我方先手自身增益特效锚点（防御/辅助/蓄力/逃脱），不吃敌方后手 delay */
.rb-fx-layer .at-pla0{left:29.6%;top:52%}
.rb-trail{width:96px;height:8px;border-radius:4px;transform-origin:left center;
  background:linear-gradient(90deg,transparent,var(--trl1,rgba(255,236,180,.95)),var(--trl2,rgba(255,255,255,.9)));
  box-shadow:0 0 12px var(--trlsh,rgba(255,214,120,.65));
  animation:rbTrail .42s ease-out forwards}
.rb-trail.at-pla{animation-name:rbTrailL}
/* 暴击拖尾：更长（0.62s）、更亮，与双环/长星芒同档 */
.rb-trail.crit{animation-duration:.62s;filter:brightness(1.28) saturate(1.12)}
@keyframes rbTrail{0%{opacity:0;transform:translate(-50%,-50%) rotate(-52deg) scaleX(.2)}35%{opacity:1}
  100%{opacity:0;transform:translate(-50%,-50%) rotate(28deg) scaleX(1.05)}}
@keyframes rbTrailL{0%{opacity:0;transform:translate(-50%,-50%) rotate(52deg) scaleX(.2)}35%{opacity:1}
  100%{opacity:0;transform:translate(-50%,-50%) rotate(-28deg) scaleX(1.05)}}
.rb-spark{width:14px;height:14px;border-radius:50%;
  background:radial-gradient(circle,var(--spk1,#fff) 0%,var(--spk2,#ffd76e) 45%,var(--spk3,rgba(255,150,60,0)) 72%);
  animation:rbSpark .5s ease-out forwards}
.rb-spark::before,.rb-spark::after{content:'';position:absolute;left:50%;top:50%;width:64px;height:3px;margin:-1.5px 0 0 -32px;
  background:linear-gradient(90deg,transparent,rgba(255,230,160,.9),transparent)}
.rb-spark::after{transform:rotate(90deg)}
@keyframes rbSpark{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}
  25%{opacity:1;transform:translate(-50%,-50%) scale(1.25)}
  100%{opacity:0;transform:translate(-50%,-50%) scale(1.6)}}
.rb-spark.crit{width:20px;height:20px;--spk2:#ff9a5f;--spk3:rgba(255,60,40,0)}
.rb-spark.elem{--spk2:#8fd6a0;--spk3:rgba(64,180,90,0)}
.rb-spark.heavy{width:24px;height:24px;--spk2:#ff8c42;--spk3:rgba(200,60,20,0)}
.rb-ring-fx{width:20px;height:20px;border-radius:50%;border:3px solid rgba(140,190,235,.9);
  box-shadow:0 0 14px rgba(108,158,196,.7),inset 0 0 8px rgba(108,158,196,.5);
  animation:rbRingFx .72s ease-out forwards}
@keyframes rbRingFx{0%{opacity:0;transform:translate(-50%,-50%) scale(.4)}30%{opacity:1}
  100%{opacity:0;transform:translate(-50%,-50%) scale(2.6)}}

/* —— 飘字 v2（投在单位躯干上，分型分色分字号） —— */
.rb-unit .rb-dmg-float{position:absolute;top:2%;left:50%;z-index:9;font:900 17px/1 "JetBrains Mono";
  color:#ffd23f;text-shadow:0 0 5px #000,0 2px 4px rgba(0,0,0,.7);white-space:nowrap;
  animation:rbFloatUp2 1.15s ease-out forwards;pointer-events:none}
@keyframes rbFloatUp2{0%{opacity:0;transform:translate(-50%,6px) scale(.6)}
  18%{opacity:1;transform:translate(-50%,-6px) scale(1.15)}
  100%{opacity:0;transform:translate(-50%,-44px) scale(1)}}
.rb-unit .rb-dmg-float.crit{font-size:24px;color:#ff6a5f}
.rb-unit .rb-dmg-float.elem{font-size:20px;color:#8fd694}
.rb-unit .rb-dmg-float.heavy{font-size:22px;color:#ff9a4d}
.rb-unit .rb-dmg-float.block{font-size:15px;color:#a9cfe6}
.rb-unit .rb-dmg-float.miss{font-size:14px;color:#cfc8ba}
.rb-unit-pla .rb-dmg-float{animation-delay:.32s}

/* —— 副栏：五行提示 + 上回合结算 —— */
.rb-subbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 10px;
  border-bottom:1px solid rgba(201,169,97,.25);background:rgba(0,0,0,.25)}
.rb-elem-bar{display:flex;align-items:center;gap:8px;font-size:11px}
.rb-elem-bar .rb-elem{font-size:10px;padding:2px 5px}
.rb-elem-tip{color:var(--weak)}
.rb-elem-tip b{color:#8fd694}
.rb-subbar .rb-cue{margin:0}

/* —— 战报 / 技能底栏 / 行动 —— */
.rb-bf .rb-log{border:none;border-top:1px dashed rgba(201,169,97,.25);background:rgba(0,0,0,.35);margin:0;max-height:110px}
.rb-bf .rb-skills{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));padding:10px;margin:0;gap:8px;
  background:linear-gradient(180deg,rgba(201,169,97,.06),rgba(0,0,0,.3));border-top:1px solid rgba(201,169,97,.25)}
.rb-bf .rb-skill{background:linear-gradient(180deg,#241d14,#181209);border:1px solid rgba(201,169,97,.5);
  box-shadow:inset 0 1px 0 rgba(227,201,135,.12),0 2px 6px rgba(0,0,0,.4)}
.rb-bf .rb-skill.rb-weak{opacity:.55}
.rb-bf .rb-actions{display:flex;gap:8px;justify-content:center;padding:0 10px 12px;background:rgba(0,0,0,.3)}
.rb-tactic{padding:8px 16px;border:1px solid rgba(201,169,97,.55);background:linear-gradient(180deg,#241d14,#181209);
  color:var(--gold2);font:700 12px/1 "Noto Serif SC";letter-spacing:1px;cursor:pointer}
.rb-tactic:hover:not(:disabled){background:rgba(201,169,97,.18)}
.rb-tactic:disabled,.rb-tactic.rb-disabled{opacity:.45;cursor:not-allowed}

/* —— 结算石碑 —— */
.rb-result{padding:26px 16px;display:flex;justify-content:center}
.rb-stele{min-width:260px;max-width:420px;padding:22px 26px;text-align:center;position:relative;
  background:linear-gradient(180deg,#262019,#171208 70%,#100c07);
  border:2px solid rgba(201,169,97,.7);
  box-shadow:0 0 0 1px rgba(0,0,0,.8),0 14px 40px rgba(0,0,0,.6),inset 0 1px 0 rgba(227,201,135,.15);
  animation:rbSteleIn .5s cubic-bezier(.2,.9,.3,1.2) both}
.rb-stele::before{content:'';position:absolute;inset:5px;border:1px solid rgba(201,169,97,.35);pointer-events:none}
@keyframes rbSteleIn{0%{opacity:0;transform:translateY(18px) scale(.92)}100%{opacity:1;transform:none}}
.rb-stele-emblem{font-size:34px;line-height:1;margin-bottom:10px;filter:drop-shadow(0 0 8px rgba(201,169,97,.5))}
.rb-lose .rb-stele-emblem{filter:drop-shadow(0 0 10px rgba(255,80,70,.6))}
.rb-stele .rb-rewards{margin:12px 0}

/* —— lite 降级：关闭全部演出，只留静态战场与即时血条 —— */
body[data-pw-scene-fx="lite"] .rb-trail,
body[data-pw-scene-fx="lite"] .rb-spark,
body[data-pw-scene-fx="lite"] .rb-ring-fx{display:none!important}
body[data-pw-scene-fx="lite"] .rb-unit,
body[data-pw-scene-fx="lite"] .rb-bf-stage,
body[data-pw-scene-fx="lite"] .rb-intent.heavy,
body[data-pw-scene-fx="lite"] .rb-stele,
body[data-pw-scene-fx="lite"] .rb-unit .rb-dmg-float{animation:none!important}
body[data-pw-scene-fx="lite"] .rb-ghost,
body[data-pw-scene-fx="lite"] .rb-fill,
body[data-pw-scene-fx="lite"] .rb-fill-xp,
body[data-pw-scene-fx="lite"] .rb-fill-st{transition:none!important}
/* v7：lite 降级覆盖 toast 与升级横幅动效 */
body[data-pw-scene-fx="lite"] #toast.show,
body[data-pw-scene-fx="lite"] #toast.show::after,
body[data-pw-scene-fx="lite"] .enc-level-up{animation:none!important}
/* v8：lite 降级覆盖路径流动/雷达脉冲/印章环 */
body[data-pw-scene-fx="lite"] .pw-route-flow,
body[data-pw-scene-fx="lite"] .pw-me-i::before,
body[data-pw-scene-fx="lite"] .pw-me-i::after,
body[data-pw-scene-fx="lite"] .pw-node-dot::after{animation:none!important}
/* v9：lite 降级覆盖附身新增动效 */
body[data-pw-scene-fx="lite"] .pf-target-track .pt-runner,
body[data-pw-scene-fx="lite"] .poss-ev-icon{animation:none!important}
@media (prefers-reduced-motion:reduce){
  .rb-unit,.rb-bf-stage,.rb-intent.heavy,.rb-stele,.rb-trail,.rb-spark,.rb-ring-fx,
  .rb-unit .rb-dmg-float{animation:none!important}
  .rb-ghost,.rb-fill,.rb-fill-xp,.rb-fill-st{transition:none!important}
  #toast.show,#toast.show::after,.enc-level-up{animation:none!important}
  .pw-route-flow,.pw-me-i::before,.pw-me-i::after,.pw-node-dot::after{animation:none!important}
  .pf-target-track .pt-runner,.poss-ev-icon{animation:none!important}
}

/* —— 白天模式：羊皮纸浅底战场，对比度保持 —— */
html.pw-light .rb-bf,body.pw-light .rb-bf{background:linear-gradient(180deg,#efe7d6,#e2d8c2);
  box-shadow:inset 0 0 0 1px rgba(120,90,40,.25),inset 0 2px 0 rgba(255,255,255,.5),0 10px 30px rgba(90,70,40,.25)}
html.pw-light .rb-bf-stage,body.pw-light .rb-bf-stage{
  background:radial-gradient(ellipse at 50% 30%,#e8dfc8 0%,#d8cdb2 62%,#c4b795 100%)}
html.pw-light .hx,body.pw-light .hx{stroke:rgba(70,55,30,.6)}
/* v3：浅色地形同样走渐变 stop，见 v3 段 */
html.pw-light .hx.t-road.t-bridge,body.pw-light .hx.t-road.t-bridge{filter:brightness(.96)}
html.pw-light .hx-rut,body.pw-light .hx-rut{fill:#8f7a52}
html.pw-light .hx-plank,body.pw-light .hx-plank{stroke:#6b5836}
html.pw-light .hx-face,body.pw-light .hx-face{fill:#b3aba0;stroke:rgba(70,55,30,.55)}
html.pw-light .hx-peak,body.pw-light .hx-peak{fill:#f2ede0}
html.pw-light .hx-tree,body.pw-light .hx-tree{fill:#4a6b3c;stroke:#3a5730}
html.pw-light .hx-wave,body.pw-light .hx-wave{stroke:#e6f4ff}
html.pw-light .rb-plate,body.pw-light .rb-plate{background:rgba(255,252,244,.93);border-color:rgba(154,119,47,.7)}
html.pw-light .rb-bar,body.pw-light .rb-bar{background:rgba(90,70,40,.25)}
html.pw-light .rb-bar-num,body.pw-light .rb-bar-num{text-shadow:0 1px 2px rgba(0,0,0,.55)}
html.pw-light .rb-intent,body.pw-light .rb-intent{background:rgba(255,253,248,.6)}
html.pw-light .rb-buff,body.pw-light .rb-buff{background:rgba(255,253,248,.6)}
html.pw-light .rb-subbar,body.pw-light .rb-subbar{background:rgba(154,119,47,.08)}
html.pw-light .rb-bf .rb-log,body.pw-light .rb-bf .rb-log{background:rgba(154,119,47,.06)}
html.pw-light .rb-bf .rb-skill,body.pw-light .rb-bf .rb-skill{background:linear-gradient(180deg,#fffdf6,#f0e8d4);
  border-color:rgba(154,119,47,.6)}
html.pw-light .rb-tactic,body.pw-light .rb-tactic{background:linear-gradient(180deg,#fffdf6,#f0e8d4);
  border-color:rgba(154,119,47,.6)}
html.pw-light .rb-stele,body.pw-light .rb-stele{background:linear-gradient(180deg,#f6efdd,#e9dfc5 70%,#ddd0b4);
  border-color:rgba(154,119,47,.85);box-shadow:0 0 0 1px rgba(255,255,255,.6),0 14px 36px rgba(90,70,40,.35)}
html.pw-light .rb-stele::before,body.pw-light .rb-stele::before{border-color:rgba(154,119,47,.45)}

/* —— 移动端 390：六边形等比缩放，铭牌/立绘收窄 —— */
@media (max-width:767.98px){
  .sheet.rbattle-wide .rbattle-body{padding:8px}
  .rb-turn-no{font-size:12px}
  .rb-plate{width:104px;padding:4px 5px}
  .rb-pl-name{font-size:10px;max-width:56px}
  .rb-unit{width:17%}
  .rb-unit-mon.is-boss{width:21%}
  .rb-trail{width:64px}
  .rb-bf .rb-log{max-height:88px}
  .rb-bf .rb-skills{grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;padding:8px}
  .rb-unit .rb-dmg-float.crit{font-size:20px}
  .rb-unit .rb-dmg-float.heavy{font-size:19px}
}

/* ============================================================
 * v3 r1 画面精细度（2026-11-02）：渐变地形/纹理细节/伪2.5D/构图层次/移动聚焦
 * ============================================================ */
/* —— 地形渐变 stop（暗色羊皮纸调色板，顶光上亮下暗） —— */
.s-plain-hi{stop-color:#5c5438}.s-plain-lo{stop-color:#3d3725}
.s-road-hi{stop-color:#7d6a49}.s-road-lo{stop-color:#57482e}
.s-mtn-hi{stop-color:#4e4845}.s-mtn-lo{stop-color:#322d2b}
.s-forest-hi{stop-color:#3d5736}.s-forest-lo{stop-color:#25381e}
.s-river-hi{stop-color:#3a6079}.s-river-lo{stop-color:#203847}
.s-shade-hi{stop-color:#fff;stop-opacity:.10}
.s-shade-md{stop-color:#fff;stop-opacity:0}
.s-shade-lo{stop-color:#000;stop-opacity:.26}

/* —— 地形纹理细节层 —— */
.hx-shade{stroke:none;pointer-events:none}
.hx-drop{fill:rgba(10,7,4,.42);stroke:none}                      /* 山地台阶暗面投影 */
.hx-strata{fill:none;stroke:rgba(20,16,12,.55);stroke-width:1.6} /* 岩层折线 */
.hx-rock{fill:rgba(22,18,14,.6)}                                 /* 碎石 */
.hx-snow{fill:#f4efe2;opacity:.95}                               /* 峰顶雪光 */
.hx-bed{fill:none;stroke:rgba(10,20,28,.65);stroke-width:2.6}    /* 河床下陷内缘 */
.hx-foam{fill:rgba(220,240,252,.75)}                             /* 岸边泡沫 */
.hx-nail{fill:rgba(30,24,16,.7)}                                 /* 桥板钉 */
.hx-crack{fill:none;stroke:rgba(38,30,20,.65);stroke-width:1.4}  /* 沥青裂纹 */
.hx-canopy{fill:#24401f;stroke:#17290f;stroke-width:.8}          /* 树冠团块 */
.hx-canopy-hi{fill:#4f7a3e;opacity:.9}                           /* 树冠受光面 */
.hx-grass{fill:none;stroke:#6d7a3f;stroke-width:1.5;opacity:.9}  /* 草簇 */
.hx-contour{fill:none;stroke:rgba(255,246,220,.12);stroke-width:1.2} /* 等高线 */
.hx-noise{opacity:.16;mix-blend-mode:overlay;pointer-events:none}      /* 纸纹噪点 */

/* —— 构图：战区走廊高亮 + 来袭路线指向 + 边缘渐隐 —— */
.hx-hot{stroke:rgba(224,187,101,.85);stroke-width:2.2;filter:brightness(1.13)}
.hx-threat{fill:none;stroke:rgba(232,110,72,.55);stroke-width:2.4;stroke-dasharray:5 5}
.hx-threat.t2{opacity:.55}
.rb-bf-stage::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:7;
  box-shadow:inset 0 0 46px 12px rgba(8,6,4,.55),inset 0 0 8px rgba(8,6,4,.6)}

/* —— 缩放容器：桌面恒等；390 聚焦两单位之间（纵向裁切而非等比缩没）；--zk 供镜头推动画复用 —— */
.rb-zoom{position:absolute;inset:0;transform-origin:51% 60%;--zk:1;transform:scale(var(--zk))}

/* —— lite 降级：噪点层关闭 —— */
body[data-pw-scene-fx="lite"] .hx-noise{display:none!important}

/* —— pw-light 浅色渐变 stop 与细节覆盖 —— */
html.pw-light .s-plain-hi,body.pw-light .s-plain-hi{stop-color:#d6caa6}
html.pw-light .s-plain-lo,body.pw-light .s-plain-lo{stop-color:#b2a57d}
html.pw-light .s-road-hi,body.pw-light .s-road-hi{stop-color:#c0a878}
html.pw-light .s-road-lo,body.pw-light .s-road-lo{stop-color:#9c8658}
html.pw-light .s-mtn-hi,body.pw-light .s-mtn-hi{stop-color:#a8a19a}
html.pw-light .s-mtn-lo,body.pw-light .s-mtn-lo{stop-color:#7f7871}
html.pw-light .s-forest-hi,body.pw-light .s-forest-hi{stop-color:#8ba878}
html.pw-light .s-forest-lo,body.pw-light .s-forest-lo{stop-color:#628252}
html.pw-light .s-river-hi,body.pw-light .s-river-hi{stop-color:#8fb6d0}
html.pw-light .s-river-lo,body.pw-light .s-river-lo{stop-color:#5f89a6}
html.pw-light .s-shade-hi,body.pw-light .s-shade-hi{stop-opacity:.16}
html.pw-light .s-shade-lo,body.pw-light .s-shade-lo{stop-opacity:.14}
html.pw-light .hx-drop,body.pw-light .hx-drop{fill:rgba(90,70,40,.28)}
html.pw-light .hx-strata,body.pw-light .hx-strata{stroke:rgba(70,58,40,.5)}
html.pw-light .hx-rock,body.pw-light .hx-rock{fill:rgba(80,66,44,.5)}
html.pw-light .hx-snow,body.pw-light .hx-snow{fill:#fffef8}
html.pw-light .hx-bed,body.pw-light .hx-bed{stroke:rgba(52,86,110,.5)}
html.pw-light .hx-foam,body.pw-light .hx-foam{fill:rgba(255,255,255,.85)}
html.pw-light .hx-crack,body.pw-light .hx-crack{stroke:rgba(96,80,52,.5)}
html.pw-light .hx-canopy,body.pw-light .hx-canopy{fill:#557c44;stroke:#405e33}
html.pw-light .hx-canopy-hi,body.pw-light .hx-canopy-hi{fill:#8fb56e}
html.pw-light .hx-grass,body.pw-light .hx-grass{stroke:#8a9455}
html.pw-light .hx-contour,body.pw-light .hx-contour{stroke:rgba(90,70,40,.16)}
html.pw-light .hx-noise,body.pw-light .hx-noise{opacity:.1}
html.pw-light .hx-hot,body.pw-light .hx-hot{stroke:rgba(154,119,47,.9)}
html.pw-light .hx-threat,body.pw-light .hx-threat{stroke:rgba(190,70,40,.6)}
html.pw-light .rb-bf-stage::after,body.pw-light .rb-bf-stage::after{
  box-shadow:inset 0 0 46px 12px rgba(120,95,55,.3),inset 0 0 8px rgba(120,95,55,.3)}

/* —— 390 聚焦构图：放大两单位战区，铭牌反向缩放保持字号 —— */
@media (max-width:767.98px){
  .rb-zoom{--zk:1.46}
  .rb-plate{top:calc(100% + 10px);bottom:auto;transform:translateX(-50%) scale(.68);
    transform-origin:top center}
}

/* ============================================================
 * v3 r2：立绘体积化 / 环境氛围(晴·雾) / 演出节奏(hit-stop·镜头·震屏分级)
 * ============================================================ */
/* —— 立绘渐变 stop（暗色羊皮纸调色板，光源左上） —— */
.s-cloak-hi{stop-color:#e0b869}.s-cloak-lo{stop-color:#7c5c26}
.s-staff-hi{stop-color:#e8e0d0}.s-staff-lo{stop-color:#6e5c3e}
.s-orb-core{stop-color:#fffbe8}.s-orb-mid{stop-color:#ffd970}.s-orb-out{stop-color:#ffd970;stop-opacity:0}
.s-mbody-hi{stop-color:#a84f3a}.s-mbody-lo{stop-color:#4a1e12}
.s-horn-hi{stop-color:#efe6d2}.s-horn-lo{stop-color:#9c8a6a}

/* —— 立绘细节层 —— */
.fig-cloak-back{fill:#5e441a}
.fig-fold-d{fill:none;stroke:rgba(60,38,10,.55);stroke-width:1.4}
.fig-fold-l{fill:none;stroke:rgba(255,235,180,.42);stroke-width:1.2}
.fig-face{fill:#241608}
.fig-pla .fig-eye{fill:#ffd870}
.fig-rim{fill:none;stroke:rgba(255,220,140,.7);stroke-width:1.4}
.fig-orb-halo{fill:rgba(255,215,120,.22)}
.fig-belly{fill:rgba(40,12,6,.5)}
.fig-mane{fill:#4a1c10}
.fig-mrim{fill:none;stroke:rgba(255,150,110,.45);stroke-width:1.3}
.fig-eye-halo{fill:rgba(255,210,94,.28)}
.fig-cape{fill:#4a1c10}
.fig-pauldron{fill:#6e6258;stroke:#3a332c;stroke-width:.6}
.fig-spike{fill:#c9bda8}
.fig-gem{fill:#d42a2a}

/* —— 动作层级：躯干呼吸 + 武器重心微摆（整体平移仍由 fx-lunge 承担） —— */
.rb-breath{transform-origin:50% 100%;transform-box:fill-box;animation:rbBreath 4.6s ease-in-out infinite}
.fig-mon .rb-breath{animation-duration:5.3s}
@keyframes rbBreath{50%{transform:scaleY(1.024) scaleX(.996)}}
.rb-weapon{transform-origin:49px 57px;transform-box:view-box;animation:rbWeaponSway 5.6s ease-in-out infinite}
@keyframes rbWeaponSway{50%{transform:rotate(-2.4deg) translateY(-.6px)}}

/* —— 环境氛围：云影(俯视视差) + 斜射光柱 + 尘雾粒子 + 雾天变体 —— */
.rb-cloudshade{position:absolute;width:44%;height:34%;border-radius:50%;pointer-events:none;z-index:2;
  background:radial-gradient(ellipse,rgba(10,8,5,.34),transparent 70%)}
.rb-cloudshade.c1{top:6%;left:-8%;animation:rbCloud 38s linear infinite}
.rb-cloudshade.c2{top:52%;left:38%;width:52%;height:40%;opacity:.7;animation:rbCloud 55s linear infinite reverse}
@keyframes rbCloud{0%{transform:translateX(0)}100%{transform:translateX(130%)}}
.rb-godray{position:absolute;top:-6%;bottom:-6%;width:9%;pointer-events:none;z-index:2;
  background:linear-gradient(180deg,rgba(255,238,190,.34),rgba(255,238,190,.03) 80%);
  transform:skewX(-18deg);mix-blend-mode:screen;animation:rbRay 9s ease-in-out infinite}
.rb-godray.g1{left:20%}
.rb-godray.g2{left:56%;width:13%;animation-delay:-4.5s;opacity:.75}
@keyframes rbRay{50%{opacity:.5}}
.rb-mote{position:absolute;width:4px;height:4px;border-radius:50%;pointer-events:none;z-index:8;
  background:rgba(238,226,196,.5);filter:blur(.4px);animation:rbMote 16s linear infinite}
.rb-mote.m1{left:14%;top:70%;animation-duration:14s}
.rb-mote.m2{left:30%;left:30%;top:40%;animation-duration:19s;animation-delay:-6s}
.rb-mote.m3{left:48%;top:64%;animation-duration:16s;animation-delay:-3s;width:3px;height:3px}
.rb-mote.m4{left:62%;top:36%;animation-duration:21s;animation-delay:-11s}
.rb-mote.m5{left:74%;top:58%;animation-duration:15s;animation-delay:-8s;width:3px;height:3px}
.rb-mote.m6{left:86%;top:44%;animation-duration:23s;animation-delay:-14s}
@keyframes rbMote{0%{transform:translate(0,0);opacity:0}12%{opacity:.8}
  50%{transform:translate(26px,-34px)}88%{opacity:.6}100%{transform:translate(52px,-64px);opacity:0}}
/* 雾天：雾层飘过 + 光柱熄灭 + 战场降饱和（同一调色板，不换色） */
.rb-fogbank{display:none;position:absolute;width:70%;height:26%;border-radius:50%;pointer-events:none;z-index:8;
  background:radial-gradient(ellipse,rgba(216,222,228,.55),transparent 70%);filter:blur(5px)}
.rb-bf[data-weather="fog"] .rb-fogbank{display:block}
.rb-fogbank.f1{top:10%;left:-20%;animation:rbFog 26s linear infinite}
.rb-fogbank.f2{top:50%;left:30%;height:32%;animation:rbFog 34s linear infinite reverse;opacity:.9}
@keyframes rbFog{0%{transform:translateX(0)}100%{transform:translateX(90%)}}
.rb-bf[data-weather="fog"] .rb-godray{display:none}
.rb-bf[data-weather="fog"] .rb-zoom{filter:saturate(.68) brightness(1.1)}
.rb-bf[data-weather="fog"] .rb-mote{opacity:.4}

/* —— 演出节奏：命中白闪 + 镜头轻推(复用 --zk) + 震屏三档 + hit-stop 顿挫 —— */
.rb-flash{position:absolute;inset:0;background:#fff6e0;opacity:0;pointer-events:none;z-index:9}
.rb-bf-stage.fx-flash-on .rb-flash{animation:rbFlash .22s ease-out}
@keyframes rbFlash{12%{opacity:.14}100%{opacity:0}}
.rb-zoom.fx-push{animation:rbPush .46s cubic-bezier(.3,.7,.3,1)}
@keyframes rbPush{40%{transform:scale(calc(var(--zk) * 1.025))}}
.rb-zoom.fx-push-heavy{animation:rbPushHeavy .64s cubic-bezier(.3,.7,.3,1)}
@keyframes rbPushHeavy{35%{transform:scale(calc(var(--zk) * 1.05))}}
.rb-bf-stage.fx-quake-l{animation:rbQuakeL .34s ease-out}
@keyframes rbQuakeL{20%{transform:translate(-2px,1px)}45%{transform:translate(2px,-1px)}70%{transform:translate(-1px,1px)}}
.rb-bf-stage.fx-quake-c{animation:rbQuakeC .5s ease-out}
@keyframes rbQuakeC{15%{transform:translate(-4px,2px)}35%{transform:translate(4px,2px)}55%{transform:translate(-3px,-2px)}75%{transform:translate(2px,1px)}}
.rb-unit.fx-hitstop .rb-breath{animation:rbJolt .16s steps(2) 1}
@keyframes rbJolt{50%{transform:translateX(-2.5px) scaleY(.985)}}

/* ============================================================
 * v5 · 单位动作分层 + 每技能独立招式演出
 * 层级：.rb-fig 重心偏移(常驻第三层) > .rb-breath 呼吸/步伐/后仰 > .fig-head-g 头滞后 > .rb-weapon 武器
 * ============================================================ */
/* —— 重心偏移：与呼吸 4.6s 错相(5.7s/6.4s)，脚底为轴的 idle 微倾 —— */
.rb-fig{transform-origin:50% 100%;transform-box:fill-box;animation:rbSway 5.7s ease-in-out infinite}
.fig-mon{animation-duration:6.4s;animation-delay:-2.9s}
@keyframes rbSway{0%,100%{transform:translateX(0) rotate(0)}32%{transform:translateX(.8px) rotate(.55deg)}66%{transform:translateX(-.7px) rotate(-.45deg)}}
.rb-unit.fx-dead .rb-fig{animation:none}
.fig-head-g{transform-origin:50% 88%;transform-box:fill-box}
.fig-leg{transform-origin:50% 0;transform-box:fill-box}

/* —— 步伐位移：突进不再整平移——躯体蓄步→跨步前倾→二步小提；武器按五行起手 —— */
.rb-unit.fx-lunge .rb-breath{animation:rbStepBody .56s cubic-bezier(.3,.7,.3,1)}
@keyframes rbStepBody{0%,100%{transform:none}
  14%{transform:translateY(1.6px) scaleY(.965)}
  32%{transform:translateY(-2.6px) rotate(3.6deg)}
  50%{transform:translateY(.6px) rotate(2.6deg)}
  66%{transform:translateY(-1.8px) rotate(1.6deg)}
  84%{transform:translateY(0) rotate(.4deg)}}
.rb-unit.fx-lunge-mon .rb-breath{animation:rbStepBodyM .56s cubic-bezier(.3,.7,.3,1) .32s}
@keyframes rbStepBodyM{0%,100%{transform:none}
  14%{transform:translateY(1.4px) scaleY(.94)}
  34%{transform:translateY(-2px) rotate(3.2deg) scaleY(1.02)}
  54%{transform:translateY(.5px) rotate(2.2deg)}
  70%{transform:translateY(-1.4px) rotate(1.2deg)}}
.rb-unit.fx-lunge-mon .fig-leg{animation:rbLegScurry .12s linear 4 .32s}
@keyframes rbLegScurry{50%{transform:skewX(7deg)}}

/* —— 攻击起手式（武器层·五行各一套）：金直刺 / 火高劈 / 水横扫 / 土沉砸 / 木抖弹 —— */
.rb-unit.cast-metal .rb-weapon{animation:rbCastThrust .56s cubic-bezier(.3,.7,.3,1)}
@keyframes rbCastThrust{0%,100%{transform:none}24%{transform:rotate(-4deg) translateX(-3px)}38%{transform:rotate(2deg) translateX(7px) scaleX(1.08)}58%{transform:rotate(0) translateX(2px)}}
.rb-unit.cast-fire .rb-weapon{animation:rbCastChop .56s cubic-bezier(.3,.7,.3,1)}
@keyframes rbCastChop{0%,100%{transform:none}22%{transform:rotate(-22deg) translateY(-4px)}40%{transform:rotate(14deg) translateY(2px)}62%{transform:rotate(3deg)}}
.rb-unit.cast-water .rb-weapon{animation:rbCastWave .56s cubic-bezier(.3,.7,.3,1)}
@keyframes rbCastWave{0%,100%{transform:none}26%{transform:rotate(-12deg)}44%{transform:rotate(9deg) translateX(4px)}68%{transform:rotate(-3deg)}}
.rb-unit.cast-earth .rb-weapon{animation:rbCastSlam .56s cubic-bezier(.4,.8,.4,1)}
@keyframes rbCastSlam{0%,100%{transform:none}26%{transform:rotate(-9deg) translateY(-5px)}42%{transform:rotate(7deg) translateY(3px) scaleY(.96)}64%{transform:rotate(0)}}
.rb-unit.cast-wood .rb-weapon{animation:rbCastFlick .56s ease-out}
@keyframes rbCastFlick{0%,100%{transform:none}30%{transform:rotate(-8deg)}42%{transform:rotate(6deg)}54%{transform:rotate(-4deg)}66%{transform:rotate(2deg)}}
.rb-unit.cast-none .rb-weapon{animation:rbCastFlick .56s ease-out}

/* —— 受击后仰三段分层：躯体(含骤停帧)→头滞后~136ms→武器甩动；敌方后手整体 +.32s —— */
.rb-unit.fx-flinch .rb-breath{animation:rbFlinchBody .56s ease-out}
@keyframes rbFlinchBody{0%,13%{transform:none}
  30%{transform:translateX(calc(var(--flinchdir,1) * -5.5px)) rotate(calc(var(--flinchdir,1) * -3.4deg))}
  56%{transform:translateX(calc(var(--flinchdir,1) * 2.2px)) rotate(calc(var(--flinchdir,1) * 1.5deg))}
  78%{transform:translateX(calc(var(--flinchdir,1) * -.7px)) rotate(calc(var(--flinchdir,1) * -.5deg))}
  100%{transform:none}}
.rb-unit.fx-flinch .fig-head-g{animation:rbFlinchHead .62s ease-out}
@keyframes rbFlinchHead{0%,22%{transform:none}
  44%{transform:rotate(calc(var(--flinchdir,1) * -7.5deg)) translateX(calc(var(--flinchdir,1) * -1.6px))}
  72%{transform:rotate(calc(var(--flinchdir,1) * 3deg))}
  100%{transform:none}}
.rb-unit.fx-flinch .rb-weapon{animation:rbFlinchWeap .62s ease-out}
@keyframes rbFlinchWeap{0%,18%{transform:none}42%{transform:rotate(9deg) translateY(-2.4px)}72%{transform:rotate(-3.6deg)}100%{transform:none}}
.rb-unit-pla.fx-flinch .rb-breath,.rb-unit-pla.fx-flinch .fig-head-g,.rb-unit-pla.fx-flinch .rb-weapon{animation-delay:.32s}
.rb-unit-mon.fx-flinch .fig-leg{animation:rbLegTrem .1s linear 3}
@keyframes rbLegTrem{50%{transform:skewX(-5deg)}}

/* —— 防御/辅助/蓄力/逃脱 四类起手（原先零演出） —— */
.rb-unit.fx-cast-def .rb-breath{animation:rbCastDef .76s ease-out}
@keyframes rbCastDef{0%,100%{transform:none}30%{transform:translateY(2.2px) scaleY(.93) scaleX(1.02)}60%{transform:translateY(1px) scaleY(.97)}}
.rb-unit.fx-cast-def .rb-weapon{animation:rbCastDefW .76s ease-out}
@keyframes rbCastDefW{0%,100%{transform:none}32%{transform:rotate(-16deg) translateY(1px)}64%{transform:rotate(-10deg)}}
.rb-unit.fx-cast-sup .rb-breath{animation:rbCastSup .8s ease-in-out}
@keyframes rbCastSup{0%,100%{transform:none}35%{transform:translateY(-2.6px) scaleY(1.045)}70%{transform:translateY(-1px) scaleY(1.02)}}
.rb-unit.fx-cast-sup .rb-weapon{animation:rbCastSupW .8s ease-in-out}
@keyframes rbCastSupW{0%,100%{transform:none}38%{transform:rotate(-26deg) translateY(-3px)}72%{transform:rotate(-14deg)}}
.rb-unit.fx-charge .rb-breath{animation:rbChargeB .8s ease-out}
@keyframes rbChargeB{0%,100%{transform:none}36%{transform:translateY(2px) scaleY(.94) scaleX(1.015)}58%{transform:translateY(1.6px) scaleY(.955)}72%{transform:translateY(1.8px) scaleY(.95)}}
.rb-unit.fx-retreat{animation:rbRetreat .68s cubic-bezier(.3,.7,.3,1)}
@keyframes rbRetreat{0%,100%{transform:translate(-50%,-86%)}32%{transform:translate(calc(-50% - 52px),-86%)}62%{transform:translate(calc(-50% - 34px),-86%)}}
.rb-unit.fx-retreat .rb-breath{animation:rbRetreatB .68s ease-out}
@keyframes rbRetreatB{0%,100%{transform:none}34%{transform:rotate(-4deg) translateY(-1px)}64%{transform:rotate(-2deg)}}

/* —— 五行特效配色（轨迹/火花/盾/光环全部 CSS 变量驱动，crit/elem/heavy 修饰优先） —— */
.rb-trail.t-metal{--trl1:rgba(223,231,242,.95);--trl2:#fff;--trlsh:rgba(180,205,255,.75);height:6px}
.rb-trail.t-wood{--trl1:rgba(143,214,138,.95);--trl2:#eaffea;--trlsh:rgba(90,190,110,.7)}
.rb-trail.t-water{--trl1:rgba(126,200,242,.9);--trl2:#e8f8ff;--trlsh:rgba(90,170,230,.7);height:10px;filter:blur(.6px)}
.rb-trail.t-fire{--trl1:rgba(255,171,94,.95);--trl2:#fff2e0;--trlsh:rgba(255,120,50,.8);height:12px}
.rb-trail.t-earth{--trl1:rgba(216,176,106,.95);--trl2:#fff4dc;--trlsh:rgba(200,150,70,.75);height:11px}
.rb-spark.s-metal{--spk2:#dfe7f2;--spk3:rgba(180,205,255,0)}
.rb-spark.s-wood{--spk2:#8fd68a;--spk3:rgba(90,190,110,0)}
.rb-spark.s-water{--spk2:#7ec8f2;--spk3:rgba(90,170,230,0)}
.rb-spark.s-fire{--spk2:#ffab5e;--spk3:rgba(255,120,50,0)}
.rb-spark.s-earth{--spk2:#d8b06a;--spk3:rgba(200,150,70,0)}

/* —— 类型特效元素：防御盾环(五行色) / 辅助上升光环 / 蓄力内吸 / 逃脱残影 —— */
.rb-ward{width:46px;height:46px;border-radius:50%;border:3px solid var(--ward,#9fc3e8);
  box-shadow:0 0 16px var(--wardsh,rgba(108,158,196,.6)),inset 0 0 10px var(--wardsh,rgba(108,158,196,.4));
  animation:rbWard .85s ease-out forwards}
@keyframes rbWard{0%{opacity:0;transform:translate(-50%,-50%) scale(.5)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(1.5)}}
.rb-ward.w-metal{--ward:#dfe7f2;--wardsh:rgba(190,215,255,.75)}
.rb-ward.w-wood{--ward:#8fd68a;--wardsh:rgba(90,190,110,.7)}
.rb-ward.w-water{--ward:#7ec8f2;--wardsh:rgba(90,170,230,.7)}
.rb-ward.w-fire{--ward:#ffab5e;--wardsh:rgba(255,120,50,.7)}
.rb-ward.w-earth{--ward:#d8b06a;--wardsh:rgba(200,150,70,.7)}
.rb-aura{width:58px;height:20px;border-radius:50%;border:2.5px solid var(--aura,#a8d8b0);opacity:0;
  box-shadow:0 0 14px var(--aurash,rgba(120,200,140,.75)),inset 0 0 8px var(--aurash,rgba(120,200,140,.5));
  animation:rbAuraRise .95s ease-out forwards}
.rb-aura::after{content:'';position:absolute;inset:4px 9px;border-radius:50%;border:1.5px solid var(--aura,#a8d8b0)}
@keyframes rbAuraRise{0%{opacity:0;transform:translate(-50%,-20%) scale(.7)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-320%) scale(1.15)}}
.rb-aura.a-metal{--aura:#dfe7f2;--aurash:rgba(190,215,255,.7)}
.rb-aura.a-wood{--aura:#8fd68a;--aurash:rgba(90,190,110,.65)}
.rb-aura.a-water{--aura:#7ec8f2;--aurash:rgba(90,170,230,.65)}
.rb-aura.a-fire{--aura:#ffab5e;--aurash:rgba(255,120,50,.65)}
.rb-aura.a-earth{--aura:#d8b06a;--aurash:rgba(200,150,70,.65)}
.rb-gather{width:70px;height:70px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,220,130,.85),rgba(255,190,80,.25) 45%,transparent 70%);
  animation:rbGather .7s ease-in forwards}
@keyframes rbGather{0%{opacity:0;transform:translate(-50%,-50%) scale(1.8)}55%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(.35)}}
.rb-afterimage{width:34px;height:62px;border-radius:46%;
  background:linear-gradient(180deg,rgba(232,224,208,.5),rgba(232,224,208,.06));filter:blur(1px);
  animation:rbAfter .75s ease-out forwards}
@keyframes rbAfter{0%{opacity:.9;transform:translate(-50%,-50%)}100%{opacity:0;transform:translate(-50%,-50%) translateX(26px)}}


/* —— lite 降级：氛围层与惯动全部关闭 —— */
body[data-pw-scene-fx="lite"] .rb-mote,
body[data-pw-scene-fx="lite"] .rb-godray,
body[data-pw-scene-fx="lite"] .rb-cloudshade,
body[data-pw-scene-fx="lite"] .rb-fogbank{display:none!important}
body[data-pw-scene-fx="lite"] .rb-breath,
body[data-pw-scene-fx="lite"] .rb-weapon{animation:none!important}
/* v5：重心偏移/头滞后/腿步态在 lite 同样关闭（宿主级 fx-lunge 位移保留作基础反馈） */
body[data-pw-scene-fx="lite"] .rb-fig,
body[data-pw-scene-fx="lite"] .fig-head-g,
body[data-pw-scene-fx="lite"] .fig-leg{animation:none!important}
body[data-pw-scene-fx="lite"] .rb-bf[data-weather="fog"] .rb-zoom{filter:none}

/* —— pw-light：立绘 stop 与氛围层浅色覆盖 —— */
html.pw-light .s-cloak-hi,body.pw-light .s-cloak-hi{stop-color:#caa054}
html.pw-light .s-cloak-lo,body.pw-light .s-cloak-lo{stop-color:#7c5c26}
html.pw-light .s-mbody-hi,body.pw-light .s-mbody-hi{stop-color:#b0563e}
html.pw-light .s-mbody-lo,body.pw-light .s-mbody-lo{stop-color:#552216}
html.pw-light .fig-face,body.pw-light .fig-face{fill:#2e1c0c}
html.pw-light .fig-rim,body.pw-light .fig-rim{stroke:rgba(255,244,214,.85)}
html.pw-light .rb-cloudshade,body.pw-light .rb-cloudshade{background:radial-gradient(ellipse,rgba(90,70,40,.2),transparent 70%)}
html.pw-light .rb-godray,body.pw-light .rb-godray{background:linear-gradient(180deg,rgba(255,250,230,.35),rgba(255,250,230,.04) 80%)}
html.pw-light .rb-mote,body.pw-light .rb-mote{background:rgba(120,95,55,.45)}
html.pw-light .rb-fogbank,body.pw-light .rb-fogbank{background:radial-gradient(ellipse,rgba(245,246,248,.5),transparent 72%)}

/* ============================================================
 * v3 r3 · UI 边框层次(石雕双描边+金线+四角纹样) / 卷轴横幅 / 信息层次 / 死亡碎散 / 石碑刻字
 * ============================================================ */
/* —— 战斗面板边框层次：外深(压边)→金细线→内浅(亮边)，叠在 v2 的阴影之上 —— */
.rb-bf{position:relative;
  box-shadow:0 0 0 1px rgba(0,0,0,.8),inset 0 0 0 1px rgba(227,201,135,.32),inset 0 0 0 3px rgba(10,8,5,.55),inset 0 2px 0 rgba(227,201,135,.14),0 10px 34px rgba(0,0,0,.5)}
/* 四角纹样：L 形双描边角 + 角尖菱形金钉（石碑/战斗面板/全站 sheet 复用同一套 :is 规则） */
:is(.rb-corner,.pw-corner){position:absolute;width:20px;height:20px;pointer-events:none;z-index:6}
:is(.rb-corner,.pw-corner)::before{content:'';position:absolute;inset:0;border:0 solid var(--gold2);opacity:.9}
:is(.rb-corner,.pw-corner).cn1{top:5px;left:5px}:is(.rb-corner,.pw-corner).cn1::before{border-top-width:2px;border-left-width:2px}
:is(.rb-corner,.pw-corner).cn2{top:5px;right:5px}:is(.rb-corner,.pw-corner).cn2::before{border-top-width:2px;border-right-width:2px}
:is(.rb-corner,.pw-corner).cn3{bottom:5px;left:5px}:is(.rb-corner,.pw-corner).cn3::before{border-bottom-width:2px;border-left-width:2px}
:is(.rb-corner,.pw-corner).cn4{bottom:5px;right:5px}:is(.rb-corner,.pw-corner).cn4::before{border-bottom-width:2px;border-right-width:2px}
:is(.rb-corner,.pw-corner)::after{content:'';position:absolute;width:5px;height:5px;background:var(--gold2);transform:rotate(45deg);
  box-shadow:0 0 5px rgba(201,169,97,.6)}
:is(.rb-corner,.pw-corner).cn1::after{top:-2.5px;left:-2.5px}
:is(.rb-corner,.pw-corner).cn2::after{top:-2.5px;right:-2.5px}
:is(.rb-corner,.pw-corner).cn3::after{bottom:-2.5px;left:-2.5px}
:is(.rb-corner,.pw-corner).cn4::after{bottom:-2.5px;right:-2.5px}
/* —— 回合横幅卷轴化：左右轴头(圆柱渐变) + 内层每回合展开动效 —— */
.rb-turn{position:relative;padding:8px 24px;overflow:hidden}
.rb-turn::before,.rb-turn::after{content:'';position:absolute;top:4px;bottom:4px;width:7px;border-radius:3px;z-index:2;
  background:linear-gradient(90deg,#3a2e1c,#9a7c46 45%,#241b0e);
  box-shadow:0 0 0 1px rgba(0,0,0,.6),0 0 8px rgba(201,169,97,.35)}
.rb-turn::before{left:5px}.rb-turn::after{right:5px}
.rb-scroll{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%;
  transform-origin:50% 50%;animation:rbUnroll .42s cubic-bezier(.25,.8,.3,1) both}
@keyframes rbUnroll{0%{transform:scaleX(.06);opacity:.35}55%{opacity:1}100%{transform:scaleX(1)}}
/* —— 行动顺序条：常态我方亮(等待输入)，o-run 演出期我方暗下、敌方反击段亮起 —— */
.rb-order{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;
  border:1px solid var(--line);background:rgba(0,0,0,.35);font:700 10px/1.5 "Noto Serif SC"}
.rb-order i{font-style:normal;padding:1px 6px;border:1px solid transparent;color:var(--weak);transition:color .2s}
.rb-order .rbo-arw{color:var(--gold);font-weight:400}
.rb-order .rbo-p{color:var(--gold2);border-color:rgba(201,169,97,.6);background:rgba(201,169,97,.12)}
.rb-order.o-run .rbo-p{animation:rboDim 1.15s ease-in-out}
.rb-order.o-run .rbo-m{animation:rboLit 1.15s ease-in-out}
@keyframes rboDim{0%{color:var(--gold2);border-color:rgba(201,169,97,.6);background:rgba(201,169,97,.12)}
  45%,100%{color:var(--weak);border-color:transparent;background:none}}
@keyframes rboLit{0%,42%{color:var(--weak);border-color:transparent;background:none}
  60%,85%{color:#ff9a4d;border-color:rgba(255,154,77,.6);background:rgba(255,154,77,.12)}
  100%{color:var(--weak);border-color:transparent;background:none}}
/* —— 铭牌地形标签（只读展示，战斗逻辑无地形修正，不虚构数值） —— */
.rb-terrain{font:700 9px/1 "Noto Serif SC";color:var(--gold);border:1px solid rgba(201,169,97,.45);
  padding:2px 5px;background:rgba(0,0,0,.4);letter-spacing:1px;flex-shrink:0}
/* —— 技能卡伤害预估 —— */
.rb-sk-dmg{font:700 10px/1.6 "JetBrains Mono";color:var(--orange);letter-spacing:.5px}
/* —— 死亡碎散：10 片碎片向外飞散（参数全在类里）；溶解沿用 rbDeadU —— */
.rb-unit-mon{--shardc:#8a2f22}
.rb-unit-pla{--shardc:#c9a961}
.rb-shard{position:absolute;left:50%;top:52%;width:7px;height:9px;background:var(--shardc,#c9a961);
  z-index:7;pointer-events:none;opacity:0;
  clip-path:polygon(50% 0,100% 35%,80% 100%,15% 90%,0 40%)}
.fx-dead .rb-shard{animation:rbShard .8s cubic-bezier(.2,.6,.4,1) .1s forwards}
@keyframes rbShard{0%{opacity:1;transform:translate(-50%,-50%) rotate(0deg) scale(1)}
  100%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) rotate(var(--rr)) scale(.5)}}
.rb-shard.sh1{--dx:-46px;--dy:-58px;--rr:-170deg}
.rb-shard.sh2{--dx:42px;--dy:-64px;--rr:150deg;animation-delay:.16s}
.rb-shard.sh3{--dx:-58px;--dy:-18px;--rr:-220deg;animation-delay:.2s}
.rb-shard.sh4{--dx:56px;--dy:-22px;--rr:190deg;animation-delay:.24s}
.rb-shard.sh5{--dx:-30px;--dy:34px;--rr:-130deg;animation-delay:.14s}
.rb-shard.sh6{--dx:32px;--dy:38px;--rr:240deg;animation-delay:.28s}
.rb-shard.sh7{--dx:-64px;--dy:10px;--rr:-200deg;animation-delay:.32s}
.rb-shard.sh8{--dx:62px;--dy:8px;--rr:160deg;animation-delay:.18s}
.rb-shard.sh9{--dx:-14px;--dy:-70px;--rr:-240deg;animation-delay:.22s}
.rb-shard.sh10{--dx:16px;--dy:52px;--rr:210deg;animation-delay:.3s}
/* —— 石碑刻字：逐行浮现 + 凿刻质感(上暗下亮内凹) —— */
.rb-carve{opacity:0;animation:rbCarve .5s ease-out forwards}
.rb-carve.c1{animation-delay:.2s}.rb-carve.c2{animation-delay:.45s}.rb-carve.c3{animation-delay:.7s}
.rb-carve.c4{animation-delay:.95s}.rb-carve.c5{animation-delay:1.2s}
@keyframes rbCarve{0%{opacity:0;transform:translateY(6px);filter:blur(2px)}100%{opacity:1;transform:none;filter:none}}
.rb-result-label{text-shadow:0 -1px 0 rgba(0,0,0,.75),0 1px 0 rgba(227,201,135,.16),0 0 12px currentColor}
/* —— lite 降级：碎散/刻字/卷轴展开全关，保留溶解与静态边框 —— */
body[data-pw-scene-fx="lite"] .rb-shard{display:none!important}
body[data-pw-scene-fx="lite"] .rb-carve{opacity:1;animation:none}
body[data-pw-scene-fx="lite"] .rb-scroll{animation:none}
/* —— pw-light 覆盖 —— */
html.pw-light .rb-bf,body.pw-light .rb-bf{
  box-shadow:0 0 0 1px rgba(154,119,47,.5),inset 0 0 0 1px rgba(124,95,34,.35),inset 0 0 0 3px rgba(245,240,232,.65),0 10px 34px rgba(90,70,40,.28)}
html.pw-light .rb-turn::before,body.pw-light .rb-turn::before,
html.pw-light .rb-turn::after,body.pw-light .rb-turn::after{
  background:linear-gradient(90deg,#6a5636,#c9a961 45%,#5a4526)}
html.pw-light .rb-order,body.pw-light .rb-order{background:rgba(255,253,248,.6);border-color:rgba(154,119,47,.4)}
html.pw-light .rb-order .rbo-p,body.pw-light .rb-order .rbo-p{color:var(--gold2);border-color:rgba(154,119,47,.6);background:rgba(201,169,97,.18)}
html.pw-light .rb-terrain,body.pw-light .rb-terrain{background:rgba(255,253,248,.55);color:var(--gold2)}
html.pw-light .rb-result-label,body.pw-light .rb-result-label{text-shadow:0 -1px 0 rgba(255,255,255,.6),0 1px 0 rgba(90,70,40,.3),0 0 12px currentColor}

/* ============================================================
 * v11：敌方意图与 AI 表现层（2026-11-03）
 * 数据口径：intent 只用后端 battle_start / battle_round 下发的 normal|heavy；
 * 敌方伤情只按实际 HP 作视觉分档；集火/撤退等后端未下发，故不呈现、不编造
 * ============================================================ */
/* —— 意图卡：图标 + 主文 + 倍率（替代原来的一行纯文字） —— */
.rb-intent{display:inline-flex;align-items:center;gap:5px}
.rb-intent-ic{font-style:normal;font-size:12px;line-height:1}
.rb-intent-tx{letter-spacing:.5px}
.rb-intent-mul{color:#ffb070;font-weight:900}
.rb-intent.heavy .rb-intent-ic{animation:rbTellBlink 1s steps(2,end) infinite}
@keyframes rbTellBlink{50%{opacity:.32}}
/* —— 敌方铭牌意图行（普攻 / 蓄力重击） —— */
.rb-pl-tell{display:flex;align-items:center;gap:4px;margin-top:3px;
  font:700 9px/1.2 "Noto Serif SC";color:var(--weak);letter-spacing:1px}
.rb-pl-tell.heavy{color:#ff9a4d}
.rb-pl-tell i{font-style:normal}
.rb-pl-tell.heavy i{animation:rbTellBlink 1s steps(2,end) infinite}
/* —— 敌方伤情标签（只按 HP 占比分档，纯视觉） —— */
.rb-wound{font:700 8px/1 "Noto Serif SC";padding:1px 4px;border:1px solid rgba(255,90,95,.55);
  color:#ff8b8f;background:rgba(184,65,47,.18);white-space:nowrap;flex-shrink:0}
.rb-wound.is-off{display:none}
.rb-wound.dying{border-color:rgba(255,90,95,.9);color:#ffd0d0;animation:rbWoundBlink 1.4s ease-in-out infinite}
@keyframes rbWoundBlink{50%{opacity:.45}}
/* —— 姿态：重击=压低重心蓄势 / 普攻=前压（演出动画期间由 animation 覆盖，不打架） —— */
.rb-unit.tell-normal{transform:translate(-50%,-86%) translateX(-3px)}
.rb-unit.tell-heavy{transform:translate(-50%,-86%) translate(-2px,3px) scale(1.04,.94)}
.rb-unit-mon.tell-heavy .rb-ring{border-color:rgba(255,120,70,.95);box-shadow:0 0 18px rgba(255,110,60,.75);
  animation:rbTellRing 1.15s ease-in-out infinite}
@keyframes rbTellRing{50%{box-shadow:0 0 30px rgba(255,110,60,1)}}
.rb-unit-mon.wound-hurt .rb-fig{filter:saturate(.88) brightness(.94)}
.rb-unit-mon.wound-dying .rb-fig{filter:saturate(.65) brightness(.85)}
.rb-unit-mon.wound-hurt .rb-breath{animation-duration:3.8s}
.rb-unit-mon.wound-dying .rb-breath{animation-duration:2.4s}
/* —— 意图解读行（副栏） —— */
.rb-intent-read{display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  font:400 10.5px/1.45 "Noto Serif SC";color:var(--weak);padding:4px 8px;
  border-left:2px solid rgba(201,169,97,.5);background:rgba(0,0,0,.22)}
.rb-intent-read b{color:var(--gold2);font-weight:700;letter-spacing:1px}
.rb-intent-read.heavy{border-left-color:rgba(232,132,62,.9);background:rgba(232,132,62,.1)}
.rb-intent-read.heavy b,.rb-intent-read.heavy span{color:#ff9a4d}
.rb-intent-read em{font-style:normal;color:#ff8b8f;border:1px solid rgba(255,90,95,.45);padding:1px 5px;
  animation:rbWoundBlink 1.4s ease-in-out infinite}
/* —— 接近轨迹：敌方站位→我方站位的投射路径（示意，不代表敌方真的移动） —— */
.rb-traj{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;transition:opacity .28s}
.rb-traj.on{opacity:1}
.rb-traj.is-off{opacity:0}
.rb-traj svg{position:absolute;inset:0;width:100%;height:100%}
.rb-traj path,.rb-traj circle{vector-effect:non-scaling-stroke}
.rb-traj-path{fill:none;stroke:rgba(232,110,72,.45);stroke-width:2;stroke-dasharray:8 7;
  animation:rbTrajFlow 1.1s linear infinite}
.rb-traj.normal .rb-traj-path{stroke:rgba(232,110,72,.4);stroke-width:1.6}
.rb-traj.heavy .rb-traj-path{stroke:rgba(255,110,60,.92);stroke-width:3;animation-duration:.6s}
.rb-traj-tick{fill:none;stroke:rgba(232,110,72,.5);stroke-width:2}
.rb-traj.heavy .rb-traj-tick{stroke:rgba(255,120,70,.9);stroke-width:2.6}
.rb-traj-aim{fill:none;stroke:rgba(232,110,72,.55);stroke-width:2}
.rb-traj.heavy .rb-traj-aim{stroke:rgba(255,90,60,.95);stroke-width:2.6;animation:rbAimPulse 1.05s ease-in-out infinite}
.rb-traj-aim2{fill:rgba(232,110,72,.6)}
.rb-traj.heavy .rb-traj-aim2{fill:rgba(255,120,70,.9)}
@keyframes rbTrajFlow{to{stroke-dashoffset:-30}}
@keyframes rbAimPulse{50%{opacity:.35}}
.rb-traj-label{position:absolute;left:50%;top:60.1%;transform:translate(-50%,-32px);
  font:700 9px/1 "Noto Serif SC";letter-spacing:2px;color:rgba(232,150,110,.85);
  padding:2px 6px;border:1px solid rgba(232,110,72,.4);background:rgba(10,8,5,.5);white-space:nowrap}
/* —— 敌方行动轨迹：从敌位横掠到落点；重击更粗更亮，被闪开则中途断开 —— */
.rb-fx-layer .at-arc{left:72.6%;top:52%;animation-delay:.34s;animation-fill-mode:both}
.rb-fx-layer .at-arc-aim{left:29.6%;top:52%;animation-delay:.1s;animation-fill-mode:both}
.rb-swoop{width:300px;height:6px;border-radius:3px;
  background:linear-gradient(90deg,rgba(255,150,90,0),rgba(255,170,110,.95));
  box-shadow:0 0 14px rgba(255,120,60,.6);
  animation:rbSwoop .5s cubic-bezier(.25,.7,.3,1) both}
@keyframes rbSwoop{0%{opacity:0;transform:translate(-50%,-50%) scaleX(.15)}
  25%{opacity:1}100%{opacity:0;transform:translate(calc(-50% - 360px),-50%) scaleX(1.15)}}
.rb-swoop.heavy{height:12px;width:340px;
  background:linear-gradient(90deg,rgba(255,90,40,0),rgba(255,130,60,1));
  box-shadow:0 0 22px rgba(255,90,40,.9)}
.rb-swoop.whiff{width:190px;
  background:linear-gradient(90deg,rgba(160,190,210,0),rgba(190,215,235,.8));
  box-shadow:0 0 10px rgba(140,180,210,.5);animation-name:rbSwoopWhiff}
@keyframes rbSwoopWhiff{0%{opacity:0;transform:translate(-50%,-50%) scaleX(.15)}
  25%{opacity:.9}100%{opacity:0;transform:translate(calc(-50% - 170px),-50%) rotate(-14deg) scaleX(.8)}}
.rb-swoop-aim{width:26px;height:26px;border-radius:50%;border:3px solid rgba(255,110,60,.95);
  box-shadow:0 0 20px rgba(255,90,40,.9);animation:rbSwoopAim .5s ease-out both}
@keyframes rbSwoopAim{0%{opacity:1;transform:translate(-50%,-50%) scale(.3)}
  100%{opacity:0;transform:translate(-50%,-50%) scale(2)}}
/* —— 390 收口：轨迹标签与铭牌意图行压字号，不挤占战场 —— */
@media (max-width:767.98px){
  .rb-traj-label{font-size:8px;letter-spacing:1px;transform:translate(-50%,-26px)}
  .rb-pl-tell{font-size:8px;letter-spacing:.5px}
  .rb-wound{font-size:7px}
}
/* —— pw-light 覆盖：轨迹/意图/伤情在浅底保持可读对比 —— */
html.pw-light .rb-traj-path,body.pw-light .rb-traj-path{stroke:rgba(170,70,40,.5)}
html.pw-light .rb-traj.heavy .rb-traj-path,body.pw-light .rb-traj.heavy .rb-traj-path{stroke:rgba(190,60,30,.9)}
html.pw-light .rb-traj-tick,body.pw-light .rb-traj-tick{stroke:rgba(170,70,40,.6)}
html.pw-light .rb-traj.heavy .rb-traj-tick,body.pw-light .rb-traj.heavy .rb-traj-tick{stroke:rgba(190,60,30,.9)}
html.pw-light .rb-traj-aim,body.pw-light .rb-traj-aim{stroke:rgba(170,70,40,.65)}
html.pw-light .rb-traj.heavy .rb-traj-aim,body.pw-light .rb-traj.heavy .rb-traj-aim{stroke:rgba(190,50,25,.95)}
html.pw-light .rb-traj-aim2,body.pw-light .rb-traj-aim2{fill:rgba(170,70,40,.7)}
html.pw-light .rb-traj.heavy .rb-traj-aim2,body.pw-light .rb-traj.heavy .rb-traj-aim2{fill:rgba(190,50,25,.9)}
html.pw-light .rb-traj-label,body.pw-light .rb-traj-label{color:#8a3f22;background:rgba(255,253,248,.72);
  border-color:rgba(170,70,40,.45)}
html.pw-light .rb-pl-tell,body.pw-light .rb-pl-tell{color:#7c6a4c}
html.pw-light .rb-pl-tell.heavy,body.pw-light .rb-pl-tell.heavy{color:#b05a1e}
html.pw-light .rb-wound,body.pw-light .rb-wound{color:#b02a24;background:rgba(184,65,47,.1);border-color:rgba(176,42,36,.45)}
html.pw-light .rb-intent-read,body.pw-light .rb-intent-read{background:rgba(255,253,248,.6);color:#6a5f4a}
html.pw-light .rb-intent-read.heavy,body.pw-light .rb-intent-read.heavy{background:rgba(232,132,62,.12)}
html.pw-light .rb-intent-read.heavy span,body.pw-light .rb-intent-read.heavy span{color:#a84e14}
/* —— lite 降级：轨迹脉冲/姿态脉动/伤情闪烁全关，保留静态路径与文字 —— */
body[data-pw-scene-fx="lite"] .rb-traj-path,
body[data-pw-scene-fx="lite"] .rb-traj.heavy .rb-traj-aim,
body[data-pw-scene-fx="lite"] .rb-unit.tell-heavy .rb-ring,
body[data-pw-scene-fx="lite"] .rb-pl-tell.heavy i,
body[data-pw-scene-fx="lite"] .rb-intent.heavy .rb-intent-ic,
body[data-pw-scene-fx="lite"] .rb-wound.dying,
body[data-pw-scene-fx="lite"] .rb-intent-read em{animation:none!important}
body[data-pw-scene-fx="lite"] .rb-swoop,
body[data-pw-scene-fx="lite"] .rb-swoop-aim{display:none!important}
body[data-pw-scene-fx="lite"] .rb-unit.tell-heavy,
body[data-pw-scene-fx="lite"] .rb-unit.tell-normal{transform:translate(-50%,-86%)}
@media (prefers-reduced-motion:reduce){
  .rb-traj-path,.rb-traj-aim,.rb-pl-tell.heavy i,.rb-intent.heavy .rb-intent-ic,
  .rb-unit.tell-heavy .rb-ring,.rb-wound.dying,.rb-intent-read em{animation:none!important}
}
/* ============================================================
 * v11：六边形格线开关（默认关闭）
 * 关闭时 .hx 不再描边，格子靠地形色块 / 材质 / 每格上下明暗与高差台阶区分；
 * 开关状态存 localStorage，并暴露为 body[data-pw-grid="on|off"] 供验收读取
 * ============================================================ */
body[data-pw-grid="off"] .hx{stroke:transparent}
/* 打开时给一个明确的“调试格线”强度：默认的 rgba(14,11,7,.9) 在暗底上几乎看不见，
   真开关必须看得出开/关差异，否则等于没有开关 */
body[data-pw-grid="on"] .hx{stroke:rgba(201,169,97,.5);stroke-width:1.25}
html.pw-light body[data-pw-grid="on"] .hx,
body.pw-light[data-pw-grid="on"] .hx{stroke:rgba(154,119,47,.55)}
body[data-pw-grid="off"] .hx-hot{stroke:transparent;filter:brightness(1.18) saturate(1.04)}
html.pw-light body[data-pw-grid="off"] .hx,
body.pw-light[data-pw-grid="off"] .hx{stroke:transparent}
html.pw-light body[data-pw-grid="off"] .hx-hot,
body.pw-light[data-pw-grid="off"] .hx-hot{stroke:transparent;filter:brightness(1.1) saturate(1.02)}
/* 设置卡（帮助页第十四节） */
.pw-pref-card{margin:10px 0;padding:12px 14px;border:1px solid var(--line);background:rgba(var(--scroll-rgb),.55)}
.pw-switch{display:flex;align-items:flex-start;gap:12px;cursor:pointer;position:relative}
.pw-switch input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.pw-switch-track{flex:0 0 auto;width:44px;height:24px;border:1px solid var(--line);
  background:rgba(0,0,0,.35);position:relative;transition:background .18s,border-color .18s;margin-top:2px}
.pw-switch-track::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;
  background:var(--weak);transition:transform .18s,background .18s}
.pw-switch input:checked + .pw-switch-track{background:rgba(201,169,97,.22);border-color:var(--gold)}
.pw-switch input:checked + .pw-switch-track::after{transform:translateX(20px);background:var(--gold2)}
.pw-switch input:focus-visible + .pw-switch-track{outline:2px solid var(--gold2);outline-offset:2px}
.pw-switch-text{display:flex;flex-direction:column;gap:4px;min-width:0}
.pw-switch-text b{font:700 13px/1.3 "Noto Serif SC";color:var(--gold2);letter-spacing:1px}
.pw-switch-text em{font-style:normal;font:400 11.5px/1.6 "Noto Serif SC";color:var(--weak)}
.pw-pref-note{margin-top:8px;font:400 10.5px/1.5 "Noto Serif SC";color:var(--weak);opacity:.8}
html.pw-light .pw-pref-card,body.pw-light .pw-pref-card{background:rgba(255,253,248,.7)}
/* ============================================================
 * v11：等级外观分档（纯表现层）Lv1-5 / 6-10 / 11-15 / 16+
 * t2 护甲、t3 披风饰边、t4 宗师光效，全部为现有 SVG 分层换装，无位图
 * ============================================================ */
.fig-pauldron-m{fill:url(#plaStaff);stroke:rgba(255,240,200,.5);stroke-width:.45}
.fig-belt{fill:#5b4326;stroke:rgba(201,169,97,.55);stroke-width:.4}
.fig-cape-trim{fill:rgba(201,169,97,.85)}
.fig-collar{fill:rgba(227,201,135,.8);stroke:rgba(255,245,210,.5);stroke-width:.35}
.fig-orb-aura{fill:rgba(255,220,150,.12);stroke:rgba(255,220,150,.55);stroke-width:1.3;
  animation:rbOrbAura 2.8s ease-in-out infinite}
.fig-rim2{fill:none;stroke:rgba(255,244,205,.75);stroke-width:.7}
@keyframes rbOrbAura{50%{stroke-opacity:.85;fill:rgba(255,220,150,.2)}}
.rb-fig .pla-tier{display:none}
#rbUnitPla.fig-tier-2 .pla-tier.t2,#rbUnitPla.fig-tier-3 .pla-tier.t2,#rbUnitPla.fig-tier-4 .pla-tier.t2{display:block}
#rbUnitPla.fig-tier-3 .pla-tier.t3,#rbUnitPla.fig-tier-4 .pla-tier.t3{display:block}
#rbUnitPla.fig-tier-4 .pla-tier.t4{display:block}
/* 铭牌称号（只显示后端下发的 title） */
.rb-pl-title{margin-top:3px;text-align:center;line-height:1}
.rb-pl-title-tx{font:700 9px/1.2 "Noto Serif SC";color:#e3c987;letter-spacing:1px;text-shadow:0 1px 0 rgba(0,0,0,.6)}
.rb-pl-title:empty{display:none}
html.pw-light .rb-pl-title-tx,body.pw-light .rb-pl-title-tx{color:#8a5f14;text-shadow:none}
/* ============================================================
 * v11：叮当战斗——兵器相击（普通 / 暴击 / 格挡 三档形制）
 * 与 hit-stop / 震屏 / 飘字分层：交击层最后绘制、z-index 最高，只闪 0.3-0.6s
 * ============================================================ */
.rb-clash{width:1px;height:1px;z-index:7;border-radius:50%;
  box-shadow:26px -10px 2px -2px rgba(255,214,150,.9),35px 8px 2px -2px rgba(255,170,90,.85),
    18px 17px 2px -2px rgba(255,232,175,.8),-12px -14px 2px -2px rgba(255,196,126,.75),
    -21px 11px 2px -2px rgba(255,160,80,.7);
  animation:rbClashSparks .45s ease-out both}
.rb-clash::before{content:'';position:absolute;left:50%;top:50%;width:60px;height:60px;margin:-30px 0 0 -30px;
  border-radius:50%;
  background:radial-gradient(circle,#fff 0 10%,rgba(255,244,214,.96) 24%,rgba(255,188,104,.6) 46%,rgba(255,140,60,0) 72%);
  animation:rbClashFlash .32s ease-out both}
.rb-clash::after{content:'';position:absolute;left:50%;top:50%;width:46px;height:46px;margin:-23px 0 0 -23px;
  background:linear-gradient(90deg,rgba(255,255,255,0),#fff 46%,#fff 54%,rgba(255,255,255,0));
  clip-path:polygon(50% 0,58% 42%,100% 50%,58% 58%,50% 100%,42% 58%,0 50%,42% 42%);
  transform:rotate(18deg);filter:drop-shadow(0 0 6px rgba(255,222,150,.9));
  animation:rbClashStar .4s cubic-bezier(.2,.7,.3,1) both}
.rb-clash.crit{box-shadow:40px -16px 3px -2px rgba(255,220,160,.95),56px 12px 3px -2px rgba(255,160,80,.9),
    28px 26px 3px -2px rgba(255,238,190,.85),-18px -22px 3px -2px rgba(255,200,130,.8),
    -32px 16px 3px -2px rgba(255,150,70,.75);animation-duration:.6s}
.rb-clash.crit::before{width:104px;height:104px;margin:-52px 0 0 -52px;animation-duration:.46s}
.rb-clash.crit::after{width:86px;height:86px;margin:-43px 0 0 -43px;animation-duration:.56s}
.rb-clash.hit{z-index:8}
/* 交击点落在挥击路径的前缘（敌方身前），而不是压住躯干；双方受击同理 */
.rb-fx-layer .rb-clash.at-mon{left:70.4%;top:50.4%}
.rb-fx-layer .rb-clash.hit.at-pla{left:31.4%;top:50.4%}
.rb-clash.blk{box-shadow:16px -8px 2px -2px rgba(170,205,240,.7),-14px 10px 2px -2px rgba(140,180,220,.6);
  animation:rbClashSparks .3s ease-out both}
.rb-clash.blk::before{width:58px;height:58px;margin:-29px 0 0 -29px;
  background:radial-gradient(circle,rgba(238,248,255,.98) 0 16%,rgba(150,200,245,.75) 42%,rgba(96,140,190,0) 72%);
  animation-duration:.26s}
.rb-clash.blk::after{display:none}
.rb-clash-ring{width:1px;height:1px;z-index:6}
.rb-clash-ring::before{content:'';position:absolute;left:50%;top:50%;width:38px;height:38px;margin:-19px;
  border:2px solid rgba(255,214,150,.95);border-radius:50%;box-shadow:0 0 14px rgba(255,180,90,.85);
  animation:rbClashRing .55s ease-out both}
/* 暴击双环：第二道环更细、外圈更大、晚 0.1s 起（同一个 keyframe，只改盒尺寸与延迟） */
.rb-clash-ring::after{content:'';position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px;
  border:1px solid rgba(255,236,190,.8);border-radius:50%;box-shadow:0 0 10px rgba(255,200,120,.6);
  animation:rbClashRing .62s .1s ease-out both}
@keyframes rbClashFlash{0%{opacity:0;transform:scale(.35)}18%{opacity:1}62%{opacity:.85}100%{opacity:0;transform:scale(1.35)}}
@keyframes rbClashStar{0%{opacity:0;transform:rotate(18deg) scale(.2)}25%{opacity:1}100%{opacity:0;transform:rotate(18deg) scale(1.5)}}
@keyframes rbClashSparks{0%{opacity:0;transform:translate(-50%,-50%) scale(.55)}
  22%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(1.7)}}
@keyframes rbClashRing{0%{opacity:.95;transform:scale(.4)}100%{opacity:0;transform:scale(2.5)}}
/* ============================================================
 * v11：升级演出——金色光柱 + 铭牌翻牌 + 真实数据行（1.25s 自动淡出，不阻塞操作）
 * ============================================================ */
#rbBody{position:relative}
.rb-lvup{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;
  pointer-events:none;overflow:hidden}
.rb-lvup.out{animation:lvOut .45s ease-in forwards}
.lv-pillar{position:absolute;bottom:-2%;left:50%;width:min(260px,46%);height:82%;
  transform:translateX(-50%) scaleY(.05);transform-origin:bottom;
  background:linear-gradient(0deg,rgba(255,190,90,0),rgba(255,215,140,.55) 45%,rgba(255,245,215,.9) 78%,rgba(255,250,235,0));
  filter:blur(5px);animation:lvPillar .85s cubic-bezier(.2,.75,.25,1) both}
.lv-ring{position:absolute;left:50%;top:50%;width:min(420px,72%);aspect-ratio:1;
  border:2px solid rgba(255,210,140,.65);border-radius:50%;
  transform:translate(-50%,-50%);animation:lvRing 1s cubic-bezier(.2,.7,.3,1) both}
.lv-r2{animation-delay:.12s;border-color:rgba(255,230,180,.5)}
.lv-card{position:relative;z-index:2;text-align:center;padding:16px 20px;max-width:min(520px,86%);
  border:1px solid rgba(255,210,140,.85);
  background:linear-gradient(180deg,rgba(34,25,11,.96),rgba(10,8,4,.97));
  box-shadow:0 0 44px rgba(255,190,90,.4),inset 0 0 0 1px rgba(255,240,190,.22);
  animation:lvCard .42s cubic-bezier(.2,.8,.3,1) both}
.lv-kicker{font:700 10px/1 "JetBrains Mono",monospace;letter-spacing:5px;color:#e8c477}
.lv-num{display:flex;align-items:baseline;justify-content:center;gap:12px;margin:4px 0 2px;
  font-family:"JetBrains Mono",monospace}
.lv-old{font-size:20px;color:#9a8a6a;text-decoration:line-through}
.lv-new{font-size:36px;color:#ffe0a0;text-shadow:0 0 20px rgba(255,190,90,.85);
  animation:lvRoll .55s cubic-bezier(.2,.8,.3,1) both}
.lv-arrow{font-style:normal;color:#c9a961}
.lv-title{font:800 16px/1.5 "Noto Serif SC";color:#f4d79a;letter-spacing:2px;margin-bottom:6px;min-height:1.5em}
.lv-rows{display:flex;flex-wrap:wrap;gap:5px 14px;justify-content:center;margin:8px 0}
.lv-rows span{font:400 11.5px/1.6 "Noto Serif SC";color:#d8cdb4}
.lv-unlocks{list-style:none;margin:8px 0 0;padding:8px 0 0;border-top:1px solid rgba(201,169,97,.25);text-align:left}
.lv-unlocks li{font:400 11.5px/1.55 "Noto Serif SC";color:#c9bda2;display:flex;gap:8px;flex-wrap:wrap;padding:3px 0}
.lv-unlocks b{color:#ffe0a0;font-weight:700}
.lv-unlocks em{font-style:normal;color:#e8843e;font-family:"JetBrains Mono",monospace;font-size:10px}
.lv-unlocks span{color:#9a8a6a}
.lv-unlocks .none{color:#9a8a6a}
.lv-note{font:400 10px/1.5 "Noto Serif SC";color:#8a7f6a;margin-top:6px}
@keyframes lvPillar{0%{transform:translateX(-50%) scaleY(.05);opacity:0}
  35%{opacity:1}100%{transform:translateX(-50%) scaleY(1);opacity:.9}}
@keyframes lvRing{0%{transform:translate(-50%,-50%) scale(.25);opacity:0}
  30%{opacity:.9}100%{transform:translate(-50%,-50%) scale(1);opacity:0}}
@keyframes lvCard{0%{opacity:0;transform:translateY(10px) scale(.92)}100%{opacity:1;transform:none}}
@keyframes lvRoll{0%{opacity:0;transform:rotateX(85deg) translateY(-8px)}100%{opacity:1;transform:none}}
@keyframes lvOut{to{opacity:0;transform:scale(1.06)}}
html.pw-light .lv-card,body.pw-light .lv-card{
  background:linear-gradient(180deg,rgba(255,250,238,.98),rgba(245,236,218,.98));
  border-color:rgba(154,119,47,.8);box-shadow:0 0 40px rgba(201,169,97,.35)}
html.pw-light .lv-new,body.pw-light .lv-new{color:#8a5a10;text-shadow:0 0 16px rgba(201,169,97,.45)}
html.pw-light .lv-title,body.pw-light .lv-title{color:#6a4a12}
html.pw-light .lv-rows span,body.pw-light .lv-rows span{color:#4a3d28}
html.pw-light .lv-unlocks,body.pw-light .lv-unlocks{border-top-color:rgba(154,119,47,.3)}
html.pw-light .lv-unlocks li,body.pw-light .lv-unlocks li{color:#5a4a30}
html.pw-light .lv-note,body.pw-light .lv-note{color:#7c6a4c}
@media (max-width:767.98px){
  .lv-card{padding:12px 14px;max-width:92%}
  .lv-new{font-size:28px}
  .lv-old{font-size:17px}
  .lv-title{font-size:14px;letter-spacing:1px}
  .lv-rows span{font-size:11px}
}
/* lite：升级演出只保留静态卡，光柱/圆环/翻牌全部停 */
body[data-pw-scene-fx="lite"] .lv-pillar,
body[data-pw-scene-fx="lite"] .lv-ring{display:none!important}
body[data-pw-scene-fx="lite"] .lv-new,
body[data-pw-scene-fx="lite"] .rb-clash,
body[data-pw-scene-fx="lite"] .rb-clash-ring{animation:none!important}
body[data-pw-scene-fx="lite"] .rb-clash,
body[data-pw-scene-fx="lite"] .rb-clash-ring{display:none!important}
/* 音效开关与格线开关的间距 */
.pw-switch-sfx{margin-top:12px}

/* ============================================================
 * v12 · 单位立绘重制：材质 / 轮廓 / 关节轴 / 逐帧骨架
 * ------------------------------------------------------------
 * 1) 材质：布(折痕) / 皮(斜纹 pattern) / 铁(三段硬高光)；光源统一左上
 * 2) 轮廓：所有实体层统一暗描边 + 左上 rim light → 深色地形上仍可辨
 * 3) 关节：每个 <g> 独立 transform-origin（view-box user unit），动作按关节走
 * 4) 帧动画：steps(1,end) 离散关键帧 = 真帧，不是补间位移
 * ============================================================ */
/* —— 材质 stop —— */
.uc-hi{stop-color:#7d8f83}.uc-mid{stop-color:#3f5349}.uc-lo{stop-color:#172420}
.ui-hi{stop-color:#f2f7fd}.ui-mid{stop-color:#98a6b4}.ui-lo{stop-color:#3a444f}
.ul-hi{stop-color:#8c6335}.ul-lo{stop-color:#3a2412}
.us-hi{stop-color:#e2b48d}.us-lo{stop-color:#96633f}
.ug-hi{stop-color:#f2dda2}.ug-lo{stop-color:#95722d}
.uo-core{stop-color:#fffdf0}.uo-mid{stop-color:#ffd15e}.uo-out{stop-color:#ffb52e;stop-opacity:0}
.ush-core{stop-color:#000;stop-opacity:.62}.ush-mid{stop-color:#000;stop-opacity:.28}
.ush-out{stop-color:#000;stop-opacity:0}
.ulp-base{fill:#6b492a}.ulp-line{fill:none;stroke:#3a2310;stroke-width:.7;opacity:.7}
.s-mbody-mid{stop-color:#8a3826}.s-mleg-hi{stop-color:#8a3826}.s-mleg-lo{stop-color:#3a1409}

/* —— 材质填充 + 统一轮廓（深色地形上靠暗线+左上高光分离） —— */
.u-hero .u-cloth,.u-hero .u-iron,.u-hero .u-lea,.u-hero .u-skin,.u-hero .u-gold,
.u-hero .u-wood,.u-hero .u-blade,.u-hero .u-boot,.u-hero .u-belt,.u-beast .u-mleg,
.u-beast .fig-body,.u-beast .fig-head{
  stroke:#06080a;stroke-width:.8;stroke-linejoin:round;stroke-linecap:round}
.u-hero .u-cloth{fill:url(#uCloth)}
.u-hero .u-iron{fill:url(#uIron)}
.u-hero .u-lea{fill:url(#uLeaPat)}
.u-hero .u-skin{fill:url(#uSkin)}
.u-hero .u-gold{fill:url(#uGold)}
.u-hero .u-wood{fill:url(#uLea)}
.u-hero .u-blade{fill:url(#uIron)}
.u-hero .u-lea.u-hand{fill:url(#uSkin)}
.u-hero .u-boot{fill:#241809}
.u-hero .u-belt{fill:#4b3020}
.u-hero .u-strap{fill:none;stroke:rgba(24,14,6,.9);stroke-width:1.7}
.u-hero .u-fold{fill:none;stroke:rgba(4,10,8,.55);stroke-width:.95}
.u-hero .u-sash{fill:#8a3a2c}
.u-hero .u-slit{fill:#0b1116}
.u-hero .u-eye-s{fill:#ffdc86}
.u-hero .u-mouth{fill:none;stroke:#7a4a32;stroke-width:.7}
/* v12r2 体积感：背光侧压暗、靴面高光、腰带扣、颈窝投影 */
.u-hero .u-shade{fill:rgba(6,10,14,.34);stroke:none}
.u-hero .u-boot-hi{fill:none;stroke:rgba(216,180,122,.6);stroke-width:.85}
.u-hero .u-buckle-hollow{stroke:none}
.u-hero .u-neck{stroke-width:.7}
.u-hero .u-nose{fill:#c08a63}
.u-hero .u-iron-hi{fill:rgba(236,246,255,.34)}
.u-hero .u-blade-hi{fill:none;stroke:rgba(255,255,255,.75);stroke-width:.55}
.u-hero .u-rim-hi{fill:none;stroke:rgba(255,232,180,.82);stroke-width:.95}
.u-hero .u-pauldron{fill:url(#uIron)}
.u-hero .u-collar{fill:url(#uGold)}
.u-hero .u-shield-crest{fill:#b8412f}
.u-hero .u-orb{fill:url(#uOrb)}
.u-hero .u-orb-halo{fill:rgba(255,216,120,.2)}
.u-hero .u-shadow,.u-beast .u-shadow{fill:url(#uShadow);stroke:none}
.u-hero .u-aura{fill:none;stroke:rgba(255,214,120,.34);stroke-width:2.4;
  animation:uAuraPulse 3.6s ease-in-out infinite}
@keyframes uAuraPulse{50%{opacity:.45;stroke-width:3.4}}
.u-hero .u-cape.t3 path:first-child{stroke:#06080a}
.u-beast .u-mleg{fill:url(#monLegs)}
.u-beast .fig-body,.u-beast .fig-head{stroke-width:.9}
/* v12r3 兽形：头/吻/鼻孔独立材质，头不再与躯干同色糊成一团 */
.s-head-hi{stop-color:#8d4630}.s-head-lo{stop-color:#4a1d12}
.u-beast .fig-head{fill:url(#monHead)}
.u-beast .fig-muzzle{fill:#7a3f2c;stroke:#06080a;stroke-width:.85;stroke-linejoin:round}
.u-beast .fig-nostril{fill:rgba(10,4,2,.8);stroke:none}
.u-beast .fig-horn{stroke:#06080a;stroke-width:.85;stroke-linejoin:round}
.u-beast .u-cape{fill:#4a1c10}

/* —— 关节轴（全部 view-box 用户坐标，和 64×64 画布对齐） —— */
.u-hero .rb-breath,.u-beast .rb-breath{transform-origin:32px 44px;transform-box:view-box}
.u-hero .fig-head-g{transform-origin:32px 26.5px;transform-box:view-box}
.u-beast .fig-head-g{transform-origin:20px 34px;transform-box:view-box}
.u-hero .u-arm-f{transform-origin:39.5px 27px;transform-box:view-box}
.u-hero .u-arm-b{transform-origin:28.5px 27px;transform-box:view-box}
.u-hero .u-leg-f{transform-origin:37px 44px;transform-box:view-box}
.u-hero .u-leg-b{transform-origin:31px 44px;transform-box:view-box}
.u-hero .rb-weapon{transform-origin:45px 41px;transform-box:view-box}
.u-hero .u-cape{transform-origin:32px 26px;transform-box:view-box}
.u-hero .u-shield{transform-origin:26px 35px;transform-box:view-box}
/* 根层：脚底扎根，不再做整图摆动（重心交给躯干关节） */
.u-hero,.u-beast{animation:none;transform-box:fill-box;transform-origin:50% 100%}

/* —— 逐帧 idle：躯干 3 帧 / 披风 2 帧 / 头 3 帧 / 双臂 2 帧 / 武器 2 帧 —— */
.u-hero .rb-breath{animation:uIdleTorso 3.2s steps(1,end) infinite}
@keyframes uIdleTorso{
  0%,33.33%{transform:rotate(0deg) translateY(0)}
  33.34%,66.66%{transform:rotate(-.9deg) translateY(-.55px)}
  66.67%,100%{transform:rotate(.55deg) translateY(0)}
}
.u-hero .u-cape,.u-beast .u-cape{animation:uIdleCape 4.2s steps(1,end) infinite}
@keyframes uIdleCape{0%,50%{transform:rotate(0deg)}50.01%,100%{transform:rotate(1.7deg)}}
.u-hero .fig-head-g{animation:uIdleHead 3.2s steps(1,end) infinite}
@keyframes uIdleHead{
  0%,33.33%{transform:rotate(0deg)}
  33.34%,66.66%{transform:rotate(-1.1deg)}
  66.67%,100%{transform:rotate(.7deg)}
}
.u-hero .u-arm-f{animation:uIdleArmF 3.2s steps(1,end) infinite}
@keyframes uIdleArmF{
  0%,50%{transform:rotate(0deg)}
  50.01%,100%{transform:rotate(-1.4deg)}
}
.u-hero .u-arm-b{animation:uIdleArmB 3.2s steps(1,end) infinite}
@keyframes uIdleArmB{
  0%,50%{transform:rotate(0deg)}
  50.01%,100%{transform:rotate(1.2deg)}
}
.u-hero .rb-weapon{animation:uIdleWeapon 5.6s steps(1,end) infinite}
@keyframes uIdleWeapon{0%,50%{transform:rotate(0deg)}50.01%,100%{transform:rotate(-1.8deg)}}
/* 兽：2 帧呼吸（躯干起伏）+ 头 2 帧 */
.u-beast .rb-breath{animation:uBeastIdle 2.6s steps(1,end) infinite}
@keyframes uBeastIdle{
  0%,50%{transform:translateY(0) scaleY(1)}
  50.01%,100%{transform:translateY(-1.1px) scaleY(1.02)}
}
.u-beast .fig-head-g{animation:uBeastHead 2.6s steps(1,end) infinite}
@keyframes uBeastHead{0%,50%{transform:rotate(0deg)}50.01%,100%{transform:rotate(-3deg)}}

/* —— attack：6 帧（预备→蓄力→挥出→命中→回收→回位），按五行换角度 —— */
.rb-unit.cast-metal{--aA:-6deg;--aB:-50deg;--aC:32deg;--aD:40deg;--aE:6deg}
.rb-unit.cast-fire{--aA:-11deg;--aB:-72deg;--aC:44deg;--aD:52deg;--aE:10deg}
.rb-unit.cast-water{--aA:-8deg;--aB:-56deg;--aC:30deg;--aD:36deg;--aE:4deg}
.rb-unit.cast-earth{--aA:-9deg;--aB:-64deg;--aC:38deg;--aD:46deg;--aE:8deg}
.rb-unit.cast-wood{--aA:-7deg;--aB:-46deg;--aC:26deg;--aD:30deg;--aE:2deg}
@keyframes uAtkArm{
  0%,10%{transform:rotate(var(--aA,-8deg))}
  10.01%,24%{transform:rotate(var(--aB,-58deg))}
  24.01%,38%{transform:rotate(var(--aC,26deg))}
  38.01%,52%{transform:rotate(var(--aD,34deg))}
  52.01%,70%{transform:rotate(var(--aE,6deg))}
  70.01%,100%{transform:rotate(var(--aA,-8deg))}
}
.rb-unit.fx-lunge .u-arm-f{animation:uAtkArm .56s steps(1,end) 1 both}
@keyframes uAtkWeapon{
  0%,10%{transform:rotate(0deg) translateX(0)}
  10.01%,24%{transform:rotate(-16deg) translateX(-2px)}
  24.01%,38%{transform:rotate(20deg) translateX(3px)}
  38.01%,52%{transform:rotate(28deg) translateX(4px)}
  52.01%,70%{transform:rotate(6deg) translateX(1px)}
  70.01%,100%{transform:rotate(0deg) translateX(0)}
}
.rb-unit.fx-lunge .rb-weapon{animation:uAtkWeapon .56s steps(1,end) 1 both}
@keyframes uAtkTorso{
  0%,10%{transform:rotate(0deg) translateY(0)}
  10.01%,24%{transform:rotate(-5deg) translateY(1.2px)}
  24.01%,38%{transform:rotate(6deg) translateY(-1px)}
  38.01%,52%{transform:rotate(8deg) translateY(-.6px)}
  52.01%,70%{transform:rotate(2deg)}
  70.01%,100%{transform:rotate(0deg) translateY(0)}
}
.rb-unit.fx-lunge .rb-breath{animation:uAtkTorso .56s steps(1,end) 1 both}
@keyframes uAtkHead{
  0%,10%{transform:rotate(0deg)}
  10.01%,24%{transform:rotate(-8deg)}
  24.01%,52%{transform:rotate(6deg)}
  52.01%,70%{transform:rotate(2deg)}
  70.01%,100%{transform:rotate(0deg)}
}
.rb-unit.fx-lunge .fig-head-g{animation:uAtkHead .56s steps(1,end) 1 both}
/* 两帧跨步：近腿 / 远腿反相 */
@keyframes uStrideF{
  0%,22%{transform:rotate(-15deg)}
  22.01%,46%{transform:rotate(11deg)}
  46.01%,72%{transform:rotate(-7deg)}
  72.01%,100%{transform:rotate(0deg)}
}
@keyframes uStrideB{
  0%,22%{transform:rotate(11deg)}
  22.01%,46%{transform:rotate(-13deg)}
  46.01%,72%{transform:rotate(6deg)}
  72.01%,100%{transform:rotate(0deg)}
}
.rb-unit.fx-lunge .u-leg-f{animation:uStrideF .56s steps(1,end) 1 both}
.rb-unit.fx-lunge .u-leg-b{animation:uStrideB .56s steps(1,end) 1 both}
/* 兽攻击：4 帧（伏低→扑出→咬合→回收） */
.rb-unit.fx-lunge-mon .u-body{animation:uBeastAtk .56s steps(1,end) 1 .32s both}
@keyframes uBeastAtk{
  0%,12%{transform:translateY(0) rotate(0)}
  12.01%,30%{transform:translateY(2.4px) rotate(-3deg)}
  30.01%,48%{transform:translateX(-4px) translateY(-3px) rotate(4deg)}
  48.01%,70%{transform:translateX(-2px) translateY(-1px) rotate(1deg)}
  70.01%,100%{transform:none}
}
.rb-unit.fx-lunge-mon .fig-head-g{animation:uBeastBite .56s steps(1,end) 1 .32s both}
@keyframes uBeastBite{
  0%,30%{transform:rotate(0deg)}
  30.01%,48%{transform:rotate(-14deg) translateX(-2px)}
  48.01%,70%{transform:rotate(4deg)}
  70.01%,100%{transform:rotate(0deg)}
}
.rb-unit.fx-lunge-mon .fig-leg{animation:uBeastScuttle .12s steps(1,end) 4 .32s}
@keyframes uBeastScuttle{0%,50%{transform:skewX(6deg)}50.01%,100%{transform:skewX(-6deg)}}

/* —— hit：2 帧后仰（+1 帧回位），头滞后一帧 —— */
@keyframes uHitTorso{
  0%,16%{transform:none}
  16.01%,44%{transform:translateX(calc(var(--flinchdir,1) * -5px)) rotate(calc(var(--flinchdir,1) * -4.2deg))}
  44.01%,72%{transform:translateX(calc(var(--flinchdir,1) * -1.6px)) rotate(calc(var(--flinchdir,1) * -1.2deg))}
  72.01%,100%{transform:none}
}
.rb-unit.fx-flinch .rb-breath{animation:uHitTorso .56s steps(1,end) 1 both}
@keyframes uHitHead{
  0%,28%{transform:none}
  28.01%,56%{transform:rotate(calc(var(--flinchdir,1) * -8deg)) translateX(calc(var(--flinchdir,1) * -1.4px))}
  56.01%,100%{transform:rotate(calc(var(--flinchdir,1) * 2deg))}
}
.rb-unit.fx-flinch .fig-head-g{animation:uHitHead .62s steps(1,end) 1 both}
.rb-unit.fx-flinch .u-arm-f,.rb-unit.fx-flinch .u-arm-b{animation:uHitArms .5s steps(1,end) 1 both}
@keyframes uHitArms{0%,20%{transform:none}20.01%,100%{transform:rotate(calc(var(--flinchdir,1) * -6deg))}}
.rb-unit.fx-flinch .rb-weapon{animation:uHitWeapon .62s steps(1,end) 1 both}
@keyframes uHitWeapon{0%,18%{transform:none}18.01%,62%{transform:rotate(8deg) translateY(-2px)}62.01%,100%{transform:rotate(-2deg)}}
.rb-unit-pla.fx-flinch .rb-breath,.rb-unit-pla.fx-flinch .fig-head-g,
.rb-unit-pla.fx-flinch .rb-weapon,.rb-unit-pla.fx-flinch .u-arm-f,
.rb-unit-pla.fx-flinch .u-arm-b{animation-delay:.32s}

/* —— death：3 帧（顿→跪→倒），容器整体下沉 —— */
.rb-unit.fx-dead{animation:uDieBox .62s steps(1,end) 1 forwards}
@keyframes uDieBox{
  0%{opacity:1;transform:translate(-50%,-86%) scale(1)}
  30%{opacity:1;transform:translate(-50%,-81%) scale(.98)}
  70%{opacity:.92;transform:translate(-50%,-74%) scale(.94)}
  100%{opacity:.6;transform:translate(-50%,-69%) scale(.9)}
}
.rb-unit.fx-dead .u-hero,.rb-unit.fx-dead .u-beast{animation:uDiePose .62s steps(1,end) 1 forwards}
@keyframes uDiePose{
  0%,30%{transform:translateY(0) rotate(0deg)}
  30.01%,70%{transform:translateY(9px) rotate(-36deg)}
  70.01%,100%{transform:translateY(20px) rotate(-74deg)}
}

/* —— 阶位光环（t4）静态兜底 —— */
.rb-unit.fx-hitstop .rb-breath{animation:uJoltStep .16s steps(2,end) 1}
@keyframes uJoltStep{50%{transform:translateX(-2.5px) scaleY(.985)}}

/* —— lite：整只立绘的所有逐帧动画停下，保留静态姿态；倒地用静态变换兜底 —— */
body[data-pw-scene-fx="lite"] .rb-fig *{animation:none!important}
body[data-pw-scene-fx="lite"] .rb-unit.fx-dead{animation:none!important;opacity:.62}
body[data-pw-scene-fx="lite"] .rb-unit.fx-dead .rb-fig{transform:translateY(20px) rotate(-74deg)}

/* ===== v12 技能特效库：程序化法阵（元素 × 类型 × 稀有度 × 招式签名）
   容器只加 class，颜色/旋转/层数全由 CSS 变量与 keyframes 驱动；无内联 style。 ===== */
.rb-fx-layer .rb-sigil{position:absolute;width:160px;height:160px;transform:translate(-50%,-50%);
  pointer-events:none;z-index:2;opacity:0;animation:sxWrap 1.08s ease-out forwards;will-change:transform,opacity}
.rb-sigil .sx-svg{display:block;width:100%;height:100%;overflow:visible;transform-origin:50% 50%;opacity:var(--sxOp,.86)}
/* 五行配色（与战报/轨迹同一套语义色） */
.rb-sigil.el-metal{--sxA:#e8f0ff;--sxB:#a8c2e6;--sxC:rgba(174,202,240,.16)}
.rb-sigil.el-wood{--sxA:#b9e8a8;--sxB:#7fc47a;--sxC:rgba(110,190,110,.15)}
.rb-sigil.el-earth{--sxA:#f0d29a;--sxB:#c69c5c;--sxC:rgba(198,150,80,.16)}
.rb-sigil.el-water{--sxA:#bfe9ff;--sxB:#7ec2ea;--sxC:rgba(100,180,230,.16)}
.rb-sigil.el-fire{--sxA:#ffc98f;--sxB:#ff8a4e;--sxC:rgba(255,130,60,.17)}
.rb-sigil.el-none{--sxA:#f2e2b4;--sxB:#cbb17a;--sxC:rgba(210,180,120,.15)}
/* 稀有度：层数(rings/shards 由 JS 生成)+亮度/线宽递进，epic 起加旋转弧纹，legend 加冠饰与射线 */
.rb-sigil.rar-common{--sxOp:.9}
.rb-sigil.rar-rare{--sxOp:.94}
.rb-sigil.rar-epic{--sxOp:.98}
.rb-sigil.rar-legend,.rb-sigil.rar-legendary{--sxOp:1}
.rb-sigil.v0{--sxSpin:78deg}.rb-sigil.v1{--sxSpin:-118deg}.rb-sigil.v2{--sxSpin:152deg}
.rb-sigil.v3{--sxSpin:-64deg}.rb-sigil.v4{--sxSpin:196deg}.rb-sigil.v5{--sxSpin:-210deg}
/* 暗底：把法阵从角色/地形上"托"出来，比 filter 便宜 */
.rb-sigil .sx-halo{fill:#04080b;opacity:0;transform-box:view-box;transform-origin:80px 80px;
  animation:sxHalo 1s ease-out forwards}
/* 环 */
.rb-sigil .sx-ring{fill:none;stroke:var(--sxA);stroke-width:1.3;opacity:.7;
  transform-box:view-box;transform-origin:80px 80px;animation:sxRing 1s ease-out forwards}
.rb-sigil .sx-ring.r0{stroke-width:2.1}
.rb-sigil .sx-ring.r1{stroke:var(--sxB);stroke-dasharray:7 7;animation-delay:.05s}
.rb-sigil .sx-ring.r2{stroke-dasharray:2 9;opacity:.4;animation-delay:.1s}
.rb-sigil .sx-ring.r3{stroke-dasharray:13 9;opacity:.32;animation-delay:.16s}
/* 轨道：碎片 + 符文；每个招式从不同角度切入 */
.rb-sigil .sx-orbit{transform-box:view-box;transform-origin:80px 80px;
  animation:sxOrbit 1s cubic-bezier(.2,.7,.3,1) forwards}
.rb-sigil .sx-shard{fill:var(--sxB);opacity:0;transform-box:view-box;transform-origin:80px 80px;
  animation:sxShard .9s ease-out forwards}
.rb-sigil .sx-shard:nth-child(2){animation-delay:.03s}.rb-sigil .sx-shard:nth-child(3){animation-delay:.06s}
.rb-sigil .sx-shard:nth-child(4){animation-delay:.09s}.rb-sigil .sx-shard:nth-child(5){animation-delay:.12s}
.rb-sigil .sx-shard:nth-child(6){animation-delay:.15s}.rb-sigil .sx-shard:nth-child(7){animation-delay:.18s}
.rb-sigil .sx-shard:nth-child(8){animation-delay:.21s}.rb-sigil .sx-shard:nth-child(9){animation-delay:.24s}
.rb-sigil .sx-shard:nth-child(10){animation-delay:.27s}.rb-sigil .sx-shard:nth-child(11){animation-delay:.3s}
.rb-sigil .sx-shard:nth-child(12){animation-delay:.33s}
/* 深色衬边：在杂乱地形上把符文压出轮廓，不依赖 filter，成本低 */
.rb-sigil .sx-under{fill:none;stroke:#05080a;stroke-width:5;stroke-linejoin:round;opacity:.62;
  transform-box:view-box;transform-origin:80px 80px;animation:sxRune .95s ease-out forwards}
.rb-sigil .sx-rune{fill:none;stroke:var(--sxA);stroke-width:2.2;stroke-linejoin:round;
  transform-box:view-box;transform-origin:80px 80px;animation:sxRune .95s ease-out forwards}
.rb-sigil .sx-rune2{stroke:var(--sxB);stroke-width:1.1;opacity:0;
  animation:sxRune2 1s ease-out .1s forwards}
.rb-sigil .sx-seal-bg{fill:rgba(4,8,11,.8);stroke:var(--sxB);stroke-width:1;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxSeal .9s ease-out forwards}
.rb-sigil .sx-seal{fill:var(--sxA);font:700 21px/1 "STKaiti","KaiTi","STSong","Songti SC",serif;
  text-anchor:middle;dominant-baseline:middle;letter-spacing:0;opacity:.98;
  animation:sxSeal .9s ease-out .04s forwards}
.rb-sigil .sx-pip{fill:var(--sxA);opacity:0;transform-box:view-box;transform-origin:80px 118.5px;
  animation:sxPip .75s ease-out .12s forwards}
/* 类型骨架 */
.rb-sigil .sx-slash{fill:none;stroke:var(--sxA);stroke-width:2.6;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxSlash .56s ease-out .16s forwards}
.rb-sigil .sx-slash.s2{stroke:var(--sxB);stroke-width:1.2;animation-delay:.24s}
.rb-sigil .sx-plate{fill:var(--sxC);stroke:var(--sxA);stroke-width:1.4;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxPlate 1s ease-out .1s forwards}
.rb-sigil .sx-plate-line{fill:none;stroke:var(--sxB);stroke-width:1;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxPlate .9s ease-out .2s forwards}
.rb-sigil .sx-rise{fill:none;stroke:var(--sxA);stroke-width:1.2;opacity:0;
  transform-box:view-box;transform-origin:80px 101px;animation:sxRise 1s ease-out forwards}
.rb-sigil .sx-rise.e2{stroke:var(--sxB);animation-delay:.12s}
.rb-sigil .sx-streak{fill:none;stroke:var(--sxB);stroke-width:2;opacity:0;
  transform-box:view-box;transform-origin:30px 82px;animation:sxStreak .7s ease-out forwards}
.rb-sigil .sx-streak.st2{animation-delay:.08s}.rb-sigil .sx-streak.st3{animation-delay:.16s}
/* 稀有度装饰 */
.rb-sigil .sx-arcglyph{fill:none;stroke:var(--sxB);stroke-width:1;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxArc .95s ease-out forwards}
.rb-sigil .sx-crown{fill:var(--sxA);opacity:0;transform-box:view-box;transform-origin:80px 80px;
  animation:sxCrown .9s ease-out forwards}
.rb-sigil .sx-ray{stroke:var(--sxB);stroke-width:1;opacity:0;
  transform-box:view-box;transform-origin:80px 80px;animation:sxRay .9s ease-out forwards}
/* 命中/落空/施法相位 */
.rb-sigil.impact .sx-svg{animation:sxImpact .62s cubic-bezier(.16,.8,.3,1) forwards}
.rb-sigil.whiff .sx-svg{animation:sxWhiff .6s ease-out forwards}
.rb-sigil.cast .sx-svg{animation:sxCast .7s ease-out forwards}
.rb-sigil.fade{animation-duration:.82s}
@keyframes sxWrap{0%{opacity:0}10%{opacity:1}72%{opacity:1}100%{opacity:0}}
@keyframes sxHalo{0%{opacity:0}32%{opacity:.16}100%{opacity:.05}}
@keyframes sxRing{0%{transform:scale(.5);opacity:0}30%{opacity:.9}100%{transform:scale(1.2);opacity:0}}
@keyframes sxOrbit{0%{transform:rotate(var(--sxSpin,90deg)) scale(.5);opacity:0}
  30%{opacity:1}100%{transform:rotate(0deg) scale(1.03);opacity:1}}
@keyframes sxShard{0%{opacity:0;transform:scale(.35)}30%{opacity:1}100%{opacity:0;transform:scale(1.45)}}
@keyframes sxRune{0%{opacity:0;transform:scale(.4) rotate(-18deg)}40%{opacity:1}
  100%{opacity:.38;transform:scale(1) rotate(0deg)}}
@keyframes sxRune2{0%{opacity:0;transform:scale(.55) rotate(20deg)}50%{opacity:.62}
  100%{opacity:0;transform:scale(.8) rotate(-40deg)}}
@keyframes sxSeal{0%{opacity:0;transform:scale(.6)}40%{opacity:1}100%{opacity:.9;transform:scale(1)}}
@keyframes sxPip{0%{opacity:0;transform:scale(.3)}40%{opacity:1;transform:scale(1)}100%{opacity:.85;transform:scale(1)}}
@keyframes sxSlash{0%{opacity:0;transform:scale(.6)}35%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(1.16)}}
@keyframes sxPlate{0%{opacity:0;transform:scale(.7)}35%{opacity:.9;transform:scale(1)}
  100%{opacity:.16;transform:scale(1.06)}}
@keyframes sxRise{0%{opacity:0;transform:translateY(8px) scale(.82)}40%{opacity:1}
  100%{opacity:0;transform:translateY(-14px) scale(1.1)}}
@keyframes sxStreak{0%{opacity:0;transform:translateX(10px) scaleX(.4)}35%{opacity:1}
  100%{opacity:0;transform:translateX(-16px) scaleX(1.2)}}
@keyframes sxArc{0%{opacity:0;transform:scale(.7)}35%{opacity:.85;transform:scale(1)}
  100%{opacity:0;transform:scale(1.1)}}
@keyframes sxCrown{0%{opacity:0;transform:scale(.4)}30%{opacity:1;transform:scale(1)}
  100%{opacity:.2;transform:scale(1.2)}}
@keyframes sxRay{0%{opacity:0;transform:scale(.6)}30%{opacity:.36;transform:scale(1)}
  100%{opacity:0;transform:scale(1.15)}}
@keyframes sxImpact{0%{transform:scale(.45);opacity:1}40%{transform:scale(1.12);opacity:1}
  100%{transform:scale(1.34);opacity:0}}
@keyframes sxWhiff{0%{transform:scale(1);opacity:1}100%{transform:scale(1.5) translateY(-6px);opacity:0}}
@keyframes sxCast{0%{transform:scale(.55);opacity:0}35%{transform:scale(1);opacity:1}
  100%{transform:scale(1.08);opacity:.9}}
/* 小屏缩一档，锚点仍居中；lite / 减少动态：整体不挂 */
@media (max-width:767.98px){.rb-fx-layer .rb-sigil{width:132px;height:132px}}
@media (max-width:480px){.rb-fx-layer .rb-sigil{width:112px;height:112px}}
body[data-pw-scene-fx="lite"] .rb-sigil{display:none!important}
@media (prefers-reduced-motion:reduce){.rb-fx-layer .rb-sigil{display:none!important}}

/* ============================================================
 * v13–v16 战斗导演层
 * 意图节奏 / 镜头语言 / 结算明细 / 操作可达性
 * 零位图、零内联样式；动画全走 CSS 类或 WAAPI
 * ============================================================ */

/* v14：外层相机（与 rb-zoom 的震屏分层） */
.rb-cam{position:absolute;inset:0;transform-origin:51% 60%;will-change:transform}
.rb-cine{position:absolute;left:0;right:0;height:0;z-index:9;pointer-events:none;opacity:0;
  background:linear-gradient(180deg,#040302,#0a0805);
  transition:height .34s cubic-bezier(.2,.7,.3,1),opacity .34s ease}
.rb-cine.t{top:0;border-bottom:1px solid rgba(201,169,97,.18)}
.rb-cine.b{bottom:0;border-top:1px solid rgba(201,169,97,.18)}
.rb-bf-stage.cine-on .rb-cine{height:18px;opacity:.94}
.rb-vig{position:absolute;inset:0;z-index:7;pointer-events:none;opacity:0;
  background:radial-gradient(ellipse at 50% 50%,transparent 50%,rgba(3,2,1,.62) 100%);
  transition:opacity .4s ease}
.rb-vig.on{opacity:1}

/* v13：AI 意图条（插在副栏首行，占满一行） */
.rb-ai{flex:1 1 100%;display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  padding:3px 6px;border-left:2px solid rgba(201,169,97,.55);
  background:rgba(0,0,0,.24);font:700 10px/1.3 "Noto Serif SC",serif;color:var(--weak)}
.rb-ai.heavy{border-left-color:rgba(232,132,62,.95);background:rgba(232,132,62,.10)}
.rb-ai-k{font:900 9px/1 "JetBrains Mono",monospace;letter-spacing:1px;color:var(--gold2);
  border:1px solid rgba(201,169,97,.45);padding:2px 4px}
.rb-ai-t{color:var(--paper);letter-spacing:1px}
.rb-ai.heavy .rb-ai-t{color:#ff9a4d}
.rb-ai-mul{color:#ffb070;font-weight:900}
.rb-ai-threat{color:var(--weak);border:1px solid var(--line);padding:1px 5px;white-space:nowrap}
.rb-ai.heavy .rb-ai-threat{color:#ff9a4d;border-color:rgba(232,132,62,.6)}
.rb-ai-rhythm{display:inline-flex;align-items:center;gap:3px;margin-left:auto}
.rb-ai-rhythm em{font-style:normal;color:var(--weak);font-size:9px;letter-spacing:1px}
.rb-ai-pip{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;
  border:1px solid var(--line);background:rgba(0,0,0,.35);font-style:normal;font-size:9px;color:var(--weak)}
.rb-ai-pip.heavy{color:#ff9a4d;border-color:rgba(232,132,62,.65);background:rgba(232,132,62,.16)}
.rb-ai-pip.cur{border-color:var(--gold2);box-shadow:0 0 8px rgba(201,169,97,.55);color:var(--gold2)}
.rb-ai-pip.cur.heavy{color:#ffb070;border-color:#ff9a4d;box-shadow:0 0 10px rgba(255,120,50,.7)}
.rb-ai-status{display:none;color:#ffb070;font-weight:700}
.rb-ai-status.on{display:inline}
/* AI 决策前摇：只动 fig，不覆盖 tell/heavy 的整套姿态 */
.rb-unit.ai-read .rb-fig{animation:rbAiRead .26s ease-in-out 1}
.rb-unit.ai-read-heavy .rb-fig{animation:rbAiReadHeavy .46s cubic-bezier(.3,.7,.3,1) 1}
@keyframes rbAiRead{0%,100%{transform:none}50%{transform:translateY(-3px)}}
@keyframes rbAiReadHeavy{
  0%,100%{transform:none}
  30%{transform:translate(-4px,2px) scale(1.03,.97)}
  62%{transform:translate(-2px,-2px) scale(.99,1.02)}
}

/* v15：结算明细（绝对覆盖，不挤压车机网格） */
.rb-info-btn{margin-left:auto;flex:0 0 auto;border:1px solid var(--line);
  background:rgba(201,169,97,.08);color:var(--gold2);
  font:700 10px/1 "Noto Serif SC",serif;letter-spacing:1px;padding:4px 8px;border-radius:2px}
.rb-info-btn:hover{background:rgba(201,169,97,.18)}
.rb-info-btn[aria-expanded="true"]{color:#1a1206;background:var(--gold2);border-color:var(--gold2)}
.rb-detail{position:absolute;left:10px;right:10px;top:52px;z-index:26;
  max-height:calc(100% - 136px);overflow:auto;padding:10px 12px;
  border:1px solid rgba(201,169,97,.6);
  background:linear-gradient(180deg,rgba(18,14,9,.98),rgba(9,7,4,.98));
  box-shadow:0 16px 44px rgba(0,0,0,.7);
  font:400 11px/1.55 "Noto Serif SC",serif;color:var(--paper)}
.rb-detail[hidden]{display:none}
.rb-dt-h{display:flex;align-items:center;gap:8px;margin:4px 0 5px;
  font:900 12px/1 "Noto Serif SC",serif;color:var(--gold2);letter-spacing:2px}
.rb-dt-h i{flex:1;height:1px;background:linear-gradient(90deg,rgba(201,169,97,.5),transparent)}
.rb-dt-x{border:1px solid var(--line);background:transparent;color:var(--weak);
  width:22px;height:22px;line-height:1;font-size:14px;border-radius:2px}
.rb-dt-x:hover{color:var(--gold2);border-color:var(--gold2)}
.rb-dt-grid{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;margin-bottom:8px}
.rb-dt-grid span{color:var(--weak)}
.rb-dt-grid b{font-family:"JetBrains Mono",monospace;color:var(--paper);font-weight:700;text-align:right}
.rb-dt-grid b.na{color:#c98a6a;font-family:"Noto Serif SC",serif;font-weight:400}
.rb-dt-note{font-size:10px;color:var(--weak);border-left:2px solid rgba(232,132,62,.55);padding:3px 0 3px 7px}
.rb-dt-empty{color:var(--weak);padding:2px 0 6px}

/* v16：可见快捷键提示 + 焦点环 + 触控尺寸 */
.rb-keys{flex:1 1 100%;text-align:center;font:400 9px/1.2 "JetBrains Mono",monospace;
  letter-spacing:.5px;color:rgba(138,127,106,.8);padding-top:2px}
.rb-skill:focus-visible,.rb-tactic:focus-visible,.rb-flee:focus-visible,
.rb-info-btn:focus-visible,.rb-dt-x:focus-visible{
  outline:2px solid var(--gold2);outline-offset:2px}
@media (max-width:767.98px){
  .rb-bf .rb-skill{min-height:52px}
  .rb-tactic,.rb-flee{min-height:44px;min-width:44px}
  .rb-info-btn{min-height:32px}
  .rb-keys{display:none}
  .rb-detail{left:6px;right:6px;top:46px;max-height:calc(100% - 132px);font-size:12px}
}
@media (max-height:620px) and (min-width:700px){
  .rb-ai-rhythm{display:none}
  .rb-ai{padding:2px 5px}
  .rb-keys{display:none}
  .rb-detail{top:40px;max-height:calc(100% - 150px)}
}
/* lite / 降低动态：关掉镜头、暗角、电影条和前摇，但意图/明细/快捷键仍保留 */
body[data-pw-scene-fx="lite"] .rb-cine,
body[data-pw-scene-fx="lite"] .rb-vig{display:none!important}
body[data-pw-scene-fx="lite"] .rb-unit.ai-read .rb-fig,
body[data-pw-scene-fx="lite"] .rb-unit.ai-read-heavy .rb-fig{animation:none!important}
@media (prefers-reduced-motion:reduce){
  .rb-cine,.rb-vig{display:none!important}
  .rb-unit.ai-read .rb-fig,.rb-unit.ai-read-heavy .rb-fig{animation:none!important}
}

/* 亮色主题 */
html.pw-light .rb-ai,body.pw-light .rb-ai{background:rgba(255,253,248,.7);color:#6a5636;
  border-left-color:rgba(154,119,47,.6)}
html.pw-light .rb-ai.heavy,body.pw-light .rb-ai.heavy{background:rgba(232,132,62,.10);color:#7a4a1c}
html.pw-light .rb-ai-t{color:#3a2e1c}
html.pw-light .rb-ai.heavy .rb-ai-t{color:#a8441a}
html.pw-light .rb-ai-threat{color:#6a5636;border-color:rgba(154,119,47,.4)}
html.pw-light .rb-ai-pip{background:rgba(255,253,248,.7);color:#7c6a4a}
html.pw-light .rb-ai-pip.heavy{color:#a8441a;background:rgba(232,132,62,.16);border-color:rgba(168,68,26,.55)}
html.pw-light .rb-ai-pip.cur{color:#8a6520;border-color:#b08a3c}
html.pw-light .rb-ai-status{color:#a8441a}
html.pw-light .rb-detail,body.pw-light .rb-detail{
  background:linear-gradient(180deg,#fffdf7,#f1e9d6);
  border-color:rgba(154,119,47,.62);color:#2c2418}
html.pw-light .rb-dt-grid b{color:#241d12}
html.pw-light .rb-dt-grid b.na{color:#a05a34}
html.pw-light .rb-dt-grid span{color:#6a5636}
html.pw-light .rb-info-btn{color:#7c5f22;border-color:rgba(154,119,47,.5);background:rgba(154,119,47,.08)}
html.pw-light .rb-info-btn[aria-expanded="true"]{color:#1a1206;background:#d8b46a;border-color:#b08a3c}

/* ============================================================
 * v17 · 极短视口（车机 WebView 实测 CSS 高 76 / 136px）
 * 触发阈值 320px：高于实测最高车机视口 136px 一倍余量，
 * 低于常规律视口最低值 480px 留 160px 安全区。
 * 目标：页头单行；页头内元素两两不重叠；导航折叠进 ☰ 菜单。
 * ============================================================ */
.pw-nav-menu{display:none}

@media (max-height:320px){
  /* 页头压到单行 36px；此前 56px 页头 + 底部 60px Tab 在 76px 视口内重叠 35.9px */
  html body .topbar{height:36px!important;min-height:36px;overflow:hidden}
  html body .topbar .brand{padding:0 4px;min-width:0}
  html body .topbar .brand-zh{display:none!important}
  html body .topbar .pw-back-home{width:28px!important;height:28px!important;min-height:28px!important;padding:0!important;font-size:15px}
  html body .topbar .pw-twin-nav{display:none!important}      /* twin 药丸占宽且与 logo 抢位 */
  html body .topbar .topbar-nav{display:none!important}        /* 折叠进 ☰ */
  html body .topbar .pw-nav-menu{
    display:inline-flex;align-items:center;justify-content:center;
    flex:0 0 auto;width:30px;height:30px;margin:0 3px 0 0;
    border:1px solid var(--line);color:var(--gold2);
    background:rgba(201,169,97,.08);font:400 17px/1 "Noto Serif SC",serif
  }
  html body .topbar .pw-nav-menu[aria-expanded="true"]{background:var(--gold2);border-color:var(--gold2);color:#1a1206}
  /* gap 2px：相邻按钮留出整数间隙，避免分数坐标下包围盒 0.01px 级贴边相交 */
  html body .topbar .top-actions{padding:0 4px 0 2px;gap:2px}
  html body .topbar .top-tools{gap:2px}
  html body .topbar .top-tools .iconbtn{width:30px;height:30px;font-size:14px}
  html body .topbar .top-auth{padding:0 2px;gap:3px}
  html body .topbar .top-auth .pw-auth-btn{height:22px;padding:0 7px;font-size:10.5px;letter-spacing:0}
  html body .topbar .top-user{padding:0 3px;gap:4px}
  html body .topbar .top-user .user-avatar{width:22px;height:22px;font-size:10px;border-width:1px}
  html body .topbar .top-user .user-info{display:none!important}
  html body .topbar .top-user .user-lv{margin:0;font-size:12px}

  /* 导航面板：贴页头下沿（y=36 起），单行横向可滚；与页头交集恒为 0 */
  html body .topbar .topbar-nav.open{
    display:flex!important;position:fixed;top:36px;left:0;right:0;
    height:auto;max-height:calc(100vh - 36px);
    flex-wrap:nowrap;align-items:flex-start;gap:2px;padding:2px 4px;
    overflow-x:auto;overflow-y:hidden;
    background:rgba(var(--ink-rgb),.985);border-top:1px solid var(--line);
    box-shadow:0 10px 26px rgba(0,0,0,.6);z-index:70;scrollbar-width:none
  }
  html body .topbar .topbar-nav.open::-webkit-scrollbar{display:none}
  html body .topbar .topbar-nav.open .tab{
    flex:0 0 auto;min-width:52px;height:34px;
    flex-direction:column;justify-content:center;gap:1px;padding:0 6px;
    border:1px solid rgba(201,169,97,.16);background:rgba(201,169,97,.05);
    font-size:10px
  }
  html body .topbar .topbar-nav.open .tab .ic{font-size:15px}
  html body .topbar .topbar-nav.open .tab > span:not(.ic){display:inline!important}
  html body .topbar .topbar-nav.open .tab.hidden{display:none!important}

  /* 底部 Tab 固定 60px，在 76px 视口会顶进页头，收起；导航由 ☰ 承担 */
  html body .tabbar{display:none!important}

  /* 依赖 56px 页头的浮层同步上移，避免压住页头 */
  html body #view{top:36px;min-height:calc(100vh - 36px);min-height:calc(100dvh - 36px)}
  html body .rumor-bar{top:42px;height:20px}
  html body .rumor-bar .rumor-label{padding:2px 5px;font-size:10px}
  html body .pw-search-pop,
  html body.pw-season-on .pw-search-pop{top:42px;max-height:calc(100vh - 46px);overflow:auto}
  html body .hero-card{display:none!important}  /* 340px 宽等级卡在 76px 高会覆盖整页 */

  /* 浮动控件避让：FAB / 启程坞 / 附近骑友 与页头、彼此之间互不重叠 */
  html body #fab{
    width:44px!important;height:44px!important;right:10px!important;bottom:10px!important;font-size:22px
  }
  html body #pwDock{
    left:8px!important;right:auto!important;bottom:8px!important;
    max-width:min(52vw,240px)!important;padding:4px 6px!important;gap:4px!important
  }
  html body .nearby-pill{
    top:auto!important;bottom:62px!important;right:8px!important;
    height:22px!important;padding:0 8px!important;font-size:10px!important
  }
}

/* 车机条屏（800×156 一类）模式控件定位补丁：原 top:4px 会被前文移动端块 top:100px 覆盖而整块出屏；
   在文件末尾重申（同等特异性、后声明生效），并落在横带右侧空白槽 x>滚动区右缘，不压卡片 */
@media (max-height:200px){
  .pw-mode-ctrl{top:64px;right:56px}
}

/* ============================================================
 * v34 · 触控目标 ≥44×44（WCAG 2.5.5 / 2.5.8）
 * 只改热区盒模型与位置，不放大图标字形；地图节点仅向上扩 4px，视觉零位移。
 * 作用域 min-height:600px：390×844 手机与 1440 桌面；
 * 800×480 / 800×156 车机横带沿用既有紧凑版式（物理高度不足以承载 44px 控件）。
 * ============================================================ */
@media (min-height:600px){
  /* 节点标记：覆盖 Leaflet 内联 height:40 / margin-top:-20；padding-top 抵消视觉位移 */
  .pw-node{height:44px!important;margin-top:-24px!important;padding-top:4px!important}

  /* 地图筛选 chip 26→44；整行下移 14px，给下方控件让位 */
  .filter-bar{top:52px}
  .fchip{height:44px;padding:0 12px;display:inline-flex;align-items:center}

  /* 附近车友：高度 30/26→44，贴 62 上沿向下扩，与筛选条留 2px */
  .nearby-pill{height:44px;padding:0 12px}

  /* 路线坞：桌面 52→60、手机 44→56，内容宽恰好 44；项高 44 */
  .route-dock{width:60px}
  .route-dock .rd-item{min-height:44px}

  /* 收藏星：盒 44×44，字形中心仍为 (right-23, top+23)，视觉不位移 */
  .fav-star{width:44px;height:44px;top:1px;right:1px;padding:0;display:grid;place-items:center}

  /* 缩放三键 36→44；间距 6→2（相邻盒留 2px 空隙，不重叠） */
  .zoom-btn{width:44px;height:44px}
  .zoom-ctrl{gap:2px}

  /* 启程/收功 26.8→44（constructable stylesheet 内 .pw-btn 需更高特异性） */
  #pwDock .pw-btn{min-height:44px;padding:10px 12px}
}
@media (min-height:600px) and (max-width:900px){
  /* 筛选条 110-154：路线坞下移 10px 到 158；mode 控件 156 起，互不重叠 */
  .route-dock{width:56px;top:102px}
  .nearby-pill{font-size:11px;padding:0 8px}
}

/* UI-03：移动端触控目标 ≥24px（审计报 13 处 <24px） */
@media (max-width:767.98px){
  .lg-item{min-height:44px;display:flex;align-items:center;gap:10px}
  .lg-item input{width:20px;height:20px;flex:0 0 auto}
  .mini-btn{min-height:24px;display:inline-flex;align-items:center}
  .msg-badge{min-width:18px;height:18px;line-height:18px}
}
/* 地图兴趣点（Leaflet marker 20×20）：加 24px 透明命中区，图标视觉零位移 */
.pw-poi{overflow:visible}
.pw-poi::after{content:'';position:absolute;left:50%;top:50%;width:24px;height:24px;transform:translate(-50%,-50%);border-radius:50%;background:transparent}
/* 短视口（高度<600）下附近车友 chip 也保证 ≥24px */
.nearby-pill{min-height:24px}
