/* 逆旅客户端 · 阶段一 UI —— 古风暗色，背景图半透 */
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
body {
  font-family: "Noto Serif SC", "Source Han Serif SC", "SimSun", serif;
  color: #e8e2d5;
  background: #0d1018 url(bg.png?v=029322a93b) center/cover fixed no-repeat;
  overflow: hidden;
}
body::before {
  content: ""; position: fixed; inset: 0; z-index: 0;
  background: linear-gradient(160deg, rgba(10,13,22,.36), rgba(16,14,26,.30));
  pointer-events: none;
}
#topbar, #layout { position: relative; z-index: 1; }

#topbar {
  height: 46px; display: flex; align-items: center; gap: 14px; padding: 0 16px;
  background: rgba(18,22,40,.52); border-bottom: 1px solid rgba(216,180,106,.35);
  backdrop-filter: blur(6px);
}
/* v4.70 天下危局小挂件：只占自身宽度、可拖动；同款行旅图面板金边半透明 */
#worldbar {
  position: fixed; top: 50px; left: 50%; transform: translateX(-50%); z-index: 45;
  width: auto; min-width: 300px; max-width: 400px;
  background: rgba(20,25,46,.62); border: 1px solid rgba(216,180,106,.45);
  border-radius: 12px; padding: 7px 12px 8px;
  box-shadow: 0 10px 34px rgba(0,0,0,.5); backdrop-filter: blur(7px);
  font-size: 11px; color: #b8aed6; user-select: none;
}
#worldbar .wb-head { display: flex; align-items: center; gap: 8px; cursor: grab; }
#worldbar .wb-head:active { cursor: grabbing; }
#worldbar .wb-title { color: #d8b46a; font-size: 12px; letter-spacing: 4px; font-weight: 700; }
#worldbar .wb-sp { flex: 1; }
#worldbar .wb-loss { color: #e8d9b0; font-size: 13px; letter-spacing: 1px; }
#worldbar .wb-caret { font-family: inherit; background: none; border: 1px solid rgba(216,180,106,.4);
  color: #d8b46a; width: 18px; height: 16px; line-height: 1; padding: 0; border-radius: 5px;
  font-size: 9px; cursor: pointer; transition: transform .25s, border-color .2s; }
#worldbar .wb-caret:hover { border-color: #e8d9b0; }
#worldbar.open .wb-caret { transform: rotate(180deg); }
#worldbar .wb-compact { margin-top: 7px; }
#worldbar .wb-track { position: relative; height: 6px; border-radius: 3px;
  background: rgba(8,10,20,.6); box-shadow: inset 0 1px 2px rgba(0,0,0,.5); }
#worldbar .wb-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 0; border-radius: 3px;
  transition: width .5s, background .5s; box-shadow: 0 0 8px rgba(216,180,106,.35); }
#worldbar .wb-gates { position: absolute; inset: 0; pointer-events: none; }
#worldbar .wb-gates i { position: absolute; top: 50%; transform: translate(-50%, -50%);
  width: 17px; height: 17px; border-radius: 50%;
  background: #0c0f1d; border: 1.5px solid rgba(216,180,106,.4);
  color: #8d84ab; font-style: normal; font-size: 9.5px; line-height: 14px; text-align: center;
  box-shadow: 0 2px 6px rgba(0,0,0,.5); transition: all .3s;
  pointer-events: auto; cursor: help; }   /* v4.73 节点可悬停：各自弹本档描述（父层 pointer-events:none 不再吞掉） */
#worldbar .wb-gates i.cur { border-color: #e8d9b0; color: #e8d9b0; box-shadow: 0 0 10px rgba(232,217,176,.5); }
#worldbar .wb-gates i.on { background: linear-gradient(180deg, #e8cf8f, #c99b4a);
  border-color: #e8d9b0; color: #171205; box-shadow: 0 0 10px rgba(216,180,106,.8); }
#worldbar .wb-body { display: none; margin-top: 8px; border-top: 1px solid rgba(216,180,106,.3); padding-top: 7px; }
#worldbar.open .wb-body { display: block; }
#worldbar .wb-hint { color: #e8d9b0; font-size: 11px; line-height: 1.6; letter-spacing: .5px; margin-bottom: 6px; }
#worldbar .wb-hint b { color: #fff; font-weight: normal; }
#worldbar .wb-explain { color: #8d84ab; font-size: 10px; line-height: 1.7; margin-bottom: 7px; }
#worldbar .wb-rows { display: flex; flex-direction: column; gap: 6px; }
#worldbar .wb-row { display: flex; align-items: flex-start; gap: 8px; padding: 6px 7px;
  border: 1px solid rgba(216,180,106,.28); border-radius: 9px; background: rgba(14,18,34,.5); }
#worldbar .wb-row .wb-node { flex: none; width: 18px; height: 18px; border-radius: 50%;
  border: 1.5px solid rgba(216,180,106,.55); color: #d8b46a; font-size: 10px;
  display: flex; align-items: center; justify-content: center; margin-top: 1px; }
#worldbar .wb-row.passed .wb-node { background: linear-gradient(180deg, #e8cf8f, #c99b4a); color: #171205; }
#worldbar .wb-row .wb-info { flex: 1; min-width: 0; }
#worldbar .wb-row .wb-r1 { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
#worldbar .wb-row .wb-name { color: #ece7f5; font-size: 11.5px; letter-spacing: 1px; }
#worldbar .wb-row .wb-at { color: #8d84ab; font-size: 10px; }
#worldbar .wb-row .wb-story { color: #b8aed6; font-size: 10px; line-height: 1.65; margin-top: 3px; }
#worldbar .wb-row .wb-status { color: #c5bcdf; font-size: 10px; line-height: 1.55; margin-top: 3px; }
#worldbar .wb-row .wb-status .ok { color: #9fd3a8; }
#worldbar .wb-row .wb-status .gap { color: #e8b45a; }
#worldbar .wb-row .wb-status .dim { color: #8d84ab; }
#worldbar .wb-row.done .wb-node, #worldbar .wb-row.done .wb-name { color: #5aa86a; border-color: #5aa86a; }
.brand { font-size: 20px; letter-spacing: 8px; color: #d8b46a; }
.brand span { color: #ece7f5; }
#tokenbar { font-size: 11.5px; color: #8d84ab; letter-spacing: .5px; }
#tokenbar b { color: #9fd3a8; font-weight: normal; }
.spacer { flex: 1; }
.tbtn {
  font-family: inherit; font-size: 12px; cursor: pointer; color: #b8aed6;
  background: rgba(125,106,168,.14); border: 1px solid rgba(125,106,168,.5);
  border-radius: 7px; padding: 4px 12px; transition: all .2s;
}
.tbtn:hover { border-color: #d8b46a; color: #fff; }
.tbtn.on { color: #d8b46a; border-color: rgba(216,180,106,.6); }

#layout { display: flex; height: calc(100% - 46px - 36px); padding-bottom: 0; }   /* v1.1 底部让出账目栏高度 */

/* ---- 左栏 HUD（v0.6：DoL 式信息栏，全账分区折叠并入） ---- */
#hud {
  width: 320px; flex: 0 0 auto; overflow-y: auto; padding: 10px;
  display: flex; flex-direction: column; gap: 10px;
}
#hud-more { display: flex; flex-direction: column; gap: 10px; }
.hud-block {
  background: rgba(20,25,46,.32); border: 1px solid rgba(125,106,168,.4);
  border-radius: 10px; padding: 9px 11px; backdrop-filter: blur(5px);
}
.hud-title { font-size: 11px; letter-spacing: 3px; color: #d8b46a; margin-bottom: 6px; }
.fold-t { cursor: pointer; user-select: none; margin-bottom: 0; }
.fold-t:hover { color: #e8d9b0; }
.fold-b { margin-top: 6px; font-size: 11px; line-height: 1.75; }
.fold-b b { color: #ece7f5; font-weight: normal; }
.hud-lines { font-size: 12px; line-height: 1.9; color: #d5cfe2; }
.hud-lines .k { color: #8d84ab; margin-right: 6px; }
.hud-wear { font-size: 11.5px; line-height: 1.9; color: #d5cfe2; }
/* 气力三条（紧凑） */
.g-row { display: flex; align-items: center; gap: 7px; margin: 4px 0; }
.g-k { font-size: 10.5px; color: #8d84ab; flex: 0 0 26px; letter-spacing: 1px; }
.g-v { font-size: 10px; color: #8d84ab; flex: 0 0 34px; text-align: right; }

/* ---- 换装弹层 ---- */
#wear-pop {
  position: fixed; z-index: 80; min-width: 180px; max-width: 240px;
  background: rgba(20,25,46,.82); border: 1px solid rgba(216,180,106,.45);
  border-radius: 10px; padding: 6px; box-shadow: 0 10px 34px rgba(0,0,0,.6);
}
#wear-pop .wp-title { font-size: 11px; color: #8d84ab; padding: 3px 8px 5px; border-bottom: 1px solid rgba(125,106,168,.25); margin-bottom: 4px; }
#wear-pop .wp-opt { font-size: 12.5px; color: #ece7f5; padding: 6px 8px; border-radius: 7px; cursor: pointer; }
#wear-pop .wp-opt:hover { background: rgba(216,180,106,.14); color: #e8d9b0; }
#wear-pop .wp-opt.dim { color: #5a5a72; cursor: default; }
#wear-pop .wp-opt.dim:hover { background: none; color: #5a5a72; }

/* ---- 战斗栏 ---- */
/* ---- 战斗框（肢体三步出招） ---- */
#battlebar {
  margin: 0 26px 10px; margin-right: 372px; padding: 10px 14px;   /* v0.11 横向收窄：给右下行旅图让位，不被盖 */
  background: rgba(64,26,26,.42); border: 1px solid rgba(216,120,90,.5);
  border-radius: 12px; backdrop-filter: blur(6px);
}
.bb-head { display: flex; align-items: center; gap: 8px; font-size: 14px; color: #f0c9a8; margin-bottom: 8px; }
.bb-head .bb-ico { font-size: 16px; }
.bb-sub { font-size: 11px; color: #b89a8d; }
.bb-x { cursor: pointer; color: #b89a8d; padding: 0 4px; }
.bb-x:hover { color: #e88a5a; }
.bb-bars { display: flex; flex-direction: column; gap: 3px; margin-bottom: 8px; }
.bb-row { display: flex; align-items: center; gap: 8px; }
.bb-k { font-size: 10px; color: #b89a8d; width: 58px; flex: 0 0 auto; }
.bb-v { font-size: 10px; color: #b89a8d; width: 26px; text-align: right; flex: 0 0 auto; }
.bb-bar { flex: 1; height: 6px; background: rgba(0,0,0,.4); border-radius: 3px; overflow: hidden; }
.bb-fill { height: 100%; width: 0; border-radius: 3px; transition: width .4s; }
.bb-fill.fpain { background: linear-gradient(90deg, #c96a4a, #e88a5a); }
.bb-fill.fmor { background: linear-gradient(90deg, #c9a44a, #e8c85a); }
.bb-fill.mpain { background: linear-gradient(90deg, #8a4a6a, #b06a8a); }
.bb-fill.lust { background: linear-gradient(90deg, #c05c8c, #e88ab8); }
.bb-fill.rage { background: linear-gradient(90deg, #a8443c, #d86a5a); }
.bb-fill.trst { background: linear-gradient(90deg, #4a7a8c, #6ab8c8); }
.bb-head.love { color: #f0b8d8; }
.bb-go.love { background: linear-gradient(120deg, #c05c8c, #a04a78) !important; color: #fff0f8 !important; }
.bb-go.dim { opacity: .72; }
.sc-hint { color: rgba(216,180,106,.65); font-size: 12px; }
/* ---- v4.74 太吾式战场：地面横条 + 左右人形对峙，数值各归各侧 ---- */
.bb-field { display: flex; align-items: stretch; gap: 6px; margin: 4px 0 8px; }
.bb-side { flex: 0 0 108px; display: flex; flex-direction: column; justify-content: center; gap: 3px; min-height: 138px; }
.bb-side .bb-row { gap: 4px; }
.bb-side .bb-k { width: 30px; font-size: 10px; }
.bb-side .bb-v { width: auto; min-width: 20px; font-size: 10px; }
.bb-side .bb-row .bb-bar { flex: 1; }
.bb-shi-row .bb-k { line-height: 18px; }
.bb-shi { font-size: 11px; letter-spacing: 1px; display: flex; align-items: center; }
.bb-shi i { font-style: normal; color: #4a3c34; }
.bb-shi i.on { color: #e8b46a; text-shadow: 0 0 6px rgba(232,180,106,.75); }
.bb-flaw-line { display: flex; flex-wrap: wrap; gap: 3px; padding-left: 34px; margin: 1px 0; }
.bb-flaw-line i { font-style: normal; font-size: 9.5px; line-height: 14px; padding: 0 5px; border-radius: 6px; }
.bb-flaw-line.me i { color: #e88; background: rgba(160,60,60,.16); border: 1px solid rgba(200,90,70,.35); }
.bb-flaw-line.foe i { color: #e8c85a; background: rgba(180,140,50,.14); border: 1px solid rgba(220,170,70,.4); }
.bb-stagebox { position: relative; flex: 1 1 auto; min-width: 150px; height: 150px;
  background: radial-gradient(ellipse at 50% 112%, rgba(150,95,45,.20), transparent 58%), rgba(0,0,0,.14);
  border-radius: 10px; overflow: hidden; }
.bb-ground { position: absolute; left: 5%; right: 5%; bottom: 26px; height: 2px;
  background: linear-gradient(90deg, transparent, rgba(216,160,90,.5), rgba(216,120,90,.5), transparent); border-radius: 2px; }
.bb-ground::before, .bb-ground::after { content: ''; position: absolute; top: -3px; width: 7px; height: 7px; border-radius: 50%;
  background: rgba(216,160,90,.22); }
.bb-ground::before { left: 8%; }
.bb-ground::after { right: 8%; }
/* 人形（纯 UI 小人，不依赖图片） */
.bb-figwr { position: absolute; bottom: 22px; width: 96px; transform: translateX(-50%); text-align: center;
  transition: left .55s ease, right .55s ease; z-index: 2; }
.bb-figwr.me { --fc: #e0b878; --fc2: #bd8a48; }
.bb-figwr.foe { --fc: #d4694e; --fc2: #a23f30; }
.bb-field.love .bb-figwr.foe { --fc: #d77c9e; --fc2: #a64f74; }
.bb-fig { position: relative; width: 56px; height: 92px; margin: 0 auto;
  filter: drop-shadow(0 5px 7px rgba(0,0,0,.5)); transition: transform .4s ease; }
.bb-fh { position: absolute; left: 50%; top: 0; width: 17px; height: 17px; margin-left: -8.5px; border-radius: 50%;
  background: radial-gradient(circle at 35% 28%, rgba(255,240,220,.5), transparent 55%), var(--fc); }
.bb-fb { position: absolute; left: 50%; top: 17px; width: 26px; height: 49px; margin-left: -13px;
  border-radius: 13px 13px 10px 10px / 16px 16px 34px 34px;
  background: linear-gradient(180deg, var(--fc), var(--fc2)); }
.bb-fb::before, .bb-fb::after { content: ''; position: absolute; top: 2px; width: 6px; height: 26px; border-radius: 6px; background: var(--fc2); }
.bb-fb::before { left: -5px; transform: rotate(12deg); }
.bb-fb::after { right: -5px; transform: rotate(-12deg); }
.bb-leg { position: absolute; top: 66px; left: 50%; width: 7px; height: 26px; margin-left: -10px;
  border-radius: 0 0 5px 5px; background: var(--fc2); }
.bb-leg.r { margin-left: 2px; }
.bb-figwr.me .bb-fh { box-shadow: 0 0 10px rgba(232,180,120,.45); }
.bb-figwr.foe .bb-fh { box-shadow: 0 0 10px rgba(220,100,80,.4); }
.bb-field.love .bb-figwr.foe .bb-fh { box-shadow: 0 0 10px rgba(224,120,160,.45); }
.bb-figwr.me.hurt .bb-fb, .bb-figwr.me.hurt .bb-fh { animation: bb-hurtp 1.15s ease-in-out infinite; }
.bb-figwr.me.bad .bb-fb, .bb-figwr.me.bad .bb-fh { animation: bb-hurtp .5s ease-in-out infinite; }
@keyframes bb-hurtp { 0%, 100% { filter: none; } 50% { filter: brightness(1.4) saturate(1.35); } }
.bb-figwr.foe.down .bb-fig { transform: rotate(84deg); transform-origin: 50% 100%; }
.bb-fign { display: inline-block; margin-top: 3px; max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 11px; color: #d8c9b8; background: rgba(10,12,22,.42); border: 1px solid rgba(157,146,196,.25);
  border-radius: 7px; padding: 1px 6px; }
/* 中带：距离标尺 / 侵入链 / 攻位 */
.bb-gauge { position: absolute; top: 7px; left: 0; right: 0; display: flex; justify-content: center; align-items: center;
  font-size: 10px; color: #6e5c50; }
.bb-gauge i { width: 16px; height: 1px; background: rgba(216,160,90,.28); }
.bb-gauge span { padding: 1px 6px; border-radius: 7px; }
.bb-gauge span.on { color: #e8b46a; background: rgba(232,180,106,.13); box-shadow: 0 0 7px rgba(232,180,106,.4); }
.bb-mid { position: absolute; top: 6px; left: 0; right: 0; display: flex; justify-content: center; align-items: center;
  gap: 4px; font-size: 10.5px; color: #d8aec4; letter-spacing: 1px; }
.bb-mid span { padding: 1px 4px; border-radius: 6px; }
.bb-mid span.cur { color: #fff; background: rgba(224,120,170,.2); box-shadow: 0 0 8px rgba(224,120,170,.45); }
.bb-mid span.on { color: #e88ab8; }
.bb-mid .bb-sep { font-style: normal; color: #7d5a68; font-size: 10px; }
.bb-mid .bb-mid-ico { font-size: 13px; }
.bb-mid.love > span:not(.bb-mid-ico) { background: rgba(120,40,80,.25); border: 1px solid rgba(224,120,170,.3); }
.bb-lz { position: absolute; top: 25px; left: 0; right: 0; text-align: center; font-size: 10px;
  color: #c9a44a; letter-spacing: 2px; text-shadow: 0 0 6px rgba(201,164,74,.35); }
.bb-warn { font-size: 11px; color: #f0b070; background: rgba(160,80,40,.18);
  border: 1px dashed rgba(232,160,90,.55); border-radius: 7px; padding: 2px 9px; }
.bb-limbs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 6px; }
.bb-limb {
  font-family: inherit; font-size: 12px; cursor: pointer; color: #d8c9b8;
  background: rgba(90,45,35,.4); border: 1px solid rgba(216,120,90,.4);
  border-radius: 8px; padding: 5px 11px; transition: all .15s;
}
.bb-limb:hover { border-color: #e88a5a; }
.bb-limb.sel { background: rgba(180,70,45,.5); border-color: #e8a05a; color: #fff; }
.bb-limb.gripped { border-color: #c05c8c; color: #e8a0c0; }
.bb-limb.hurt { border-color: #c05050; color: #e88; }
.bb-tag { font-size: 10px; margin-left: 2px; }
.bb-menu { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; min-height: 30px; margin-bottom: 6px; }
.bb-dim { font-size: 11px; color: #8a7a70; }
.bb-skill, .bb-target {
  font-family: inherit; font-size: 12px; cursor: pointer;
  background: rgba(46,40,72,.55); border: 1px solid rgba(157,146,196,.45);
  border-radius: 8px; padding: 4px 10px; color: #d5cfe2; transition: all .15s;
}
.bb-skill:hover, .bb-target:hover { border-color: #d8b46a; color: #e8d9b0; }
.bb-skill.sel { background: rgba(216,180,106,.25); border-color: #d8b46a; color: #e8d9b0; }
.bb-arrow { color: #b89a8d; }
.bb-target { border-color: rgba(216,120,90,.45); }
.bb-acts { display: flex; gap: 8px; align-items: center; }
.bb-go {
  font-family: inherit; font-size: 13px; cursor: pointer; color: #1a1626;
  background: linear-gradient(120deg, #e8a05a, #c96a4a); border: none; border-radius: 9px; padding: 7px 20px;
}
.bb-go:disabled { opacity: .35; cursor: default; }
.bb-spec {
  font-family: inherit; font-size: 12px; cursor: pointer; color: #c9b8a8;
  background: none; border: 1px solid rgba(184,154,141,.4); border-radius: 8px; padding: 5px 10px;
}
.bb-spec:hover { border-color: #e88a5a; color: #f0c9a8; }
.bb-dove {
  font-family: inherit; font-size: 12px; cursor: pointer; color: #b8c9a8;
  background: none; border: 1px solid rgba(154,184,141,.4); border-radius: 8px; padding: 5px 10px;
}
.bb-dove:hover { border-color: #9fd3a8; }
.bb-log {
  margin-top: 8px; max-height: 96px; overflow-y: auto; font-size: 11px; color: #c9b09a;
  line-height: 1.7; border-top: 1px dashed rgba(216,120,90,.3); padding-top: 6px;
}
.bb-start { display: flex; gap: 10px; }
.bb-start input {
  flex: 1; font-family: inherit; font-size: 12.5px; color: #ece7f5;
  background: rgba(10,13,24,.6); border: 1px solid rgba(216,120,90,.4); border-radius: 8px; padding: 7px 10px; outline: none;
}
.bb-start input[type=number] { flex: 0 0 170px; }
.bb-dimline { margin-top: 6px; font-size: 10.5px; color: #8a7a70; }

/* ---- 九宫行旅图（右下角锁定窗 · 无限缩放 · 悬停明细） ---- */
#mappanel {
  position: fixed; right: 16px; top: 47%; bottom: auto; z-index: 55; width: 560px;   /* v4.15 默认右中偏下（用户摆位裁示）；v1.2.1 面板随坐标系同步放大 */
  background: rgba(20,25,46,.58); border: 1px solid rgba(216,180,106,.45);
  border-radius: 12px; backdrop-filter: blur(7px); box-shadow: 0 10px 34px rgba(0,0,0,.5);
  display: flex; flex-direction: column; overflow: hidden;
}
.mp-head {
  display: flex; align-items: center; gap: 8px; padding: 7px 10px;
  border-bottom: 1px solid rgba(216,180,106,.3); user-select: none;
}
.mp-title { font-size: 13px; letter-spacing: 3px; color: #d8b46a; }
.mp-cur { font-size: 10px; color: #8d84ab; }
.mbtn {
  font-family: inherit; font-size: 12px; cursor: pointer; color: #b8aed6;
  background: none; border: 1px solid rgba(125,106,168,.4); border-radius: 6px;
  width: 24px; height: 22px; line-height: 1; padding: 0;
}
.mbtn:hover { border-color: #d8b46a; color: #e8d9b0; }
.mbtn.on { border-color: #d8b46a; color: #e8d9b0; background: rgba(216,180,106,.14); }   /* v1.9.4 🌐覆层开关态可见 */
.mp-body { padding: 8px 10px 10px; }
#mp-svg { width: 100%; height: auto; display: block; cursor: grab; }   /* v0.11 去边框：地图浮在壁纸上，不见块感 */
#mp-svg:active { cursor: grabbing; }
#mp-svg .nm-hit { fill: transparent; pointer-events: all; }   /* v0.11 节点热区（透明大圆，hover/点击好瞄） */
#mp-svg .nm-g { cursor: default; }
/* v1.9.4 九州视野覆层：九宫蒙在势力图上，只归纳不切割（nm-sector 旧州格双视图已删） */
#mp-svg .nm-lens-cell { fill: rgba(42,51,88,.10); stroke: rgba(216,180,106,.34); stroke-width: 1.2; stroke-dasharray: 7 5; cursor: pointer; pointer-events: all; }
#mp-svg .nm-lens-cell.cur { stroke: rgba(216,180,106,.72); stroke-width: 2; }
#mp-svg .nm-lens-cell:hover { fill: rgba(61,52,99,.28); stroke: #e8d9b0; stroke-width: 2; }
#mp-svg .nm-lens-name { fill: rgba(216,180,106,.5); font-size: 15px; letter-spacing: 2px; pointer-events: none; }
#mp-svg .nm-edge { stroke: rgba(157,146,196,.35); stroke-width: 1.4; stroke-dasharray: 4 4; }
#mp-svg .nm-edge.visited { stroke: #d8b46a; stroke-dasharray: none; stroke-width: 1.8; }
#mp-svg .nm-edge.visited.hot { stroke: #e8c98a; stroke-width: 2.8; filter: drop-shadow(0 0 3px rgba(216,180,106,.55)); }   /* v0.13 主路径：近途加粗染金 */
/* v1.9.2 地点统一金色（用户：地图上只该有黄点白字一种地点，悬停皆出栏）；
   未至与已至不再两色——只以透明度区分（未至淡金），足迹语义归足迹线 */
#mp-svg .nm-node { fill: #d8b46a; stroke: #e8d9b0; stroke-width: 1.2; }
#mp-svg .nm-node.visited { fill: #d8b46a; stroke: #e8d9b0; }
#mp-svg .nm-node.dim { opacity: .5; }
#mp-svg .nm-label { fill: #ece7f5; font-size: 11px; text-anchor: middle; pointer-events: none; }
#mp-svg .nm-label.visited { fill: #ece7f5; }
#mp-svg .nm-label.dim { opacity: .5; }
#mp-svg .nm-label.t0 { font-size: 12.5px; font-weight: bold; fill: #e8d9b0; }   /* v0.13 节点分级：城>志书>新地 */
#mp-svg .nm-label.t2 { font-size: 10px; }
#mp-svg .nm-node.t0 { stroke-width: 1.8; }
#mp-svg .nm-node.t2 { stroke-width: 1; }
#mp-svg .nm-cur { fill: none; stroke: #d8b46a; stroke-width: 1.6; }
#mp-svg .nm-pulse { fill: none; stroke: #d8b46a; stroke-width: 1; opacity: .7; animation: nmPulse 2s infinite; }
/* v4.43 思维链染色条（主对话/八派演化共用）：字数条按 0-500/500-2000/2000+ 蓝金红三档 */
.thinkbar { margin-top: 8px; padding: 3px 10px; background: rgba(18,22,38,.72); border: 1px solid rgba(216,180,106,.28); border-radius: 8px; font-size: 11px; display: flex; align-items: center; gap: 10px; }
.tb-label { color: #cfc9e0; white-space: nowrap; }
.tb-track { flex: 1; height: 5px; background: rgba(255,255,255,.08); border-radius: 3px; overflow: hidden; }
.tb-fill { display: block; height: 100%; border-radius: 3px; transition: width .35s ease, background .35s ease; }
@keyframes nmPulse { 0% { r: 8; opacity: .8; } 100% { r: 18; opacity: 0; } }

/* ---- 心图 · 内外圆加竖线（右上常驻 · 大小态） ---- */
#spirit {
  position: fixed; right: 16px; top: 52px; z-index: 56; width: 440px; max-width: calc(100vw - 32px);
  max-height: calc(100vh - 64px);   /* v1.2.2 展开不跳屏：完整占屏幕右侧 */
  background: rgba(20,25,46,.6); border: 1px solid rgba(157,146,196,.55);
  border-radius: 12px; backdrop-filter: blur(7px); box-shadow: 0 10px 34px rgba(0,0,0,.5);
  display: flex; flex-direction: column; overflow: hidden;
}
#spirit.mini { width: 216px; }
#spirit:not(.mini) { width: 600px; z-index: 62; background: rgba(20,25,46,.92); }   /* v4.73 放大态右缘不动；渲染后 JS 按顶栏自然宽进一步收窄（最小 440、上限视口-32） */
#spirit.mini .sp-body { display: none; }
#sp-mini { display: none; padding: 8px 12px 10px; }
#spirit.mini #sp-mini { display: block; }
#spirit.mini .sp-pool { display: none; }
.spm-row { display: flex; justify-content: space-between; font-size: 11px; color: #8d84ab; }
.spm-row b { color: #e8d9b0; font-size: 13px; }
.spm-row i { font-style: normal; font-size: 9px; color: #5a5a72; margin-left: 2px; }
.spm-row i.jrt { font-size: 10px; color: #c8b06a; font-weight: 600; }   /* v1.9.3 历程真实账加亮（旧 UI 太淡看不见、且是假的） */
.spm-svg { width: 100%; height: auto; display: block; margin-top: 4px; cursor: pointer; }
.spm-svg .spm-ring { fill: none; stroke: rgba(157,146,196,.5); stroke-width: 1.2; }
.spm-svg .spm-ring.in { stroke: rgba(216,180,106,.55); }
.spm-svg .spm-axis { stroke: rgba(200,190,220,.55); stroke-width: 1.1; }
.spm-svg .spm-dot { fill: rgba(157,146,196,.4); }
.spm-svg .spm-dot.on { fill: #d8b46a; }
.spm-svg .spm-dot.nm { fill: #b05cc0; }
.spm-hint { font-size: 9.5px; color: #5a5a72; text-align: center; margin-top: 2px; }
.sp-head {
  display: flex; align-items: center; gap: 8px; padding: 7px 10px;
  border-bottom: 1px solid rgba(157,146,196,.4); user-select: none;
  cursor: move;   /* v1.2.2 面板可拖动 */
}
.sp-title { font-size: 13px; letter-spacing: 4px; color: #c5b8e8; }
.sp-pool { font-size: 10px; color: #8d84ab; }
.spp-lv { color: #cdb2f0; font-size: 11px; }
.spp-lvbtn { font: inherit; font-size: 10px; margin-left: 6px; padding: 0 8px; border-radius: 8px;
  background: none; border: 1px solid #3a3350; color: #8d84ab; cursor: pointer; letter-spacing: .08em; }
.spp-lvbtn.can { border-color: #b48ae8; color: #cdb2f0; }
.spp-lvbtn.can:hover { background: rgba(180,138,232,.12); }
.spp-lvmax { margin-left: 6px; color: #8d84ab; letter-spacing: .1em; }
/* v4.73 大态顶栏视觉化：旅阶徽章 / 历程·缘起 chip / 凝聚脉进度 / 用心·空余·遗忘 饼图 */
.sp-head { flex-wrap: wrap; row-gap: 4px; }
.sp-pool { flex: 1 1 100%; min-width: 0; }
.sp-pool-in { display: flex; align-items: center; justify-content: flex-start; gap: 8px; min-width: 0; flex-wrap: wrap; row-gap: 4px; }
.sp-pool-l, .sp-pool-r { display: flex; align-items: center; gap: 5px; min-width: 0; }
.sp-pool-l { flex-wrap: wrap; }
.sp-pool-r { margin-left: 2px; }
.sp-lv-main { display: flex; flex-direction: column; align-items: center; justify-content: center;
  width: 38px; height: 38px; flex: none; border-radius: 10px; user-select: none;
  background: radial-gradient(circle at 35% 30%, rgba(180,138,232,.28), rgba(40,34,70,.35) 75%);
  border: 1px solid rgba(180,138,232,.75); box-shadow: 0 0 12px rgba(180,138,232,.28), inset 0 0 8px rgba(180,138,232,.12); }
.sp-lv-main b { color: #efe6ff; font-size: 16px; line-height: 1; letter-spacing: .5px; text-shadow: 0 0 8px rgba(205,178,240,.8); }
.sp-lv-t { font-size: 8px; color: #9a86c8; letter-spacing: 1px; margin-bottom: 2px; }
.spp-lvbtn { display: inline-flex; align-items: center; gap: 3px; margin-left: 0; white-space: nowrap; }
.spp-lvbtn b { font-size: 11px; }
.spp-lvbtn.can b { color: #efe6ff; text-shadow: 0 0 6px rgba(205,178,240,.8); }
.sp-stat { display: inline-flex; align-items: baseline; gap: 3px; padding: 2px 7px; border-radius: 9px;
  background: rgba(14,17,32,.55); border: 1px solid rgba(157,146,196,.32); white-space: nowrap; }
.sp-stat .sp-stat-k { color: #8d84ab; }
.sp-stat b { color: #e8d9b0; font-size: 12px; }
.sp-stat i { font-style: normal; font-size: 9px; color: #6a6488; }
.sp-stat.jr i { color: #c8b06a; font-weight: 600; }
.sp-stat.yq b { color: #e8c85a; }
.sp-stat.pulse b { color: #9fd3a8; text-shadow: 0 0 6px rgba(159,211,168,.45); }
.sp-stat .sp-pbar { display: block; align-self: center; width: 54px; height: 4px; border-radius: 2px;
  background: rgba(8,10,20,.7); overflow: hidden; margin-left: 2px; }
.sp-stat .sp-pbar i { display: block; height: 100%; border-radius: 2px;
  background: linear-gradient(90deg, #7fc9a0, #d8b45a); box-shadow: 0 0 6px rgba(159,211,168,.5); }
.sp-piewrap { display: flex; align-items: center; gap: 5px; flex: none; }
.sp-pie { width: 34px; height: 34px; flex: none; border-radius: 50%;
  border: 1px solid rgba(216,180,106,.55); box-shadow: 0 0 8px rgba(216,180,106,.15); }
.sp-pie-leg { display: flex; flex-direction: column; gap: 1px; font-size: 9px; line-height: 1.35; }
.sp-pie-w { display: flex; align-items: center; gap: 3px; color: #b8aed6; white-space: nowrap; }
.sp-pie-w i { width: 6px; height: 6px; border-radius: 50%; flex: none; }
.sp-pie-w.u i { background: #d06a8a; box-shadow: 0 0 4px rgba(208,106,138,.6); }
.sp-pie-w.f i { background: #d8b45a; box-shadow: 0 0 4px rgba(216,180,106,.6); }
.sp-pie-w.g i { background: #4a5a86; box-shadow: 0 0 4px rgba(90,110,160,.6); }
.sp-pie-w b { color: #ece7f5; font-weight: normal; margin-left: 1px; }
.sp-body { padding: 6px 10px 10px; overflow-y: auto; flex: 1; min-height: 0;   /* v1.2.2 高度由面板 max-height 约束，内容区自适应滚动 */
  overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: rgba(157,146,196,.55) rgba(20,25,46,.35); }
/* v1.6 心图滚动条显性化： overlay 式隐条用户根本看不见（"看不到八个势力"）——常显 8px 紫条 */
.sp-body::-webkit-scrollbar { width: 8px; }
.sp-body::-webkit-scrollbar-thumb { background: rgba(157,146,196,.55); border-radius: 4px; }
.sp-body::-webkit-scrollbar-thumb:hover { background: rgba(190,170,220,.75); }
.sp-body::-webkit-scrollbar-track { background: rgba(20,25,46,.35); border-radius: 4px; }
#sp-svg { width: 100%; height: auto; display: block; touch-action: none; }
#spirit.dragging #sp-svg .sp-ring.hi { stroke: #e8d9b0; stroke-width: 2.6; }
/* ---- 篮子（未安装锚点） ---- */
#sp-basket {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  border-top: 1px dashed rgba(157,146,196,.35); padding: 7px 2px 3px; margin-top: 2px;
}
#sp-basket.hi { background: rgba(216,180,106,.08); border-top-color: #e8d9b0; }
.spb-k { font-size: 11px; color: #8d84ab; letter-spacing: 2px; }
.spb-none { font-size: 10px; color: #5a5a72; }
.spb-hint { font-size: 9px; color: #5a5a72; margin-left: auto; }
.sp-chip {
  font-size: 11px; color: #d5cfe2; padding: 3px 10px; cursor: grab; user-select: none;
  background: rgba(157,146,196,.12); border: 1px solid rgba(157,146,196,.5); border-radius: 999px;
}
.sp-chip.filled { border-color: #d8b46a; color: #e8d9b0; background: rgba(216,180,106,.12); }
.sp-chip:active { cursor: grabbing; }
.sp-ghost {
  position: fixed; z-index: 999; pointer-events: none; font-size: 11px; color: #1a1626;
  background: linear-gradient(120deg, #e8d9b0, #d8b46a); padding: 3px 10px; border-radius: 999px;
  box-shadow: 0 4px 14px rgba(0,0,0,.5); opacity: .92;
}
#sp-svg .sp-ring { fill: none; stroke: rgba(157,146,196,.5); stroke-width: 1.3; }
#sp-svg .sp-ring.in { stroke: rgba(216,180,106,.55); }
#sp-svg .sp-axis { stroke: rgba(200,190,220,.55); stroke-width: 1.4; }
#sp-svg .sp-g { cursor: pointer; }
#sp-svg .sp-dot { fill: rgba(10,13,24,.7); stroke: #9d92c4; stroke-width: 1.6; }
#sp-svg .sp-g:hover .sp-dot { stroke: #e8d9b0; }
#sp-svg .sp-dot.filled { fill: rgba(216,180,106,.42); stroke: #e8c98a; stroke-width: 2.2; filter: drop-shadow(0 0 4px rgba(232,201,138,.55)); }
#sp-svg .sp-dot.pinned { stroke-dasharray: 2.5 2.5; }
#sp-svg .sp-dot.filled.pinned { stroke-dasharray: none; }
#sp-svg .sp-core { fill: #f0dfae; }
#sp-svg .sp-pin { fill: #8d84ab; font-size: 7px; text-anchor: middle; }
#sp-svg .sp-dot.mindd { fill: rgba(157,146,196,.35); }
#sp-svg .sp-dot.locked { fill: rgba(90,40,110,.5); stroke: #b05cc0; stroke-dasharray: 3 2; }
#sp-svg .sp-center.sub2 { fill: #6a6488; font-size: 9px; }
#sp-svg .sp-star { fill: rgba(157,146,196,.28); }
#sp-svg .sp-star.on { fill: #e8c98a; }
#sp-svg .sp-g.nightmare .sp-star { fill: rgba(176,92,192,.3); }
#sp-svg .sp-star { cursor: help; }
#sp-svg .sp-ring, #sp-svg .sp-axis { cursor: help; }
#sp-svg .sp-lb { fill: #d5cfe2; font-size: 9.5px; text-anchor: middle; }
#sp-svg .sp-lb.nm { fill: #d8a0e0; }
#sp-svg .sp-lb.mind-lb { fill: #c5b8e8; text-anchor: end; font-size: 10px; }
#sp-svg .sp-nmsign { fill: #e0a8ec; font-size: 10px; text-anchor: middle; animation: nmPulse 2.4s infinite; }
/* ---- v0.10 心力惯性：一轮落定期，布局冻结（微尘仍可点亮） ---- */
@keyframes ineBreath { 0%,100% { opacity: .55; } 50% { opacity: 1; } }
#spirit.inertia { border-color: rgba(140,172,214,.65); box-shadow: 0 0 20px rgba(120,160,214,.22), inset 0 0 26px rgba(120,160,214,.07); }
#spirit.inertia .sp-title::after { content: ' · ⏳ 惯性'; color: #9cc0e8; font-size: 10px; letter-spacing: 1px; animation: ineBreath 2.6s infinite; }
#spirit.inertia #sp-svg .sp-ring { stroke: rgba(140,172,214,.5); stroke-dasharray: 4 5; }
#spirit.inertia #sp-svg .sp-ring.in { stroke: rgba(150,176,210,.42); }
#spirit.inertia #sp-svg .sp-axis { stroke: rgba(140,172,214,.4); }
#spirit.inertia #sp-svg .sp-dot { stroke: #8aa8cc; }
#spirit.inertia #sp-svg .sp-dot.filled { stroke: #a8c4e4; filter: drop-shadow(0 0 4px rgba(150,180,220,.5)); }
#spirit.inertia #sp-svg .sp-core { fill: #cfe0f2; }
#spirit.inertia #sp-basket { opacity: .45; background: repeating-linear-gradient(135deg, rgba(140,172,214,.06) 0 6px, transparent 6px 12px); }
#spirit.inertia .sp-chip { cursor: not-allowed; border-style: dashed; }
#sp-svg .sp-ine { fill: #9cc0e8; font-size: 9.5px; text-anchor: middle; letter-spacing: 1px; animation: ineBreath 2.6s infinite; }
#sp-svg .sp-center { fill: #e8d9b0; font-size: 20px; text-anchor: middle; letter-spacing: 1px; }
#sp-svg .sp-center.sub { fill: #8d84ab; font-size: 10px; }
#sp-learn { border-top: 1px solid rgba(157,146,196,.3); padding-top: 6px; font-size: 11px; }
.spl-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; color: #d5cfe2; margin-bottom: 6px; }
.spl-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; }
.spl-item {
  border: 1px solid rgba(125,106,168,.35); border-radius: 8px; padding: 4px 6px;
  display: flex; flex-direction: column; gap: 2px; align-items: flex-start;
}
.spl-item b { color: #b8aed6; font-size: 12px; }
.spl-item span { font-size: 9.5px; color: #8d84ab; }
.spl-item.on { border-color: #d8b46a; background: rgba(216,180,106,.08); }
.spl-item.on b { color: #e8d9b0; }
.spl-item.can { border-color: #9d92c4; background: rgba(157,146,196,.1); }
.spl-item.can b { color: #e6dfff; }
.spl-item.no { opacity: .55; }
.spl-sub { font-size: 9.5px; color: #5a5a72; margin-top: 5px; line-height: 1.5; }
/* 弹层 */
#sp-pop {
  position: fixed; z-index: 95; width: 288px;
  background: rgba(16,20,36,.96); border: 1px solid rgba(157,146,196,.6);
  border-radius: 10px; padding: 9px 11px; box-shadow: 0 10px 34px rgba(0,0,0,.7);
  font-size: 11.5px; color: #d5cfe2; line-height: 1.8;
}
.spp-t { color: #e8d9b0; font-size: 12.5px; margin-bottom: 4px; }
.spp-t.nm { color: #e0a8ec; }
.spp-sub { color: #8d84ab; font-size: 10.5px; }
.spp-stars { display: flex; gap: 6px; font-size: 15px; margin: 6px 0; }
.spp-star { cursor: pointer; color: #6a6a85; }
.spp-star.on { color: #e8c98a; }
.spp-star:hover { color: #f0d6a0; transform: scale(1.15); }
.spp-form { display: flex; flex-direction: column; gap: 5px; margin: 6px 0; }
.spp-form select, .spp-inp {
  font-family: inherit; font-size: 11.5px; color: #ece7f5;
  background: rgba(10,13,24,.6); border: 1px solid rgba(125,106,168,.5);
  border-radius: 6px; padding: 3px 6px; outline: none;
}
.spp-btn {
  font-family: inherit; font-size: 11px; cursor: pointer; color: #1a1626;
  background: linear-gradient(120deg, #d8b46a, #b8934a); border: none;
  border-radius: 7px; padding: 4px 12px; margin-top: 4px; letter-spacing: 1px;
}
.spp-btn.sm { padding: 2px 9px; margin-top: 0; }
.spp-btn.dim { background: none; color: #8d84ab; border: 1px solid rgba(125,106,168,.4); }
.spp-btn.nm { background: linear-gradient(120deg, #b05cc0, #7a3a90); color: #f5e8ff; width: 100%; }
.spp-btn:hover { filter: brightness(1.12); }

/* ---- 行旅图悬停明细 ---- */
#maptip {
  position: fixed; z-index: 90; width: 264px; pointer-events: auto;   /* v1.2 修复：原 none 让 tooltip 上进店/兑换按钮永远点不到、mouseenter 永不触发 */
  background: rgba(16,20,36,.94); border: 1px solid rgba(216,180,106,.55);
  border-radius: 10px; padding: 8px 10px; box-shadow: 0 10px 34px rgba(0,0,0,.65);
  font-size: 11px; line-height: 1.7; color: #d5cfe2;
}
#maptip .mt-name { font-size: 12.5px; color: #e8d9b0; margin-bottom: 4px; display: flex; justify-content: space-between; gap: 8px; }
#maptip .mt-tag { font-size: 9.5px; color: #8d84ab; border: 1px solid rgba(125,106,168,.5); border-radius: 7px; padding: 0 6px; align-self: center; flex: 0 0 auto; }
#maptip .mt-row { display: flex; gap: 6px; margin: 2px 0; }
#maptip .mt-k { color: #9d92c4; flex: 0 0 26px; }
#maptip .mt-dim { color: #5a5a72; }
#maptip .mt-img { width: 100%; border-radius: 7px; margin-top: 5px; border: 1px solid rgba(216,180,106,.35); aspect-ratio: 16/9; object-fit: cover; display: block; }

/* ---- 旅人手账富化（立绘/条/染色/chips） ---- */
.np .np-top { display: flex; gap: 10px; }
.np-avatar-box { flex: 0 0 128px; text-align: center; }
.np-avatar {
  width: 128px; height: 164px; object-fit: cover; border-radius: 10px;
  border: 1px solid rgba(216,180,106,.5); background: rgba(10,13,24,.5);
  box-shadow: 0 4px 18px rgba(0,0,0,.45);
}
.np-mood {
  display: inline-block; margin-top: 5px; font-size: 10px; color: #e8d9b0;
  border: 1px solid rgba(216,180,106,.45); border-radius: 8px; padding: 1px 8px;
  background: rgba(216,180,106,.1);
}
.np-rows { flex: 1; min-width: 0; }
.np-row { display: flex; align-items: center; gap: 7px; font-size: 11.5px; line-height: 1.9; }
.np-row .k { color: #8d84ab; flex: 0 0 26px; }
.np-row .np-v { flex: 0 0 auto; color: #d5cfe2; max-width: 45%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.np-row .np-v:last-child { max-width: none; flex: 1; }   /* 无条行（时辰/地点等）不截断 */
.np-row.war .np-v { color: #f0c9a8; max-width: none; }
.np-bar { flex: 1; height: 5px; background: rgba(0,0,0,.4); border-radius: 3px; overflow: hidden; }
.np-bar-fill { height: 100%; border-radius: 3px; transition: width .4s; }
.np-rest { margin-top: 8px; border-top: 1px dashed rgba(125,106,168,.25); padding-top: 6px; }
.np-rest .np-row .np-v { max-width: none; flex: 1; }
.np-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.np-chip {
  font-size: 10.5px; color: #e8d9b0; border: 1px solid rgba(216,180,106,.4);
  border-radius: 8px; padding: 0 7px; background: rgba(216,180,106,.08);
}

/* ---- 战力栏（武器行 + 六槽格） ---- */
.ws-weapon {
  display: flex; align-items: center; gap: 7px; cursor: pointer;
  font-size: 12px; color: #e8d9b0; padding: 5px 8px; border-radius: 8px;
  background: rgba(216,180,106,.08); border: 1px solid rgba(216,180,106,.35); margin-bottom: 7px;
}
.ws-weapon:hover { background: rgba(216,180,106,.16); }
.ws-weapon.empty { color: #5a5a72; border-color: rgba(125,106,168,.3); background: none; }
.ws-weapon .ws-wname { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ws-bonus {
  font-size: 10px; color: #1a1626; background: linear-gradient(120deg, #d8b46a, #b8934a);
  border-radius: 7px; padding: 0 7px; flex: 0 0 auto;
}
.ws-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.ws-cell {
  display: flex; align-items: center; gap: 5px; cursor: pointer; font-size: 11px; color: #d5cfe2;
  padding: 4px 7px; border-radius: 7px; border: 1px solid rgba(125,106,168,.3); transition: all .15s;
}
.ws-cell:hover { border-color: #d8b46a; background: rgba(216,180,106,.1); }
.ws-cell.empty { color: #5a5a72; }
.ws-cell .ws-lab { color: #8d84ab; flex: 0 0 auto; }
.ws-cell .ws-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ws-foot { margin-top: 7px; font-size: 9.5px; color: #5a5a72; }

/* ---- 快捷按钮 ---- */
.qk {
  font-family: inherit; font-size: 15px; cursor: pointer; color: #d5cfe2;
  background: rgba(18,22,40,.5); border: 1px solid rgba(125,106,168,.45);
  border-radius: 10px; padding: 0 11px; transition: all .15s;
}
.qk:hover { border-color: #d8b46a; color: #e8d9b0; }

/* ---- 图鉴页签 ---- */
.ga-tabs { display: flex; gap: 4px; }
.ga-tab {
  font-size: 11.5px; color: #8d84ab; cursor: pointer; padding: 3px 12px;
  border: 1px solid rgba(125,106,168,.4); border-radius: 8px;
}
.ga-tab.on { color: #e8d9b0; border-color: #d8b46a; background: rgba(216,180,106,.12); }
.ga-item.npc img { aspect-ratio: 3/4; object-fit: cover; max-height: 300px; }

/* ---- 人事区立绘点名 ---- */
.lg-npcrow { display: flex; align-items: center; gap: 7px; margin: 3px 0; }
/* v4.0 劫数栏：八劫门槛逐条盯 */
.sw-worst { float: right; font-size: 11px; font-weight: 400; letter-spacing: 0; }
.sw-row { display: flex; align-items: center; gap: 6px; margin: 2px 0; font-size: 12px; cursor: help; }
.sw-row:hover { background: rgba(216, 178, 106, .08); }
.sw-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; box-shadow: 0 0 4px currentColor; }
.sw-nm { flex: none; min-width: 56px; }
.sw-cur { flex: 1; color: #9aa0ad; font-size: 11px; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sw-rk { flex: none; min-width: 30px; text-align: right; font-weight: 600; }
/* v4.2 常设赎身：sunk 行买断按钮 */
.sw-redeem { flex: none; margin-left: 4px; padding: 0 6px; font-size: 11px; line-height: 16px;
  color: #d8b45a; background: rgba(216, 178, 106, .10); border: 1px solid rgba(216, 178, 106, .45);
  border-radius: 3px; cursor: pointer; }
.sw-redeem:hover { background: rgba(216, 178, 106, .22); }
.sw-redeem:disabled { color: #777c88; border-color: #3a3f4a; background: transparent; cursor: not-allowed; }
.lg-npc {
  width: 26px; height: 32px; object-fit: cover; border-radius: 6px; cursor: pointer;
  border: 1px solid rgba(216,180,106,.5); flex: 0 0 auto;
}
.lg-npc:hover { border-color: #e8d9b0; box-shadow: 0 0 8px rgba(216,180,106,.5); }

/* ---- 一步开档按钮 ---- */
.tbtn.gold { color: #e8d9b0; border-color: rgba(216,180,106,.6); }
.tbtn.gold:hover { background: rgba(216,180,106,.16); border-color: #d8b46a; }
.bar-row { display: flex; align-items: center; gap: 7px; margin: 5px 0; }
.bar-lb { font-size: 11px; color: #8d84ab; flex: 0 0 26px; }
.bar { flex: 1; height: 7px; border-radius: 4px; background: rgba(0,0,0,.4); overflow: hidden; }
.bar-fill { height: 100%; border-radius: 4px; transition: width .5s; }
.bar-fill.hp { background: linear-gradient(90deg, #a8555f, #d87a7a); }
.bar-fill.st { background: linear-gradient(90deg, #9d92c4, #c5b8e8); }
.bar-fill.lu { background: linear-gradient(90deg, #c05c8c, #e88ab8); }
.bar-fill.pain { background: linear-gradient(90deg, #a8555f, #d87a7a); }
.bar-fill.stress { background: linear-gradient(90deg, #9d92c4, #c5b8e8); }
.bar-t { font-size: 10.5px; color: #8d84ab; flex: 0 0 30px; text-align: right; }

/* ---- 中栏聊天 ---- */
#chatwrap { flex: 1; display: flex; flex-direction: column; min-width: 0; }
#chat { flex: 1; overflow-y: auto; padding: 18px 26px 12px; }
.msg { margin: 0 0 16px; max-width: 860px; }
.msg .who { font-size: 10.5px; letter-spacing: 2px; margin-bottom: 4px; }
.msg.gm .who { color: #d8b46a; }
.msg.me { margin-left: auto; }
.msg.me .who { color: #9d92c4; text-align: right; }
.msg .bubble {
  background: rgba(18,22,40,.3); border: 1px solid rgba(125,106,168,.35);
  border-radius: 12px; padding: 12px 16px; font-size: 14px; line-height: 2.0;
  white-space: pre-wrap; overflow-wrap: anywhere; backdrop-filter: blur(5px);
}
.msg.me .bubble { background: rgba(48,40,72,.36); border-color: rgba(157,146,196,.45); }
.msg .bubble .say { color: #e8c98a; }
.msg .bubble .sys { color: #8d84ab; font-size: 12.5px; }
.msg .meta { font-size: 10px; color: #5a5a72; margin-top: 3px; }
/* 系统卡：引擎判定结果（只进 UI，不进 AI 历史） */
.msg .syscard {
  margin-top: 6px; font-size: 12px; color: #e8d9b0; line-height: 1.7;
  background: rgba(216,180,106,.08); border: 1px solid rgba(216,180,106,.45);
  border-radius: 9px; padding: 6px 12px; white-space: pre-wrap;
}
/* v4.26 017a 人格宪法提示条：本轮被搅动结构/上台声音（账目提示，仅 UI） */
.msg .persona-hint {
  margin-top: 4px; font-size: 11px; color: #8d84ab; line-height: 1.6;
  background: rgba(141,132,171,.08); border-left: 2px solid rgba(141,132,171,.5);
  border-radius: 0 7px 7px 0; padding: 4px 10px; white-space: pre-wrap;
}
/* v4.26 017c 心声卡：蔺的内心（只给玩家看，不进 GM） */
.msg .persona-inner {
  margin-top: 6px; font-size: 12px; color: #cfc9e2; line-height: 1.7;
  background: rgba(18,18,26,.75); border: 1px solid rgba(141,132,171,.35);
  border-radius: 9px; overflow: hidden;
}
.msg .pi-head {
  display: flex; align-items: center; gap: 8px; padding: 5px 10px;
  background: rgba(141,132,171,.1); font-size: 12px; color: #e8c98a;
  letter-spacing: 2px;
}
.msg .pi-sub { font-size: 10px; color: #8d84ab; letter-spacing: 1px; }
.msg .pi-fold {
  background: none; border: 1px solid rgba(141,132,171,.4); color: #9a93b8;
  border-radius: 5px; font-size: 10px; padding: 1px 8px; cursor: pointer;
}
.msg .pi-body { padding: 6px 12px; }
.msg .pi-line { padding: 3px 0; border-top: 1px dashed rgba(255,255,255,.08); }
.msg .pi-line:first-child { border-top: none; }
.msg .pi-line b { color: #f59e0b; font-weight: 700; margin-right: 2px; }
.msg .pi-tags { color: #ec4899; font-size: 10px; }
.msg .pi-share {
  margin-left: 6px; font: inherit; font-size: 10px; color: #c8b06a;
  background: rgba(216,180,106,.08); border: 1px solid rgba(216,180,106,.4);
  border-radius: 6px; padding: 1px 8px; cursor: pointer;
}
.msg .pi-share:hover { background: rgba(216,180,106,.18); }
.msg .pi-share:disabled { opacity: .45; cursor: default; }
/* ================= v4.26 心图栏人格页签与实时人格地图（图谱构建同款色表） ================= */
.sp-tabs { display: flex; gap: 4px; padding: 4px 8px 0; }
.sp-tab {
  flex: 1; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.12);
  color: #9a93b8; font-size: 12px; letter-spacing: 4px; padding: 4px 0;
  border-radius: 6px 6px 0 0; cursor: pointer;
}
.sp-tab.on { background: rgba(216,180,106,.12); border-color: rgba(216,180,106,.45); color: #e8c98a; }
#spirit.mini .sp-tabs { display: none; }
#sp-persona {
  flex: 1; display: flex; flex-direction: column; min-height: 0;
  padding: 6px 8px; gap: 6px; position: relative;
}
.sp-pg-bound { display: flex; align-items: baseline; gap: 10px; font-size: 13px; flex-wrap: wrap; }
.sp-pg-mapname { color: #e8c98a; font-weight: 700; }
.sp-pg-sub { color: #8d84ab; font-size: 11px; }
.sp-pg-anchor {
  width: 100%; margin-top: 4px; font-size: 10.5px; color: #9a93b8; line-height: 1.6;
  background: rgba(0,0,0,.22); border: 1px dashed rgba(157,146,196,.35);
  border-radius: 6px; padding: 4px 8px; white-space: pre-wrap;
}
.sp-pg-hint { color: #8d84ab; font-size: 12px; padding: 12px; }
.sp-pg-stats { display: flex; flex-wrap: wrap; gap: 6px; }
.sp-pg-card {
  border: 1px solid rgba(255,255,255,.12); border-radius: 8px; padding: 4px 10px;
  background: rgba(255,255,255,.04);
}
.sp-pg-card b { font-size: 15px; margin-right: 4px; }
.sp-pg-card span { font-size: 10px; color: #8d84ab; }
.sp-pg-canvas {
  flex: 1; min-height: 180px; position: relative; overflow: hidden;
  background: rgba(0,0,0,.18); border: 1px solid rgba(255,255,255,.1); border-radius: 8px;
}
#spirit.persona-mode {   /* v4.26 人格页签竖长面板：与心盘同列，画布给足高度 */
  width: 500px; height: min(720px, calc(100vh - 64px));
}
#spirit.mini.persona-mode {   /* 缩小态优先：恢复 mini 尺寸，避免被 persona-mode 顶掉 */
  width: 216px; height: auto;
}
#spirit.mini.persona-mode .sp-body { display: none; }   /* 缩小态必须隐藏人格主体（后写规则会顶掉 mini 的 display:none） */
#spirit.persona-mode .sp-body {   /* 人格页签：sp-body 变纵向 flex，让画布真正吃满剩余高度 */
  display: flex; flex-direction: column;
}
#spirit.persona-mode .sp-pg-canvas { min-height: 280px; }
#sp-pg-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
#sp-pg-svg { width: 100%; height: 100%; display: block; cursor: grab; }
.pg-label { font-size: 10px; fill: #b8b2cf; pointer-events: none; }
.pg-edge { pointer-events: none; }
.pg-node { cursor: pointer; }
.pg-stirred { animation: pgPulse 1.6s ease-in-out infinite; }
@keyframes pgPulse {
  0%, 100% { stroke-width: 1.2; stroke: #fff; }
  50% { stroke-width: 4; stroke: #f59e0b; }
}
.pg-voice-up { stroke: #f59e0b !important; stroke-width: 3 !important; }
.pg-dim { opacity: .22; }
.sp-pg-legend { display: flex; flex-wrap: wrap; gap: 8px; font-size: 10px; color: #8d84ab; align-items: center; }
.pg-leg { display: inline-flex; align-items: center; gap: 3px; }
.pg-leg i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.pg-leg-note { margin-left: auto; opacity: .7; }
.sp-pg-detail {
  position: absolute; right: 8px; top: 8px; width: 250px;
  max-height: calc(100% - 16px); overflow: auto;
  background: #23232f; border: 1px solid rgba(255,255,255,.18);
  border-radius: 10px; padding: 10px; z-index: 30; font-size: 12px;
}
.sp-pg-dhead { display: flex; align-items: center; gap: 6px; color: #e8c98a; font-weight: 700; }
.sp-pg-dmeta { color: #8d84ab; font-size: 11px; margin: 4px 0; }
.sp-pg-dsum { color: #cfc9e2; margin-bottom: 6px; }
.sp-pg-dsec { color: #8d84ab; font-size: 11px; margin: 6px 0 3px; letter-spacing: 2px; }
.sp-pg-dedges div { display: flex; align-items: center; gap: 5px; color: #b8b2cf; padding: 2px 0; }
.sp-pg-dedges i { width: 7px; height: 7px; border-radius: 2px; display: inline-block; }
.pg-w { margin-left: auto; color: #8d84ab; }
.pg-ep { border-top: 1px dashed rgba(255,255,255,.1); padding: 4px 0; color: #b8b2cf; }
.pg-epk { display: block; color: #8d84ab; font-size: 10px; }
.msg.streaming .bubble { border-color: rgba(216,180,106,.55); }
.msg.streaming .bubble::after { content: "▌"; color: #d8b46a; animation: blink 1s infinite; }
@keyframes blink { 50% { opacity: 0; } }

/* ---- 灵感栏（内嵌 GM 气泡底部） ---- */
.gm-choices { margin-top: 10px; border-top: 1px dashed rgba(157,146,196,.35); padding-top: 8px; }
.gc-head { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #d8b46a; letter-spacing: 2px; margin-bottom: 7px; }
.gc-hint { font-size: 9.5px; color: #8d84ab; letter-spacing: 0; }
.gc-body { display: flex; flex-direction: column; gap: 6px; }
.ch-btn {
  font-family: inherit; font-size: 13px; text-align: left; cursor: pointer; color: #ece7f5;
  background: rgba(125,106,168,.2); border: 1px solid rgba(125,106,168,.6);
  border-radius: 9px; padding: 8px 14px; transition: all .2s; line-height: 1.6;
}
.ch-btn:hover { background: rgba(216,180,106,.22); border-color: #d8b46a; color: #fff; transform: translateX(2px); }

#inputbar { display: flex; gap: 10px; padding: 10px 26px 14px; }
#inp {
  flex: 1; font-family: inherit; font-size: 14px; color: #ece7f5;
  background: rgba(18,22,40,.46); border: 1px solid rgba(125,106,168,.5);
  border-radius: 10px; padding: 10px 14px; outline: none;
}
#inp:focus { border-color: #d8b46a; }
#btn-send {
  font-family: inherit; font-size: 14px; cursor: pointer; color: #1a1626;
  background: linear-gradient(120deg, #e8c98a, #c9964a); border: none;
  border-radius: 10px; padding: 0 26px; letter-spacing: 4px; transition: all .18s;
}
#btn-send:hover { background: linear-gradient(120deg, #f0d6a0, #d8a85a); box-shadow: 0 0 12px rgba(216,180,106,.35); }
#btn-send:disabled { opacity: .5; cursor: wait; }

/* ---- 全账分区（左栏折叠块内的行式账） ---- */
.lg-row { display: flex; gap: 6px; }
.lg-k { color: #9d92c4; flex: 0 0 auto; }
.lg-v { color: #ece7f5; flex: 1; min-width: 0; overflow-wrap: anywhere; }
.lg-sub { color: #8d84ab; font-size: 10.5px; }
.lg-pair { flex-wrap: wrap; row-gap: 2px; }   /* v4.69 名望/恶名同行并排：各自可带现状弹窗 */
.lg-pair .lg-p { display: flex; align-items: baseline; gap: 5px; flex: 1 1 auto; min-width: 0; }
.lg-pair .lg-p .lg-v { flex: 0 1 auto; }
.lg-chip { display: inline-block; font-size: 10.5px; color: #e8d9b0; border: 1px solid rgba(216,180,106,.4); border-radius: 6px; padding: 0 5px; margin: 1px 3px 1px 0; background: rgba(216,180,106,.07); }

/* ---- 图鉴库弹层 ---- */
#gallery-mask {
  position: fixed; inset: 0; z-index: 60; background: rgba(5,7,12,.62);
  display: flex; align-items: center; justify-content: center; backdrop-filter: blur(3px);
}
#gallery {
  width: min(980px, 92vw); max-height: 86vh; display: flex; flex-direction: column;
  background: rgba(20,25,46,.76); border: 1px solid rgba(216,180,106,.4); border-radius: 14px;
}
.ga-head {
  display: flex; align-items: center; gap: 12px; padding: 12px 16px;
  border-bottom: 1px solid rgba(216,180,106,.3);
}
.ga-title { font-size: 15px; letter-spacing: 4px; color: #d8b46a; }
.ga-stat { font-size: 11px; color: #8d84ab; }
.ga-gen { display: flex; gap: 10px; padding: 10px 16px; border-bottom: 1px solid rgba(125,106,168,.25); }
.ga-gen input {
  flex: 1; font-family: inherit; font-size: 12.5px; color: #ece7f5;
  background: rgba(10,13,24,.6); border: 1px solid rgba(125,106,168,.5);
  border-radius: 8px; padding: 7px 10px; outline: none;
}
.ga-gen input:focus { border-color: #d8b46a; }
.ga-gen button {
  font-family: inherit; font-size: 12.5px; cursor: pointer; color: #1a1626;
  background: linear-gradient(120deg, #d8b46a, #b8934a); border: none; border-radius: 8px; padding: 0 18px;
}
#ga-grid {
  flex: 1; overflow-y: auto; padding: 14px 16px;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px;
}
.ga-item {
  cursor: pointer; border: 1px solid rgba(125,106,168,.4); border-radius: 10px; overflow: hidden;
  background: rgba(10,13,24,.5); transition: border-color .2s, transform .2s;
}
.ga-item:hover { border-color: #d8b46a; transform: translateY(-2px); }
.ga-item.wall { border-color: #d8b46a; box-shadow: 0 0 0 1px rgba(216,180,106,.6); }
.ga-item img { width: 100%; aspect-ratio: 16/9; object-fit: cover; display: block; }
.ga-pending {
  width: 100%; aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center;
  color: #8d84ab; font-size: 12px; background: rgba(125,106,168,.08);
}
.ga-cap { display: flex; justify-content: space-between; gap: 6px; padding: 6px 9px; font-size: 11px; }
.ga-cap b { color: #e8d9b0; font-weight: normal; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ga-cap span { color: #8d84ab; flex: 0 0 auto; }
.ga-empty { grid-column: 1/-1; text-align: center; color: #5a5a72; font-size: 12px; padding: 40px 0; }
/* ---- v1.2 图鉴·众生页 ---- */
.bz-stat { grid-column: 1/-1; font-size: 11px; color: #8d84ab; padding: 2px 0 6px; border-bottom: 1px dashed rgba(157,146,196,.3); }
.bz-zone { grid-column: 1/-1; margin-top: 8px; }
.bz-zt { font-size: 12px; color: #c5b8e8; letter-spacing: 2px; margin-bottom: 6px; }
.bz-row { display: flex; flex-wrap: wrap; gap: 10px; }
.bz-empty { font-size: 11px; color: #5a5a72; padding: 8px 0; }
.bz-one { width: 76px; text-align: center; cursor: pointer; }
.bz-ball { width: 62px; height: 62px; margin: 0 auto; border-radius: 50%; overflow: hidden;
  border: 2px solid rgba(157,146,196,.55); background: #141a30; display: flex; align-items: center; justify-content: center; }
.bz-ball img { width: 100%; height: 100%; object-fit: cover; }
.bz-ball b { font-size: 22px; color: #9d92c4; }
.bz-ball.wait span { font-size: 9px; color: #d8b46a; animation: bzPulse 1.2s infinite; }
.bz-ball.none { border-style: dashed; }
.bz-one.open .bz-ball { border-color: #d8b46a; box-shadow: 0 0 10px rgba(216,180,106,.5); }
@keyframes bzPulse { 50% { opacity: .4; } }
.bz-name { font-size: 11px; color: #e8d9b0; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bz-sub { font-size: 9px; color: #5a5a72; }
.bz-detail { grid-column: 1/-1; display: flex; gap: 12px; margin-top: 12px; padding: 10px;
  border: 1px solid rgba(216,180,106,.45); border-radius: 10px; background: rgba(20,25,46,.5); }
.bz-dimg { width: 110px; height: 150px; border-radius: 8px; overflow: hidden; flex: 0 0 auto;
  background: #141a30; display: flex; align-items: center; justify-content: center; color: #5a5a72; font-size: 11px; }
.bz-dimg img { width: 100%; height: 100%; object-fit: cover; }
.bz-dbody { font-size: 12px; color: #d5cfe2; line-height: 1.8; }
.bz-ddesc { margin-top: 4px; color: #b8aed6; }
.bz-dex { margin-top: 4px; font-size: 11px; color: #8d84ab; border-left: 2px solid rgba(157,146,196,.4); padding-left: 6px; }

/* ---- 设置弹层 ---- */
#settings-mask {
  position: fixed; inset: 0; z-index: 500; background: rgba(5,7,12,.6);   /* v4.14 升到 500：开局页（400）上也能开设置 */
  display: flex; align-items: center; justify-content: center; backdrop-filter: blur(3px);
}
/* v4.74 布局重排（参照主流游戏设置页）：左栏分类导航＋右侧内容区＋底部常驻操作条 */
#settings {
  width: min(780px, 94vw); height: min(76vh, 720px);
  display: flex; flex-direction: column; overflow: hidden;
  background: rgba(20,25,46,.76); border: 1px solid rgba(216,180,106,.4);
  border-radius: 14px; box-shadow: 0 18px 60px rgba(0,0,0,.55);
}
.st-head { display: flex; align-items: center; gap: 10px; padding: 13px 16px 10px 20px; }
.st-title { font-size: 15px; letter-spacing: 4px; color: #d8b46a; flex: 1; margin: 0; }
.st-close { width: 26px !important; height: 24px !important; font-size: 13px !important; line-height: 1 !important; }
.st-frame { flex: 1 1 auto; min-height: 0; display: flex; }
.st-nav {
  flex: 0 0 150px; overflow-y: auto; display: flex; flex-direction: column; gap: 6px;
  padding: 14px 10px; border-right: 1px dashed rgba(216,180,106,.25);
}
.st-nav-btn {
  text-align: left; font-family: inherit; font-size: 13px; letter-spacing: 1px; color: #9d92c4;
  background: transparent; border: 1px solid transparent; border-radius: 8px;
  padding: 9px 12px; cursor: pointer; transition: background .15s, color .15s, border-color .15s;
}
.st-nav-btn:hover { color: #e8d9b0; background: rgba(125,106,168,.18); }
.st-nav-btn.on {
  color: #ffe0a3; background: rgba(216,180,106,.16);
  border-color: rgba(216,180,106,.5); box-shadow: inset 3px 0 0 #d8b46a;
}
.st-cats { flex: 1 1 auto; min-width: 0; }
.st-cat { height: 100%; overflow-y: auto; padding: 14px 22px 18px; display: none; }
.st-cat-title {
  font-size: 13px; letter-spacing: 3px; color: #e8c98a;
  border-bottom: 1px dashed rgba(216,180,106,.28); padding-bottom: 8px; margin-bottom: 10px;
}
.st-sub {
  font-size: 12px; letter-spacing: 2px; color: #e8c98a;
  border-top: 1px dashed rgba(216,180,106,.3); margin-top: 16px; padding-top: 10px;
}
.st-sec { font-size: 12px; letter-spacing: 3px; color: #e8c98a; border-top: 1px dashed rgba(216,180,106,.3);
  margin-top: 18px; padding-top: 10px; }
#settings label { display: block; font-size: 12px; color: #9d92c4; margin: 10px 0 4px; }
#settings input, #settings select {
  width: 100%; font-family: inherit; font-size: 13px; color: #ece7f5; margin-top: 4px;
  background: rgba(10,13,24,.6); border: 1px solid rgba(125,106,168,.5);
  border-radius: 8px; padding: 7px 10px; outline: none;
}
#settings input:focus, #settings select:focus { border-color: #d8b46a; }
#settings label.chk { display: flex; align-items: center; gap: 8px; cursor: pointer; }
#settings label.chk input { width: auto; margin-top: 0; }
#settings label.chk + label.chk { margin-top: 6px; }
#settings .st-note { margin: 12px 0 0; }
.st-foot {
  display: flex; align-items: center; gap: 14px; flex: 0 0 auto;
  padding: 10px 18px 14px; border-top: 1px dashed rgba(216,180,106,.28);
}
.st-foot-note { flex: 1 1 auto; margin: 0 !important; }
.st-btns { display: flex; gap: 10px; justify-content: flex-end; flex: 0 0 auto; margin: 0; }
.st-btns button {
  font-family: inherit; font-size: 13px; cursor: pointer; border-radius: 8px; padding: 6px 18px;
  border: 1px solid rgba(125,106,168,.6); background: rgba(125,106,168,.2); color: #ece7f5;
}
.st-btns button:first-child { background: linear-gradient(120deg, #d8b46a, #b8934a); color: #1a1626; border: none; }
@media (max-width: 700px) {
  #settings { width: 96vw; }
  .st-nav { flex-basis: 118px; padding: 10px 8px; }
  .st-nav-btn { font-size: 12px; padding: 8px 8px; }
  .st-cat { padding: 12px 14px 16px; }
  .st-foot-note { display: none; }
}

::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-thumb { background: rgba(125,106,168,.4); border-radius: 4px; }
::-webkit-scrollbar-track { background: transparent; }

/* ---- GM 气泡内嵌角色立绘（多立绘侧栏切换） ---- */
/* v0.13 左图右文：立绘浮于气泡内左，叙事环绕其右 */
.gm-art { float: left; display: flex; gap: 8px; margin: 4px 14px 6px 0; align-items: flex-start; }
.msg .bubble::after { content: ''; display: block; clear: both; }   /* 气泡包住浮动立绘 */
.ga-main { flex: 0 0 auto; }
.ga-img {
  width: 132px; height: 170px; object-fit: cover; border-radius: 10px; display: block;
  border: 1px solid rgba(216,180,106,.5); background: rgba(10,13,24,.4);
  box-shadow: 0 6px 22px rgba(0,0,0,.45);
}
.ga-img.ga-wait, .ga-img-th.ga-wait {
  display: flex; align-items: center; justify-content: center; font-size: 11px; color: #6a6488;
}
.ga-side { display: flex; flex-direction: column; gap: 6px; max-height: 170px; overflow-y: auto; }
.ga-th {
  display: flex; flex-direction: column; align-items: center; gap: 2px; cursor: pointer;
  font-size: 9.5px; color: #8d84ab; opacity: .6; transition: opacity .2s;
}
.ga-th.on, .ga-th:hover { opacity: 1; }
.ga-th.on .ga-img-th { border-color: #d8b46a; box-shadow: 0 0 8px rgba(216,180,106,.4); }
.ga-img-th {
  width: 42px; height: 54px; object-fit: cover; border-radius: 7px; display: block;
  border: 1px solid rgba(157,146,196,.45); background: rgba(10,13,24,.4);
}

/* ---- 行旅图沙盘账页签 ---- */
#mp-sandbox { max-height: 330px; overflow-y: auto; padding: 8px 12px 12px; font-size: 11.5px; color: #d5cfe2; }
.snd-k { font-size: 10.5px; letter-spacing: 2px; color: #d8b46a; margin: 9px 0 5px; border-bottom: 1px dashed rgba(216,180,106,.25); padding-bottom: 3px; }
.snd-facs { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.snd-fac { background: rgba(157,146,196,.1); border: 1px solid rgba(157,146,196,.3); border-radius: 8px; padding: 5px 8px; }
.snd-fac b { color: #e8d9b0; font-weight: normal; font-size: 12px; }
.snd-sub { font-size: 9.5px; color: #8d84ab; display: block; }
.snd-desc { font-size: 9.5px; color: #6a6488; display: block; margin-top: 1px; }
.snd-posts { display: grid; grid-template-columns: 1fr 1fr; gap: 3px 8px; }
.snd-row { padding: 2px 0; border-bottom: 1px dotted rgba(125,106,168,.2); }
.snd-row b { color: #ece7f5; font-weight: normal; }
.snd-row.war b, .snd-row.war { color: #e88a5a; }
.snd-his { padding: 2px 0; border-bottom: 1px dotted rgba(125,106,168,.15); line-height: 1.6; }
#mp-sand.on { color: #e8d9b0; background: rgba(216,180,106,.18); }

/* ---- 节点角标与 tooltip 沙盘行 ---- */
.nm-badge { font-size: 9px; pointer-events: none; }
.nm-badge.war { fill: #e88a5a; }
.nm-badge.shop { fill: #d8b46a; }
.mt-row.war { color: #e88a5a; }
.mt-shopbtn {
  font-family: inherit; font-size: 10px; cursor: pointer; margin-left: 6px;
  color: #1a1626; background: linear-gradient(120deg, #e8d9b0, #d8b46a);
  border: none; border-radius: 6px; padding: 1px 8px;
}
/* ---- v0.10 tooltip 历程兑换区 ---- */
#maptip .mt-ex { margin-top: 5px; border-top: 1px dashed rgba(157,146,196,.3); padding-top: 4px; }
#maptip .mt-exlist { display: flex; flex-direction: column; gap: 3px; margin-top: 3px; }
#maptip .mt-exbtn {
  font-family: inherit; font-size: 10px; cursor: pointer; text-align: left;
  color: #d8d0e8; background: rgba(60,54,96,.38); border: 1px solid rgba(157,146,196,.38);
  border-radius: 6px; padding: 3px 7px; display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap;
}
#maptip .mt-exbtn:hover { background: rgba(216,180,106,.22); border-color: rgba(216,180,106,.6); }
#maptip .mt-exbtn b { color: #e8d9b0; font-weight: normal; }
#maptip .mt-excost { color: #d8b46a; }
#maptip .mt-exdesc { color: #6a6488; font-size: 9px; flex-basis: 100%; }

/* ---- 沙盘商店面板 ---- */
#shoppanel {
  position: fixed; right: 372px; bottom: 76px; z-index: 57; width: 330px;
  background: rgba(20,25,46,.66); border: 1px solid rgba(216,180,106,.55);
  border-radius: 12px; backdrop-filter: blur(8px); box-shadow: 0 10px 34px rgba(0,0,0,.5);
  display: flex; flex-direction: column; overflow: hidden;
}
.sh-head { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid rgba(216,180,106,.35); }
.sh-title { font-size: 13px; color: #e8d9b0; letter-spacing: 1px; }
.sh-money { font-size: 10.5px; color: #8d84ab; }
.sh-money b { color: #e8d9b0; }
.sh-body { padding: 8px 12px 12px; max-height: calc(100vh - 220px); overflow-y: auto; }
.sh-k { font-size: 11px; letter-spacing: 2px; color: #d8b46a; margin-bottom: 5px; }
.sh-sub { font-size: 9px; color: #8d84ab; letter-spacing: 0; }
.sh-item {
  display: flex; flex-direction: column; gap: 1px; cursor: pointer; padding: 6px 9px; margin-bottom: 5px;
  background: rgba(157,146,196,.1); border: 1px solid rgba(157,146,196,.35); border-radius: 8px;
  transition: all .15s;
}
.sh-item:hover { border-color: #d8b46a; background: rgba(216,180,106,.12); }
.sh-item.sell { background: rgba(125,106,168,.08); }
.sh-nm { font-size: 12.5px; color: #ece7f5; display: flex; align-items: center; gap: 6px; }
.sh-tier { font-style: normal; font-size: 9px; border-radius: 5px; padding: 0 5px; }
.sh-tier.t1 { color: #9aa0b4; border: 1px solid rgba(154,160,180,.5); }
.sh-tier.t2 { color: #7ec88a; border: 1px solid rgba(126,200,138,.5); }
.sh-tier.t3 { color: #6ab8e8; border: 1px solid rgba(106,184,232,.55); }
.sh-tier.t4 { color: #e8c85a; border: 1px solid rgba(232,200,90,.6); }
.sh-cnt { font-style: normal; font-size: 9.5px; color: #8d84ab; }
.sh-ds { font-size: 10px; color: #8d84ab; }
.sh-pr { font-size: 10.5px; color: #e8d9b0; }
.sh-none { font-size: 10.5px; color: #6a6488; padding: 4px 2px; }

/* 立绘占位：虚线小框，生成完成即被回填替换 */
.ga-img.ga-wait, .ga-img-th.ga-wait {
  border-style: dashed; border-color: rgba(157,146,196,.4); background: rgba(10,13,24,.22);
  flex-direction: column; gap: 4px; color: #6a6488;
}
.ga-img.ga-wait b { font-weight: normal; color: #9d92c4; font-size: 12px; }
.ga-img.ga-wait span { font-size: 9.5px; }
.ga-img.ga-wait.ga-failed, .ga-img-th.ga-wait.ga-failed { border-color: rgba(192,80,80,.45); }
.ga-img.ga-wait.ga-failed span { color: #a06070; }   /* v0.12 绘败：不再永远"绘中" */
@media (max-width: 1100px) { #battlebar { margin-right: 26px; } }

/* ---- v0.11 版本徽章 ---- */
#ver-badge { font-size: 10px; color: #6a6488; letter-spacing: 1px; margin-left: 8px; font-weight: normal; }

/* ================= v1.1 事件层 ================= */
/* 战/亲确认窗：必须回答 */
#scenemask { position: fixed; inset: 0; background: rgba(6,8,16,.72); z-index: 90; display: flex; align-items: center; justify-content: center; }
#scenedlg { width: 380px; background: #141828; border: 1px solid rgba(232,200,90,.5); border-radius: 10px; padding: 18px; box-shadow: 0 8px 40px rgba(0,0,0,.6); }
#askmask { position: fixed; inset: 0; background: rgba(6,8,16,.72); z-index: 91; display: flex; align-items: center; justify-content: center; }
#askdlg { width: 430px; max-width: 92vw; background: #141828; border: 1px solid rgba(232,200,90,.5); border-radius: 10px; padding: 18px; box-shadow: 0 8px 40px rgba(0,0,0,.6); }
#askdlg .sc-note { font-size: 10.5px; color: #8d84ab; margin-top: 10px; text-align: center; }
.sc-k { font-size: 15px; color: #e8c85a; letter-spacing: 3px; text-align: center; margin-bottom: 10px; }
.sc-body { font-size: 12.5px; color: #cfc6e8; line-height: 1.8; margin-bottom: 14px; }
.sc-body b { color: #e8d9b0; }
.sc-btns { display: flex; gap: 10px; }
.sc-btns button { flex: 1; padding: 9px 0; border-radius: 6px; border: 1px solid rgba(157,146,196,.4); background: #1c2138; color: #cfc6e8; cursor: pointer; font-size: 13px; }
.sc-btns button.primary { background: rgba(232,200,90,.16); border-color: rgba(232,200,90,.65); color: #e8c85a; }
.sc-btns button:hover { filter: brightness(1.25); }
.sc-note { margin-top: 10px; font-size: 10px; color: #6a6488; text-align: center; }

/* 事件圆标 dock：右上可拖；v4.67 放大/缩小弃 css zoom，改右下角拖拽（行旅日志同款）——面板列向排布，列表超高时内滚 */
#evdock { position: fixed; top: 52px; right: 300px; z-index: 60; background: rgba(20,25,46,.62); border: 1px solid rgba(216,180,106,.45); border-radius: 12px; padding: 6px 8px; min-width: 170px; min-height: 64px; max-width: min(420px, calc(100vw - 32px)); max-height: calc(100vh - 64px); display: flex; flex-direction: column; resize: both; overflow: hidden; backdrop-filter: blur(7px); box-shadow: 0 10px 34px rgba(0,0,0,.5); }   /* v4.70 行旅图同款面板；默认位置由 evdSnapToSpirit 按心图左缘算 */
#evdock .evd-head { display: flex; align-items: center; gap: 4px; flex: none; color: #d8b46a; }   /* v4.15 统计钮入行 */
#evdock .evd-mini { border: 1px solid rgba(216,180,106,.4); background: none; color: #d8b46a; border-radius: 5px; width: 20px; height: 18px; line-height: 1; cursor: pointer; font-size: 11px; padding: 0; }
#evdock .evd-mini:hover { color: #e8d9b0; border-color: rgba(216,180,106,.8); }
#evdock .evd-stats { font-size: 10px; color: #b8aed6; line-height: 1.7; border-top: 1px solid rgba(216,180,106,.25); margin-top: 4px; padding-top: 3px; flex: none; }
#evdock .evd-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(216,180,106,.45) rgba(20,25,46,.3); }
/* ---- v1.2.2 众生三区入心图（SVG 内）：牢记=内圆 / 中间十格=环间 / 遗忘=外圆外 ---- */
.spb-g { cursor: grab; }
.spb-g .spb-ring { fill: rgba(16,20,36,.85); stroke: rgba(157,146,196,.6); stroke-width: 1.6; }
.spb-g.keep .spb-ring { stroke: rgba(216,180,106,.75); }
.spb-g.forget { opacity: .62; }
.spb-g:hover .spb-ring { stroke: #e8d9b0; }
.spb-face { fill: rgba(20,26,48,.9); }
.spb-t0 { fill: #9d92c4; text-anchor: middle; pointer-events: none; }
.spb-nm { fill: #c5bcdf; font-size: 9px; text-anchor: middle; pointer-events: none; paint-order: stroke; stroke: rgba(10,12,24,.85); stroke-width: 3px; }
.spb-g.forget .spb-nm { fill: #7a7492; }
/* ---- v1.3 沙盘围攻进度/悬停战买/整编/同伴副栏/产业圆/代管双圆 ---- */
.snd-bar { display: inline-block; width: 90px; height: 7px; background: rgba(255,255,255,.08); border-radius: 4px; margin: 0 6px; vertical-align: middle; overflow: hidden; }
.snd-bar i { display: block; height: 100%; background: linear-gradient(90deg, #8b4a4a, #d8b46a); border-radius: 4px; }
.snd-fac.dead { opacity: .45; }
.mt-warbtn:disabled, .mt-buy:disabled { opacity: .45; cursor: not-allowed; }
.mt-buy { margin-left: 6px; }
#wp-compose { padding: 14px 18px; }
.wpc-title { font-size: 15px; color: #ecd9a8; margin-bottom: 8px; letter-spacing: 2px; }
.wpc-row { margin: 8px 0; font-size: 12.5px; color: #c5bcdf; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.wpc-row input[type=number] { width: 52px; background: rgba(10,14,28,.7); border: 1px solid rgba(157,146,196,.4); color: #e8e2f2; border-radius: 5px; padding: 2px 6px; }
.wpc-gen { display: inline-flex; align-items: center; gap: 3px; margin-right: 8px; cursor: pointer; }
.cp-cols { display: flex; gap: 8px; }
.cp-col { flex: 1; min-width: 0; }
.cp-right { border-left: 1px dashed rgba(216,180,106,.35); padding-left: 8px; max-width: 46%; }
.cp-subtitle { font-size: 10px; color: #d8b46a; letter-spacing: 2px; margin: 2px 0 4px; }
.cp-sub-one { cursor: grab; border: 1px solid rgba(216,180,106,.45); border-radius: 8px; }
.ed-events { display: flex; gap: 8px; padding: 6px 12px; }
.spic-g { cursor: grab; }
.spic-ring { fill: rgba(30,26,16,.85); stroke: rgba(216,180,106,.75); stroke-width: 1.6; }
.spic-g:hover .spic-ring { stroke: #fff2d0; }
.spic-face { fill: rgba(40,32,18,.9); }
.spic-t0 { fill: #d8b46a; text-anchor: middle; pointer-events: none; }
.spic-nm { fill: #c9b478; font-size: 8.5px; text-anchor: middle; pointer-events: none; paint-order: stroke; stroke: rgba(10,12,24,.85); stroke-width: 3px; }
/* v1.9.0 帮工圆：青灰色工字圆——免费、可拖入槽计历程、可拖出心图遗忘 */
.spic-ring.spic-chore { stroke: rgba(150,190,200,.8); stroke-dasharray: 4 3; }
.spic-g:hover .spic-ring.spic-chore { stroke: #d8f0f4; }
.spic-face.spic-chore { fill: rgba(22,38,42,.92); }
.spic-t0.spic-t0c { fill: #a8ccd4; }
/* v1.9.3 部曲圆：铁赤配色（聚散之兵，同帮工圆可拖出遗忘） */
.spic-ring.spic-troop { stroke: rgba(200,140,120,.8); stroke-dasharray: 4 3; }
.spic-g:hover .spic-ring.spic-troop { stroke: #f0d0c0; }
.spic-face.spic-troop { fill: rgba(42,24,22,.92); }
.spic-t0.spic-t0t { fill: #d4a898; }
/* v1.9.2 无常飘词层：词在主叙事之外——透明斜体从屏上飘过；厄运回合暗红天幕如沙尘暴 */
#omen-drift { position: fixed; inset: 0; pointer-events: none; z-index: 40; overflow: hidden; }
#omen-drift .od-w { position: absolute; left: 0; pointer-events: auto; cursor: grab; user-select: none;
  font-style: italic; color: rgba(200,120,110,.34); letter-spacing: 2px; white-space: nowrap;
  text-shadow: 0 0 8px rgba(160,80,70,.25); animation: odDrift linear infinite; will-change: transform; }
#omen-drift .od-w.calm { color: rgba(150,170,150,.16); text-shadow: none; }
#omen-drift .od-w.pinned { color: rgba(226,170,150,.72); text-shadow: 0 0 10px rgba(200,110,90,.5); cursor: pointer; }   /* v1.9.5 钉住的词可单击放生 */
#omen-drift .od-w:active { cursor: grabbing; }
@keyframes odDrift {
  from { transform: translateX(108vw) translateY(0); }
  50%  { transform: translateX(45vw) translateY(-14px); }
  to   { transform: translateX(-24vw) translateY(6px); }
}
/* 厄运回合：暗红天幕——两团沙尘色雾反向缓移，朦胧如沙暴前的黄昏 */
#omen-drift.doom::before, #omen-drift.doom::after { content: ''; position: absolute; inset: -20%;
  pointer-events: none; }
#omen-drift.doom::before { background:
  radial-gradient(38% 30% at 22% 30%, rgba(120,40,30,.20), transparent 70%),
  radial-gradient(45% 36% at 75% 62%, rgba(140,60,35,.16), transparent 72%),
  radial-gradient(60% 42% at 50% 100%, rgba(90,30,26,.22), transparent 75%);
  animation: doomHazeA 26s ease-in-out infinite alternate; }
#omen-drift.doom::after { background:
  radial-gradient(30% 24% at 68% 22%, rgba(150,72,40,.14), transparent 70%),
  radial-gradient(42% 30% at 30% 78%, rgba(110,46,34,.18), transparent 72%);
  animation: doomHazeB 33s ease-in-out infinite alternate; }
@keyframes doomHazeA { from { transform: translate(-3%, -1%) scale(1); } to { transform: translate(3%, 2%) scale(1.06); } }
@keyframes doomHazeB { from { transform: translate(2%, 1%) scale(1.04); } to { transform: translate(-3%, -2%) scale(1); } }
#omen-drift.doom .od-w { color: rgba(216,130,110,.5); text-shadow: 0 0 10px rgba(180,90,70,.4); }
/* v4.24 天象氛围层 v2：全屏固定不抢焦点，参考无常层覆盖方式。
   日轮/日冕/地平辉光/粒子云团（上端积聚、随风加速）/粒子雨/丁达尔光柱/底雾＋粒子雾团/
   晴尘粒子/贴地雾——强度全走 CSS 变量（JS 按 weather_public 赋值），默认全隐，过渡 2.5s；
   风无线条，借云速、雾漂、雨粒方向与尘粒体现。 */
#weather-sky { position: fixed; inset: 0; pointer-events: none; z-index: 30; overflow: hidden; }
#weather-sky .wx-tint { position: absolute; inset: 0; opacity: .9;
  background: linear-gradient(165deg, var(--wx-season-c, rgba(127,168,192,0)) 0%,
              var(--wx-weather-c, rgba(255,170,90,0)) 100%); }
#weather-sky .wx-horizon { position: absolute; left: -10%; right: -10%; bottom: -4%; height: 30vh;
  opacity: var(--wx-horizon-o, 0); transition: opacity 2.5s ease;
  background: linear-gradient(to top, var(--wx-horizon-c, rgba(255,170,90,.30)) 0%, transparent 100%); }
#weather-sky .wx-sun-halo { position: absolute; left: 68%; bottom: 6%; width: 72vmin; height: 72vmin;
  transform: translate(-50%, -50%); border-radius: 50%; opacity: var(--wx-halo-o, 0);
  background: radial-gradient(circle, var(--wx-halo-c, rgba(255,210,140,.5)) 0%, transparent 62%);
  box-shadow: 0 0 6vmin 2vmin var(--wx-halo-c, rgba(255,210,140,.35)),
              0 0 18vmin 7vmin rgba(255,190,120,.16);
  animation: wxSunBreathe 7s ease-in-out infinite; transition: opacity 2.5s ease; }
#weather-sky .wx-sun-halo::after { content: ''; position: absolute; inset: 14%;
  border-radius: 50%; filter: blur(1vmin);
  background: radial-gradient(circle, rgba(255,238,196,.32) 0%, transparent 62%); }
#weather-sky .wx-sun-core { position: absolute; left: 68%; bottom: 6%; width: 27vmin; height: 27vmin;
  transform: translate(-50%, -50%); border-radius: 50%; opacity: var(--wx-sun-o, 0);
  background: radial-gradient(circle, #fff6dd 0%, var(--wx-core-c, #ffd9a0) 55%, transparent 72%);
  box-shadow: 0 0 3vmin 1vmin var(--wx-core-c, #ffd9a0);
  animation: wxSunPulse 7s ease-in-out infinite; transition: opacity 2.5s ease; }
@keyframes wxSunBreathe { 0%, 100% { filter: brightness(1); } 50% { filter: brightness(1.12); } }
@keyframes wxSunPulse {
  0%, 100% { transform: translate(-50%, -50%) scale(1); filter: brightness(1); }
  50%      { transform: translate(-50%, -50%) scale(1.07); filter: brightness(1.16); } }
#weather-sky .wx-clouds { position: absolute; inset: 0; opacity: var(--wx-cloud-o, 0);
  transition: opacity 2.5s ease; }
#weather-sky .wx-clouds i { position: absolute; border-radius: 50%; filter: blur(9px);
  background: radial-gradient(ellipse at center, rgba(206,216,228, var(--wx-cloud-a, .18)) 0%, transparent 70%);
  opacity: 0; animation: wxCloudPuff var(--cld-dur, 30s) linear infinite; will-change: transform, opacity; }
@keyframes wxCloudPuff {
  0%   { transform: translate3d(var(--cx0), var(--cy0), 0); opacity: 0; }
  14%  { opacity: var(--cld-o, .5); }
  50%  { transform: translate3d(calc((var(--cx0) + var(--cx1)) / 2),
                                calc((var(--cy0) + var(--cy1)) / 2 - 1.2vh), 0); }
  86%  { opacity: var(--cld-o, .5); }
  100% { transform: translate3d(var(--cx1), var(--cy1), 0); opacity: 0; }
}
/* v4.24 丁达尔光柱：以太阳（气象图标）为中心向下扇形展开，云雾越厚越显 */
#weather-sky .wx-rays { position: absolute; width: 200vmax; height: 200vmax; opacity: var(--wx-rays-o, 0);
  transform: translate(-50%, -50%); pointer-events: none; mix-blend-mode: screen; transition: opacity 2.5s ease;
  background: conic-gradient(from 0deg at 50% 50%,
    transparent 0 52deg, rgba(255,244,214,.10) 52deg 56deg, transparent 56deg 70deg,
    rgba(255,244,214,.08) 70deg 74deg, transparent 74deg 88deg,
    rgba(255,244,214,.06) 88deg 92deg, transparent 92deg 106deg,
    rgba(255,244,214,.07) 106deg 110deg, transparent 110deg 124deg,
    rgba(255,244,214,.05) 124deg 128deg, transparent 128deg 140deg,
    rgba(255,244,214,.04) 140deg 144deg, transparent 144deg 360deg);
  animation: wxRays 20s ease-in-out infinite alternate; }
@keyframes wxRays { from { transform: translate(-50%, -50%) rotate(-2.5deg); }
                    to { transform: translate(-50%, -50%) rotate(2.5deg); } }
/* v4.30 丁达尔增强：主光锥外再叠两层偏角光锥（不是单纯加深/提亮），并加太阳下方垂直光柱 */
#weather-sky .wx-rays::before,
#weather-sky .wx-rays::after { content: ''; position: absolute; inset: 0; border-radius: 50%;
  pointer-events: none; mix-blend-mode: screen; }
#weather-sky .wx-rays::before {
  background: conic-gradient(from 0deg at 50% 50%,
    transparent 0 60deg, rgba(255,236,190,.07) 60deg 62deg, transparent 62deg 96deg,
    rgba(255,236,190,.05) 96deg 98deg, transparent 98deg 132deg,
    rgba(255,236,190,.04) 132deg 134deg, transparent 134deg 360deg);
  animation: wxRaysDrift 26s ease-in-out infinite alternate; }
#weather-sky .wx-rays::after {
  background: conic-gradient(from 0deg at 50% 50%,
    transparent 0 66deg, rgba(255,226,180,.06) 66deg 68deg, transparent 68deg 102deg,
    rgba(255,226,180,.04) 102deg 104deg, transparent 104deg 138deg,
    rgba(255,226,180,.05) 138deg 140deg, transparent 140deg 360deg);
  animation: wxRaysDrift 34s ease-in-out infinite alternate-reverse; }
@keyframes wxRaysDrift {
  0%   { transform: rotate(-4deg); opacity: .8; }
  100% { transform: rotate(5deg); opacity: 1; } }
#weather-sky .wx-ray-column { position: absolute; width: 30vmin; height: 100vmax;
  transform: translate(-50%, 0); pointer-events: none; mix-blend-mode: screen;
  opacity: var(--wx-rays-o, 0); transition: opacity 2.5s ease;
  background: linear-gradient(to bottom, rgba(255,236,200,.16) 0%, transparent 100%);
  filter: blur(1.2vmin); }
  /* v4.35 丁达尔光尘全屏粒子场：位置/亮度全由 rAF 每帧写（transform+opacity），
     不受光照的粒子 opacity=0 隐形；样式只保留星芒反光闪烁（wxDustGlint 呼吸错峰） */
  #weather-sky .wx-ray-motes { position: fixed; inset: 0; pointer-events: none; }
  #weather-sky .wx-ray-motes i { position: absolute; left: 0; top: 0; width: 3px; height: 3px;
    border-radius: 50%; background: #fff3d8; opacity: 0;
    box-shadow: 0 0 2px 1px rgba(255,240,200,.6), 0 0 8px 3px rgba(255,220,150,.25);
    will-change: transform, opacity; }
  #weather-sky .wx-ray-motes i::after { content: ''; position: absolute; inset: -2px; border-radius: 50%;
    background: radial-gradient(circle, rgba(255,248,224,.95) 0%, rgba(255,238,190,.35) 35%, transparent 70%);
    opacity: 0; animation: wxDustGlint 3.2s ease-in-out infinite; animation-delay: var(--rd-gd, 0s); }
  @keyframes wxDustGlint {
  0%, 100% { opacity: 0; transform: scale(.55); }
  30% { opacity: .9; transform: scale(1.25); }
  60% { opacity: .3; transform: scale(.85); } }
/* v4.25 雨：粒子雨（参照晴尘粒子写法）——每粒落程带轻微随机横向漂移，大方向随风 */
#weather-sky .wx-rain { position: absolute; inset: 0; opacity: var(--wx-rain-o, 0);
  transition: opacity 2.5s ease; }
#weather-sky .wx-rain i { position: absolute; border-radius: 45% 45% 60% 60%;
  background: linear-gradient(to bottom, rgba(200,225,245,0) 0%,
              rgba(205,228,248, var(--rd-a, .55)) 60%, rgba(215,235,250, .8) 100%);
  opacity: 0; animation: wxDrop var(--rd-dur, 1s) linear infinite; will-change: transform, opacity; }
@keyframes wxDrop {
  0%   { transform: translate3d(var(--rx0), var(--ry0), 0); opacity: 0; }
  10%  { opacity: var(--rd-o, .5); }
  85%  { opacity: var(--rd-o, .5); }
  100% { transform: translate3d(var(--rx1), var(--ry1), 0); opacity: 0; }
}
/* v4.25 雾气：稀薄均匀底雾（占四成）+ 大粒子雾团（平滑生成/消散，随风缓漂） */
#weather-sky .wx-haze { position: absolute; inset: 0; opacity: var(--wx-haze-o, 0);
  transition: opacity 2.5s ease; background: var(--wx-fog-c, rgba(185,200,218,.12)); }
#weather-sky .wx-fog-p { position: absolute; inset: 0; opacity: var(--wx-fog-p-o, 0);
  transition: opacity 2.5s ease; }
#weather-sky .wx-fog-p i { position: absolute; border-radius: 50%; filter: blur(15px);
  background: radial-gradient(ellipse at center, var(--wx-fog-c, rgba(185,200,218,.16)) 0%, transparent 70%);
  opacity: 0; animation: wxFogPuff var(--fg-dur, 34s) ease-in-out infinite; will-change: transform, opacity; }
@keyframes wxFogPuff {
  0%   { transform: translate3d(var(--fx0), var(--fy0), 0) scale(.96); opacity: 0; }
  20%  { opacity: var(--fg-o, .45); }
  80%  { opacity: var(--fg-o, .45); }
  100% { transform: translate3d(var(--fx1), var(--fy1), 0) scale(1.06); opacity: 0; }
}
#weather-sky .wx-mist { position: absolute; left: -10%; right: -10%; bottom: -6%; height: 24vh;
  opacity: var(--wx-mist-o, 0); transition: opacity 2.5s ease;
  background: radial-gradient(60% 100% at 50% 100%, var(--wx-mist-c, rgba(180,200,220,.5)) 0%, transparent 75%);
  filter: blur(4px); animation: wxMist 14s ease-in-out infinite alternate; }
@keyframes wxMist { from { transform: translateX(-2%); } to { transform: translateX(2%); } }
/* v4.24 天象小图标：贴立绘右上，不占手账栏布局；悬停浮出详情框 */
#hud-avatar { position: relative; }
  #wx-mini { position: absolute; left: auto; right: 4px; top: 127px; width: 34px; height: 34px; z-index: 6;
  display: flex; align-items: center; justify-content: center; font-size: 17px; cursor: default;
  border-radius: 50%; background: rgba(14,18,30,.72); border: 1px solid var(--wx-mini-c, rgba(216,180,106,.6));
  box-shadow: 0 2px 10px rgba(0,0,0,.45), inset 0 0 8px var(--wx-mini-c, transparent);
  text-shadow: 0 0 8px currentColor; transition: border-color .6s ease, box-shadow .6s ease; }
#wx-tip { position: fixed; z-index: 400; width: 236px; padding: 8px 10px;
  border: 1px solid rgba(216,180,106,.5); border-radius: 6px; background: rgba(14,14,24,.96);
  box-shadow: 0 4px 18px rgba(0,0,0,.6); pointer-events: none; font-size: 11px; line-height: 1.7; }
#wx-tip .wx-tip-name { font-size: 13px; font-weight: 600; margin-bottom: 3px; }
#wx-tip .wx-tip-row { font-size: 10px; color: #b9b3a8; line-height: 1.6; white-space: nowrap; }
#wx-tip .wx-tip-row b { color: #e8d9b0; font-weight: normal; }
#wx-tip .wx-tip-div { border-top: 1px dashed rgba(125,106,168,.35); margin-top: 4px; padding-top: 4px; }
.sp-est { stroke: rgba(216,180,106,.85) !important; }
.sp-est-g { fill: #d8b46a; font-size: 9px; text-anchor: middle; pointer-events: none; }
.sp-link { stroke: rgba(216,180,106,.8); stroke-width: 1.6; }
.sp-agent-ring { fill: rgba(16,20,36,.9); stroke: rgba(140,190,255,.8); stroke-width: 1.4; }
.sp-agent-t { fill: #9fc4ff; font-size: 8px; text-anchor: middle; pointer-events: none; }
.sp-agent-nm { fill: #9fc4ff; font-size: 8px; text-anchor: middle; pointer-events: none; paint-order: stroke; stroke: rgba(10,12,24,.85); stroke-width: 3px; }
.sp-zone { fill: rgba(157,146,196,.5); font-size: 11px; text-anchor: middle; letter-spacing: 3px; pointer-events: auto; cursor: help; }   /* v4.73 让两圆一竖区域词可悬停出左栏同款说明 */
.sp-ks { fill: #4a4260; stroke: rgba(216,180,106,.35); stroke-width: 1; cursor: pointer; }
.sp-ks.on { fill: #d8b46a; stroke: #e8d9b0; }
.sp-ks:hover { fill: #e8d9b0; }
.sp-ks-cap { fill: #8d84ab; font-size: 8.5px; text-anchor: middle; pointer-events: auto; cursor: help; }   /* v4.73 牢记读数可悬停 */
.spp-img { text-align: center; margin: 6px 0; }
.spp-img img { width: 96px; height: 96px; object-fit: cover; border-radius: 50%; border: 2px solid rgba(216,180,106,.5); }
.spp-ex { font-size: 10px; color: #8d84ab; margin: 3px 0; line-height: 1.5; }
/* ---- v1.2 死斗弹层/战报区 ---- */
#duel-pop { position: fixed; inset: 0; z-index: 120; background: rgba(8,10,20,.55); display: flex; align-items: center; justify-content: center; }
.duel-box { width: 320px; background: rgba(20,26,48,.97); border: 1px solid rgba(216,180,106,.6); border-radius: 12px; padding: 16px; text-align: center; box-shadow: 0 8px 40px rgba(0,0,0,.6); }
.duel-title { font-size: 17px; color: #e8d9b0; letter-spacing: 4px; margin-bottom: 8px; }
.duel-sub { font-size: 11px; color: #b8aed6; line-height: 1.8; margin-bottom: 14px; text-align: left; }
.duel-btns { display: flex; gap: 12px; justify-content: center; }
.duel-yes { flex: 1; padding: 8px; background: linear-gradient(160deg,#7a4a3a,#5a3226); color: #ffe9c9; border: 1px solid #d8b46a; border-radius: 8px; cursor: pointer; font-size: 14px; }
.duel-no { flex: 1; padding: 8px; background: #232a45; color: #9d92c4; border: 1px solid #3a4468; border-radius: 8px; cursor: pointer; font-size: 14px; }
.wp-reports { max-height: 74px; overflow-y: auto; border-bottom: 1px dashed rgba(216,180,106,.35); margin-bottom: 4px; padding-bottom: 3px; }
.wp-reports .wpr { font-size: 10px; color: #d8b46a; line-height: 1.7; }
.wp-reports .wpr b { color: #e8d9b0; margin-right: 4px; }
.inp-softbad { border-color: #a03a3a !important; color: #f0c9a0 !important; background: rgba(80,20,20,.25) !important; }
.evd-head { font-size: 11px; color: #d8b46a; letter-spacing: 2px; cursor: move; user-select: none; padding: 2px 4px 6px; border-bottom: 1px solid rgba(216,180,106,.3); }
.evd-pulse { float: right; color: #6a6488; font-size: 10px; letter-spacing: 0; }
.evd-list { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 8px; }
.ev-circle { width: 62px; text-align: center; cursor: pointer; position: relative; }
.ev-circle .ev-ball { width: 46px; height: 46px; margin: 0 auto; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 20px; background: radial-gradient(circle at 35% 30%, #252c4e, #12162a); border: 1.5px solid rgba(157,146,196,.45); position: relative; }
.ev-circle.ready .ev-ball { border-color: #e8c85a; box-shadow: 0 0 10px rgba(232,200,90,.35); }
.ev-circle.done .ev-ball { border-color: rgba(159,211,168,.6); opacity: .75; }
.ev-name { font-size: 10px; color: #cfc6e8; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ev-cd { position: absolute; top: -4px; right: 4px; min-width: 16px; height: 16px; border-radius: 8px; background: #252c4e; border: 1px solid rgba(157,146,196,.5); font-size: 9.5px; color: #d8b46a; display: flex; align-items: center; justify-content: center; padding: 0 3px; }
.ev-circle.ready .ev-cd { color: #9fd3a8; border-color: rgba(159,211,168,.6); }
.ev-stars { display: flex; justify-content: center; gap: 2px; margin-top: 2px; }
.ev-star { width: 12px; height: 12px; border-radius: 50%; border: 1px solid rgba(157,146,196,.5); background: #0d1020; cursor: pointer; padding: 0; }
.ev-star.on { background: radial-gradient(circle at 40% 35%, #8a7ae0, #4a3d99); border-color: #9d92c4; box-shadow: 0 0 6px rgba(138,122,224,.6); }

/* 特殊对话窗 */
#evdlg { position: fixed; top: 210px; right: 404px; width: 340px; z-index: 70; background: #141828; border: 1px solid rgba(157,146,196,.45); border-radius: 10px; display: flex; flex-direction: column; box-shadow: 0 8px 40px rgba(0,0,0,.55); }
.ed-head { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-bottom: 1px solid rgba(157,146,196,.2); }
.ed-title { font-size: 13px; color: #e8d9b0; }
.ed-sub { font-size: 10.5px; color: #8d84ab; }
.ed-syn { font-size: 11px; color: #9d92c4; line-height: 1.7; padding: 8px 12px; border-bottom: 1px dashed rgba(157,146,196,.2); max-height: 72px; overflow-y: auto; }
.ed-log { flex: 1; min-height: 120px; max-height: 260px; overflow-y: auto; padding: 8px 12px; display: flex; flex-direction: column; gap: 6px; }
.ed-m { font-size: 12px; line-height: 1.7; padding: 6px 9px; border-radius: 8px; max-width: 88%; }
.ed-m.me { align-self: flex-end; background: rgba(138,122,224,.16); color: #cfc6e8; }
.ed-m.he { align-self: flex-start; background: rgba(232,200,90,.1); color: #e8d9b0; }
.ed-fin { margin: 4px 12px; font-size: 11px; color: #9fd3a8; line-height: 1.7; }
.ed-hint { font-size: 10px; color: #6a6488; padding: 4px 12px; }
.ed-input { display: flex; gap: 6px; padding: 8px 12px 10px; border-top: 1px solid rgba(157,146,196,.2); }
.ed-input input { flex: 1; background: #0d1020; border: 1px solid rgba(157,146,196,.35); border-radius: 6px; color: #cfc6e8; padding: 7px 9px; font-size: 12px; outline: none; }
.ed-input button { background: rgba(232,200,90,.16); color: #e8c85a; border: 1px solid rgba(232,200,90,.5); border-radius: 6px; padding: 0 14px; cursor: pointer; }
.ed-input button:disabled { opacity: .4; cursor: default; }

/* 心图内 同伴/势力 区 */
#sp-comps, #sp-facs { padding: 6px 10px; border-top: 1px dashed rgba(157,146,196,.2); }
/* 旧伤册（v0.3 创伤一族的 UI 之家） */
#sp-wounds { padding: 6px 10px; border-top: 1px dashed rgba(157,146,196,.2); }
.wnd-empty { font-size: 11px; color: #6a6488; padding: 2px 0 6px; }
.wnd-one { border: 1px solid rgba(157,146,196,.28); border-radius: 6px; padding: 6px 8px; margin-bottom: 6px; background: rgba(13,16,32,.55); }
.wnd-one.locked { border-color: rgba(214,120,120,.55); box-shadow: 0 0 6px rgba(214,120,120,.18); }
.wnd-one.cleared { opacity: .82; }
.wnd-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.wnd-name { font-size: 12.5px; color: #e8ddc8; letter-spacing: 1px; }
.wnd-state { font-size: 10px; color: #8d84ab; white-space: nowrap; }
.wnd-one.locked .wnd-state { color: #d68a8a; }
.wnd-desc { font-size: 11px; color: #b3a8d0; font-style: italic; margin: 3px 0; line-height: 1.5; }
.wnd-meta { font-size: 10px; color: #6a6488; line-height: 1.6; }
.wnd-face { margin-top: 5px; width: 100%; }
.cp-title { font-size: 10.5px; color: #8d84ab; letter-spacing: 2px; margin-bottom: 6px; }
.cp-list { display: flex; flex-wrap: wrap; gap: 10px; }
.cp-one { width: 56px; text-align: center; cursor: pointer; position: relative; }
.cp-ava { width: 44px; height: 44px; margin: 0 auto; border-radius: 50%; overflow: hidden; border: 1.5px solid rgba(157,146,196,.45); background: #0d1020; display: flex; align-items: center; justify-content: center; font-size: 18px; color: #6a6488; position: relative; }
.cp-ava img { width: 100%; height: 100%; object-fit: cover; }
.cp-one.locked .cp-ava { border-color: #e8c85a; box-shadow: 0 0 8px rgba(232,200,90,.4); }
.cp-one.cant .cp-ava { opacity: .55; }
.cp-name { font-size: 10px; color: #cfc6e8; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cp-fav { font-size: 9.5px; color: #d8b46a; }
.cp-star { position: absolute; top: -3px; right: 2px; width: 13px; height: 13px; border-radius: 50%; border: 1px solid rgba(157,146,196,.55); background: #0d1020; cursor: pointer; padding: 0; z-index: 2; }
.cp-star.on { background: radial-gradient(circle at 40% 35%, #8a7ae0, #4a3d99); border-color: #9d92c4; box-shadow: 0 0 6px rgba(138,122,224,.65); }
.fc-stars { position: absolute; top: -3px; right: 0; display: flex; gap: 1.5px; z-index: 2; }   /* v1.2 势力 3 星 */
.fc-stars .ev-star { width: 9px; height: 9px; }
.ev-star.lk { cursor: not-allowed; font-size: 7px; line-height: 10px; border-color: rgba(216,180,106,.6); }   /* v1.2 事件惯性锁定 */
.cp-ally { position: absolute; top: -5px; left: 0; font-size: 10px; }
.cp-none { font-size: 10.5px; color: #6a6488; padding: 2px 0 6px; }
/* v3.0 清葬：#sp-job/.job-chip 受雇 chip 样式已删（受雇圆统一） */

/* 人事/账目栏：底部常驻，可折叠——收起只剩一条迷你摘要，绝不盖输入条 */
#ledgerbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 55; background: rgba(13,16,32,.96); border-top: 1px solid rgba(157,146,196,.3); }
.lb-head { display: flex; align-items: center; gap: 4px; height: 30px; padding: 0 10px; }
.lb-tab { padding: 3px 10px; font-size: 11px; color: #8d84ab; cursor: pointer; letter-spacing: 1px; border-radius: 5px; }
.lb-tab:hover { color: #cfc6e8; }
.lb-tab.on { color: #e8c85a; background: rgba(232,200,90,.1); }
#ledgerbar.collapsed .lb-tab { display: none; }
#ledgerbar.collapsed .lb-tab.on { display: inline; }
.lb-mini { font-size: 10.5px; color: #6a6488; margin-left: 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#lb-fold { font-size: 10px; padding: 2px 9px; white-space: nowrap; flex: none; }
.lb-body { height: 64px; padding: 4px 14px; font-size: 11.5px; color: #cfc6e8; overflow-y: auto; display: flex; align-items: center; flex-wrap: wrap; gap: 6px 18px; border-top: 1px dashed rgba(157,146,196,.2); }
.lb-money { color: #e8d9b0; font-size: 12.5px; }
.lb-pos { color: #9fd3a8; }
.lb-neg { color: #c05050; }
.lb-sub { color: #6a6488; font-size: 10.5px; }
.lb-row { display: flex; gap: 14px; flex-wrap: wrap; width: 100%; }
.lb-cell b { color: #e8d9b0; font-weight: normal; }
.lb-chk { color: #9d92c4; font-size: 10.5px; cursor: pointer; }
.lb-chk input { vertical-align: -1px; }

/* ================= v1.1 战棋/产业 ================= */
#warpanel { position: fixed; top: 60px; left: 50%; transform: translateX(-50%); z-index: 65; background: rgba(13,16,32,.97); border: 1px solid rgba(192,80,80,.5); border-radius: 12px; box-shadow: 0 12px 50px rgba(0,0,0,.7); }
.wp-head { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-bottom: 1px solid rgba(192,80,80,.35); }
.wp-title { font-size: 13.5px; color: #e8a090; letter-spacing: 2px; }
.wp-sub { font-size: 10.5px; color: #8d84ab; }
.wp-body { display: flex; gap: 10px; padding: 10px 14px; }
#wp-svg { width: 450px; height: 450px; background: #0d1020; border-radius: 8px; }
.wp-side { width: 190px; display: flex; flex-direction: column; gap: 8px; }
.wp-log { flex: 1; max-height: 380px; overflow-y: auto; font-size: 10.5px; color: #cfc6e8; line-height: 1.8; }
.wp-log .wl-turn { color: #e8c85a; }
.wp-rot { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; }
.wp-rot button { width: 30px; height: 30px; background: #1c2138; border: 1px solid rgba(157,146,196,.4); color: #cfc6e8; border-radius: 6px; cursor: pointer; }
.wc-cell { stroke: rgba(157,146,196,.18); stroke-width: .5; }
.wc-cell.t-水 { fill: #1c3a5e; }
.wc-cell.t-滩 { fill: #6a5c3e; }
.wc-cell.t-原 { fill: #1e2b1e; }
.wc-cell.t-丘 { fill: #3d3226; }
.wc-cell.t-林 { fill: #24401f; }
.wc-cell.deploy-hi { fill: rgba(232,200,90,.18); cursor: pointer; }
.wc-cell.move-hi { fill: rgba(138,122,224,.28); cursor: pointer; }
.wu.shoot-hi circle { stroke: #e8c85a; stroke-width: 3; stroke-dasharray: 4 2; }
.wu { cursor: pointer; }
.wu circle { stroke-width: 1.5; }
.wu.me circle { fill: #2c3a6e; stroke: #8a7ae0; }
.wu.foe circle { fill: #5e2c2c; stroke: #c05050; }
.wu.sel circle { stroke: #e8c85a; stroke-width: 2.5; filter: drop-shadow(0 0 6px rgba(232,200,90,.6)); }
.wu text { fill: #e8d9b0; font-size: 9px; text-anchor: middle; pointer-events: none; }
.wu .wu-n { fill: #cfc6e8; font-size: 8px; }
.wu .wu-gen { font-size: 11px; }
.wu-face { stroke: #e8d9b0; stroke-width: 1.5; marker-end: url(#wp-arrow); }
.wp-banner { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 26px; letter-spacing: 8px; color: #e8c85a; background: rgba(13,16,32,.75); border-radius: 8px; }

/* 产业栏 */
.ind-card { width: 100%; background: rgba(28,33,56,.5); border: 1px solid rgba(157,146,196,.3); border-radius: 8px; padding: 7px 10px; margin: 4px 0; font-size: 11px; }
.ind-head { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ind-name { color: #e8d9b0; font-size: 12px; }
.ind-k { color: #8d84ab; font-size: 10px; }
.ind-nums { color: #cfc6e8; margin-top: 4px; display: flex; gap: 12px; flex-wrap: wrap; }
.ind-nums b { font-weight: normal; color: #e8d9b0; }
.ind-ops { margin-top: 5px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ind-ops select { background: #0d1020; color: #cfc6e8; border: 1px solid rgba(157,146,196,.35); border-radius: 5px; font-size: 10.5px; padding: 2px 4px; }
.ind-ops .mbtn { font-size: 10px; padding: 2px 8px; }
.buff-chip { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; height: 34px; padding: 0 6px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #3d2c5e, #1c1232); border: 1.5px solid rgba(192,140,232,.55); color: #d8b4e8; font-size: 9px; cursor: grab; text-align: center; }
.buff-chip.locked { opacity: .45; cursor: not-allowed; }
.buff-target { border: 1px dashed rgba(192,140,232,.5); border-radius: 6px; padding: 3px 8px; font-size: 10px; color: #d8b4e8; }
.buff-target.over { background: rgba(192,140,232,.15); }

/* ================= 存档位 ================= */
#saves-pop { position: fixed; top: 46px; right: 10px; z-index: 80; width: 300px; background: rgba(16,20,36,.97); border: 1px solid rgba(157,146,196,.45); border-radius: 10px; padding: 10px 12px; box-shadow: 0 8px 40px rgba(0,0,0,.6); }
.sv-title { font-size: 12px; color: #e8d9b0; letter-spacing: 2px; margin-bottom: 8px; }
.sv-title .lb-sub { letter-spacing: 0; margin-left: 6px; }
.sv-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 5px; margin-bottom: 8px; }
.sv-one { display: flex; align-items: center; gap: 8px; background: rgba(28,33,56,.6); border: 1px solid rgba(157,146,196,.25); border-radius: 7px; padding: 6px 9px; }
.sv-one .sv-nm { font-size: 12px; color: #cfc6e8; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sv-one .sv-bf { font-size: 9.5px; color: #6a6488; display: block; }
.sv-one button { flex: none; background: rgba(232,200,90,.14); color: #e8c85a; border: 1px solid rgba(232,200,90,.45); border-radius: 5px; font-size: 10.5px; padding: 3px 10px; cursor: pointer; }
.sv-saveas { display: flex; gap: 6px; border-top: 1px dashed rgba(157,146,196,.25); padding-top: 8px; }
.sv-saveas input { flex: 1; background: #0d1020; border: 1px solid rgba(157,146,196,.35); border-radius: 6px; color: #cfc6e8; padding: 6px 8px; font-size: 11.5px; outline: none; }
.sv-saveas button { background: rgba(138,122,224,.16); color: #b8a8f0; border: 1px solid rgba(138,122,224,.5); border-radius: 6px; padding: 0 12px; font-size: 11px; cursor: pointer; }

/* ================= v1.2 三国杀势力层（初渡城州地图） ================= */
.gk-grid { stroke: rgba(157,146,196,.10); stroke-width: .6; }
.gk-vor { fill-opacity: .14; stroke: none; }
.gk-rel.war { stroke: #c86464; stroke-width: 1.4; stroke-dasharray: 5 4; opacity: .55; }
.gk-rel.ally { stroke: #d8b46a; stroke-width: 1.4; opacity: .5; }
/* v1.6 旧圆环首都样式已随假黄点一并退役——首都是地点系统真节点（nm-node 大黄点）+ 旁侧 nm-flag 旗帜 */
.mt-gotorow { margin-top: 2px; }
.mt-goto { background: linear-gradient(180deg, rgba(216,180,106,.22), rgba(216,180,106,.08)); border: 1px solid rgba(216,180,106,.55); color: #ecd9a8; border-radius: 6px; padding: 2px 10px; font-size: 12px; cursor: pointer; }
.mt-goto:hover { background: rgba(216,180,106,.35); color: #fff2d0; }

/* ================= v1.2 八派栏（三国杀面板） ================= */
#lb-body:has(.goka-wrap) { height: 236px; align-items: flex-start; }   /* 八派面板账多：栏体撑高 */
#lb-body:has(.sq-ops) { height: 236px; align-items: flex-start; }   /* 015G：部曲小队卡展开同八派 */
.goka-wrap { display: flex; flex-direction: column; gap: 6px; width: 100%; padding: 4px 0 8px; }
.goka-head { font-weight: 700; color: #e8d9b0; font-size: 12.5px; }
.gk-await { color: #e07070; }
.goka-settle { font-size: 11.5px; color: #c9b891; }
.goka-facs { display: flex; flex-wrap: wrap; gap: 6px; }
.goka-fac { border: 1.5px solid; border-radius: 8px; padding: 5px 8px; min-width: 158px; background: rgba(20,24,44,.55); }
.goka-fac.dead { opacity: .45; }
.goka-fac.me { box-shadow: 0 0 8px rgba(216,180,106,.35); }
.gk-fac-top { display: flex; align-items: center; gap: 5px; font-size: 12px; }
.gk-dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; flex: none; }
.gk-role { margin-left: auto; font-size: 10.5px; color: #b8a8d8; }
.gk-fac-sub { font-size: 10.5px; color: #a99fc0; margin-top: 2px; }
.goka-rels { display: flex; flex-wrap: wrap; gap: 5px; }
.gk-rel-chip { font-size: 10.5px; padding: 1px 7px; border-radius: 8px; background: rgba(30,34,60,.6); }
.gk-rel-chip.war { color: #e08080; border: 1px solid rgba(200,100,100,.4); }
.gk-rel-chip.ally { color: #d8b46a; border: 1px solid rgba(216,180,106,.35); }
.goka-base { border-top: 1px dashed rgba(157,146,196,.3); padding-top: 5px; }
.goka-k { font-weight: 700; color: #d8b46a; font-size: 11.5px; }
.goka-rename { display: flex; gap: 6px; margin-top: 4px; align-items: center; }
.goka-rename input[type="text"], .goka-rename input:not([type]) { background: #0d1020; border: 1px solid rgba(157,146,196,.35); border-radius: 6px; color: #cfc6e8; padding: 4px 8px; font-size: 11px; outline: none; width: 150px; }
.goka-rename input[type="color"] { width: 34px; height: 24px; padding: 0; border: none; background: none; cursor: pointer; }
.goka-dec { margin-top: 6px; display: flex; flex-direction: column; gap: 3px; }
.gk-dec-row { display: flex; align-items: center; gap: 8px; }
.gk-dec-name { min-width: 120px; font-size: 11.5px; }
.gk-opt { font-size: 11.5px; margin-right: 7px; cursor: pointer; color: #cfc6e8; }
.gk-btn { background: rgba(40,46,80,.8); border: 1px solid rgba(157,146,196,.4); color: #dcd4f0; border-radius: 6px; padding: 2px 10px; cursor: pointer; font-size: 11px; margin-top: 4px; }
.gk-btn:hover { background: rgba(60,68,110,.9); }
.gk-btn.war { border-color: #c86464; color: #e8a0a0; }
.gk-btn.primary { border-color: #d8b46a; color: #e8d9b0; }
.goka-rumors { border-top: 1px dashed rgba(157,146,196,.3); padding-top: 5px; max-height: 130px; overflow-y: auto; }
.goka-rep { font-size: 11.5px; color: #c5bcdf; margin-top: 2px; }
.goka-talk { font-size: 10.5px; color: #9d92c4; margin-top: 2px; }
.gk-say-row { margin-top: 4px; }
.gk-say-row input { width: 100%; background: #0d1020; border: 1px solid rgba(157,146,196,.35); border-radius: 6px; color: #cfc6e8; padding: 4px 8px; font-size: 11px; outline: none; }

/* ================= v1.2.1 透视小黄栏 ================= */
.dbg-msg .who { display: none; }
.dbg-card { background: rgba(216,180,106,.10); border: 1px solid rgba(216,180,106,.45); border-radius: 8px; padding: 5px 9px; font-size: 11.5px; max-width: 560px; }
.dbg-card.fail { border-color: rgba(200,100,100,.55); background: rgba(200,100,100,.08); }
.dbg-line { color: #e8d9b0; }
.dbg-take { margin-left: 8px; color: #c9b891; }
.dbg-dt { margin-top: 3px; }
.dbg-dt summary { cursor: pointer; color: #9d92c4; font-size: 10.5px; }
.dbg-q, .dbg-a { white-space: pre-wrap; word-break: break-all; color: #b8aed6; font-size: 10.5px; margin-top: 3px; max-height: 150px; overflow-y: auto; }

/* ================= v1.2.1 八派测试栏 ================= */
#gt-dock { position: fixed; right: 18px; top: 52px; z-index: 66; width: 760px; height: 420px; display: flex; flex-direction: column;
  background: rgba(14,16,30,.96); border: 1px solid rgba(157,146,196,.4); border-radius: 10px; box-shadow: 0 8px 30px rgba(0,0,0,.5); }
#gt-dock.mini { height: 40px; overflow: hidden; }
.gt-head { display: flex; align-items: center; gap: 6px; padding: 7px 10px; cursor: move; border-bottom: 1px solid rgba(157,146,196,.25); user-select: none; }
.gt-title { font-weight: 700; color: #e8d9b0; font-size: 13px; }
.gt-head .spacer { flex: 1; }
.gt-btn { background: rgba(40,46,80,.8); border: 1px solid rgba(157,146,196,.4); color: #dcd4f0; border-radius: 6px; padding: 3px 10px; cursor: pointer; font-size: 11.5px; }
.gt-btn:hover { background: rgba(60,68,110,.9); }
.gt-btn:disabled { opacity: .5; cursor: wait; }
.gt-body { flex: 1; display: flex; gap: 8px; padding: 8px 10px; min-height: 0; }
.gt-side { width: 210px; flex: none; display: flex; flex-direction: column; gap: 5px; }
.gt-k { font-weight: 700; color: #d8b46a; font-size: 12px; }
.gt-note { font-size: 10.5px; color: #9d92c4; line-height: 1.5; }
.gt-stat { font-size: 11px; color: #c5bcdf; }
#gt-seq { background: #0d1020; border: 1px solid rgba(157,146,196,.35); border-radius: 6px; color: #cfc6e8; padding: 4px 8px; font-size: 11.5px; outline: none; }
.gt-detail { flex: 1; overflow-y: auto; border: 1px solid rgba(157,146,196,.2); border-radius: 8px; padding: 6px 8px; background: rgba(10,12,24,.5); }
.gt-entry { border-bottom: 1px dashed rgba(157,146,196,.18); padding: 4px 0 6px; }
.gt-entry.fail .gt-e-take { color: #e08080; }
.gt-e-head { font-size: 12px; color: #e8d9b0; display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.gt-e-take { font-size: 11px; color: #9dc49d; }
.gt-e-q, .gt-e-a { font-size: 10.5px; color: #b8aed6; white-space: pre-wrap; word-break: break-all; margin-top: 3px; max-height: 130px; overflow-y: auto; }
.gt-e-q b, .gt-e-a b { color: #d8b46a; }
/* v1.5 token 账（后台详细 + 透视卡） */
.gt-e-tok { font-size: 10px; color: #7fb3d9; margin-top: 2px; letter-spacing: .3px; }
.gt-entry.fail .gt-e-tok { color: #d98a8a; }
.dbg-tok { font-size: 10px; color: #7fb3d9; margin-top: 2px; letter-spacing: .3px; }
/* v1.5 众生别名与出现历史 */
.bz-dalias { margin-top: 5px; font-size: 11px; color: #b9b3a8; display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.bz-cand { display: inline-flex; align-items: center; gap: 3px; background: rgba(125,106,168,.18); border: 1px solid rgba(125,106,168,.4); border-radius: 4px; padding: 1px 5px; color: #d0c8e8; }
.bz-cand.on { border-color: rgba(216,180,106,.55); color: #e8d9b0; background: rgba(216,180,106,.12); }
.bz-cand button { background: none; border: none; color: #9dc49d; font-size: 10px; cursor: pointer; padding: 0 2px; }
.bz-cand button:hover { color: #e8d9b0; }
.bz-dhist { margin-top: 7px; font-size: 11px; color: #b9b3a8; }
.bz-dhist b { color: #d8b46a; }
.bz-hrnd { color: #7fb3d9; font-size: 10px; }

/* ================= v1.2.1 地图面板小态（旧版行旅图大小） ================= */
#mappanel.mp-small { width: 340px; }
#mappanel .mp-head { cursor: move; user-select: none; }
.tbtn.gold { border-color: #d8b46a; color: #e8d9b0; }

/* ================= v1.4 背包 ================= */
.hud-mini { font-size: 10px; padding: 1px 7px; margin-left: 6px; border: 1px solid rgba(216,180,106,.4);
  border-radius: 3px; background: rgba(26,26,42,.8); color: #d8b46a; cursor: pointer; }
.hud-mini:hover { background: rgba(216,180,106,.2); }
.bag-head { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #e8d9b0; margin-bottom: 6px; }
.bag-head .bag-stat { flex: 1; font-size: 10px; color: #d88ab8; }
.bag-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; max-height: 300px; overflow-y: auto; }
.bag-cell { position: relative; display: flex; flex-direction: column; align-items: center; gap: 1px;
  padding: 6px 2px 4px; border: 1.5px solid #444; border-radius: 5px; background: rgba(18,18,30,.85);
  cursor: pointer; min-height: 44px; }
.bag-cell:hover { background: rgba(216,180,106,.14); }
.bag-cell.eq { box-shadow: 0 0 6px rgba(216,180,106,.45) inset; }
.bag-cell.broke { opacity: .55; filter: grayscale(.6); }
.bag-ico { font-size: 15px; line-height: 1; }
.bag-nm { font-size: 10px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bag-eq { position: absolute; top: 1px; right: 3px; font-size: 8px; color: #d8b46a; }
.bag-empty { grid-column: 1/-1; font-size: 11px; color: #6a6a80; padding: 10px 4px; line-height: 1.7; }
#bag-tip { position: fixed; z-index: 400; width: 240px; padding: 8px 10px; border: 1px solid rgba(216,180,106,.5);
  border-radius: 6px; background: rgba(14,14,24,.96); box-shadow: 0 4px 18px rgba(0,0,0,.6); pointer-events: none; }
#bag-tip .bt-name { font-size: 13px; font-weight: 600; margin-bottom: 3px; }
#bag-tip .bt-tier { font-size: 9px; margin-left: 6px; opacity: .8; }
#bag-tip .bt-row { font-size: 10px; color: #b9b3a8; line-height: 1.6; }
#bag-tip .bt-fx { color: #8fd0a0; }
#bag-tip .bt-desc { font-size: 10px; color: #8a8aa0; font-style: italic; margin-top: 4px; line-height: 1.6;
  border-top: 1px dashed rgba(125,106,168,.35); padding-top: 4px; }
.lb-logline { margin-top: 4px; font-size: 10px; display: flex; flex-wrap: wrap; gap: 4px; }

/* v1.4 市肆攀谈 */
#sh-talkbox { display: flex; gap: 5px; margin-top: 8px; }
#sh-talk-in { flex: 1; font-size: 11px; padding: 4px 7px; border: 1px solid rgba(125,106,168,.5);
  border-radius: 4px; background: rgba(14,14,24,.9); color: #d9d4e8; }

/* v1.4 领袖密谈面板 */
#gkdlg { position: fixed; right: 16px; bottom: 90px; z-index: 300; width: 320px; max-height: 62vh;
  display: flex; flex-direction: column; border: 1px solid rgba(216,180,106,.5); border-radius: 8px;
  background: rgba(14,14,24,.97); box-shadow: 0 6px 24px rgba(0,0,0,.65); padding: 8px 10px; }
.gk-head { display: flex; align-items: center; font-size: 13px; color: #e8d9b0; font-weight: 600; }
.gk-head .spacer { flex: 1; }
.gk-sub { font-size: 10px; color: #8a8aa0; margin: 2px 0 6px; }
.gk-sub2 { color: #c8a85a; border-bottom: 1px dashed #3a3a48; padding-bottom: 4px; }   /* v4.2 密谈机制说明行（好感/税/同盟/同盟军） */
#gk-log { flex: 1; min-height: 120px; max-height: 38vh; overflow-y: auto; display: flex; flex-direction: column; gap: 5px;
  border-top: 1px dashed rgba(125,106,168,.3); border-bottom: 1px dashed rgba(125,106,168,.3); padding: 6px 2px; }
.gk-msg { font-size: 12px; line-height: 1.6; padding: 4px 8px; border-radius: 6px; max-width: 88%; }
.gk-msg.me { align-self: flex-end; background: rgba(216,180,106,.14); color: #e8d9b0; }
.gk-msg.npc { align-self: flex-start; background: rgba(125,106,168,.16); color: #cfc8e8; }
.gk-sys { font-size: 10px; color: #6a6a80; text-align: center; padding: 3px; }
.gk-inrow { display: flex; gap: 5px; margin-top: 6px; }
#gk-in { flex: 1; font-size: 12px; padding: 5px 8px; border: 1px solid rgba(125,106,168,.5);
  border-radius: 4px; background: rgba(14,14,24,.9); color: #d9d4e8; }
#gk-parley { margin-top: 5px; }
#gk-parley .mbtn:disabled { opacity: .45; cursor: default; }

/* v1.4 逆旅百晓册 */
#codexpanel { position: fixed; left: 50%; top: 50%; transform: translate(-50%,-50%); z-index: 320;
  width: min(860px, 92vw); height: min(640px, 88vh); display: flex; flex-direction: column;
  border: 1px solid rgba(216,180,106,.55); border-radius: 10px; background: rgba(14,14,24,.97);
  box-shadow: 0 10px 40px rgba(0,0,0,.7); }
.cx-head { display: flex; align-items: baseline; gap: 10px; padding: 10px 14px;
  border-bottom: 1px solid rgba(216,180,106,.3); }
.cx-title { font-size: 15px; color: #e8d9b0; font-weight: 700; }
.cx-sub { font-size: 10px; color: #8a8aa0; }
.cx-head .spacer { flex: 1; }
.cx-main { flex: 1; display: flex; min-height: 0; }
#cx-nav { width: 168px; overflow-y: auto; border-right: 1px dashed rgba(125,106,168,.3); padding: 8px 6px; }
.cx-ni { font-size: 12px; color: #b9b3a8; padding: 6px 8px; border-radius: 5px; cursor: pointer; line-height: 1.4; }
.cx-ni:hover { background: rgba(216,180,106,.1); }
.cx-ni.on { background: rgba(216,180,106,.18); color: #e8d9b0; }
.cx-cat { font-size: 12px; color: #d8b46a; letter-spacing: 2px; padding: 10px 8px 4px; border-top: 1px dashed rgba(216,180,106,.25); margin-top: 4px; }
.cx-cat:first-child { border-top: none; margin-top: 0; }
.cx-q { width: 180px; background: rgba(20,16,28,.6); border: 1px solid rgba(216,180,106,.3); border-radius: 6px;
  color: #e8d9b0; font-size: 12px; padding: 4px 8px; outline: none; }
.cx-q::placeholder { color: #8a7a5a; }
#cx-body { flex: 1; overflow-y: auto; padding: 14px 18px; font-size: 13px; line-height: 1.9; color: #cfc8bb; }
#cx-body table { border-collapse: collapse; margin: 4px 0 10px; }
#cx-body th, #cx-body td { border: 1px solid rgba(216,180,106,.22); padding: 3px 10px; font-size: 12px; text-align: left; }
#cx-body th { color: #d8b46a; background: rgba(216,180,106,.08); font-weight: 700; }
#cx-body p { margin: 8px 0; }
#cx-body p { margin: 0 0 10px; }
#cx-body b { color: #e8d9b0; }
.cp-empty { font-size: 11px; color: #6a6a80; padding: 6px 4px; line-height: 1.7; }

/* v1.6 地图：黄色边境线 + 派系旗帜（挂在地点系统真节点旁；v1.5 疆域层假黄点已退役） */
/* v1.7.0 新夺地虚线框（边境仍是实线，取得地虚线圈出）+ 战报钉 */
.gk-taken { fill: none; stroke-width: 2; stroke-dasharray: 7 5; opacity: .85; pointer-events: none; }
.gk-taken-tag { font-size: 13px; text-anchor: middle; opacity: .9; pointer-events: none; }
.gk-pinlead { stroke: rgba(255,211,77,.45); stroke-width: 1; stroke-dasharray: 2 3; pointer-events: none; }
.gk-pinbox { fill: #2a1f14; stroke: #ffd34d; stroke-width: 1.4; cursor: pointer; }
.gk-pintxt { font-size: 13px; text-anchor: middle; fill: #ffd34d; pointer-events: none; }
.gk-pincnt { font-size: 10px; fill: #ffd34d; pointer-events: none; font-weight: bold; }
.mt-pinnav { color: #ffd34d; font-size: 11px; margin-bottom: 4px; }
.mt-pinbtn { cursor: pointer; padding: 0 7px; user-select: none; border: 1px solid #ffd34d66; border-radius: 3px; margin-left: 6px; }
.mt-pinbtn:hover { background: #ffd34d22; }
.goka-seal { margin: 6px 0; padding: 8px 10px; border: 1px solid #ffd34d88; border-radius: 6px; background: #ffd34d11; color: #e8d9b0; font-size: 12px; line-height: 1.7; }
.goka-role-pick { margin-top: 8px; }
.gk-role-btn { display: inline-block; margin: 4px 6px 0 0; padding: 6px 10px; text-align: left; }
.gk-role-btn b { display: block; font-size: 13px; }
.gk-role-btn .lb-sub { display: block; font-size: 10px; margin-top: 2px; max-width: 180px; }
.gk-exp-tag { color: #e0a050; font-size: 11px; margin-left: 4px; }
.gk-border { fill: none; stroke: #ffd34d; stroke-width: 1.6; opacity: .8; pointer-events: none;
  filter: drop-shadow(0 0 2px rgba(255,211,77,.5)); }
.gk-flag { cursor: pointer; }
.gk-flag-pole { stroke: #d8ccb0; stroke-width: 1.6; }
.gk-flag-cloth { opacity: .92; stroke: rgba(0,0,0,.4); stroke-width: .6; }
.gk-flag-nm { font-size: 11px; fill: #efe6cc; paint-order: stroke; stroke: rgba(10,10,16,.85); stroke-width: 2.5px; }
.gk-flag-pw { font-size: 10px; fill: #ffd34d; paint-order: stroke; stroke: rgba(10,10,16,.85); stroke-width: 2.5px; }
.nm-flag.dead { opacity: .45; }
.nm-flag.me .gk-flag-nm { fill: #bfe6ff; }

/* ================= v1.6.4 开局裂隙选择面板 ================= */
#fissure-mask { position: fixed; inset: 0; z-index: 90; display: flex; align-items: center; justify-content: center;
  background: radial-gradient(ellipse at 50% 40%, rgba(20,14,30,.72), rgba(6,5,10,.92)); backdrop-filter: blur(3px); }
#fissure-panel { width: min(620px, 92vw); max-height: 88vh; overflow-y: auto; padding: 30px 34px 24px;
  background: linear-gradient(170deg, rgba(26,20,36,.98), rgba(14,11,20,.98));
  border: 1px solid rgba(150,110,200,.35); border-radius: 14px;
  box-shadow: 0 0 60px rgba(80,50,140,.25), inset 0 0 40px rgba(0,0,0,.35); text-align: center; }
.fs-title { font-size: 30px; letter-spacing: 18px; text-indent: 18px; color: #d8c8f0; font-weight: 700;
  text-shadow: 0 0 18px rgba(150,110,220,.5); }
.fs-quote { margin: 14px 0 4px; font-size: 13.5px; color: #9a8ab5; font-style: italic; }
.fs-sub { margin: 18px 0 10px; font-size: 13px; color: #c8b8e0; letter-spacing: 2px; }
.fs-dirs { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.fs-dir { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; text-align: left; cursor: pointer;
  background: rgba(40,30,58,.5); border: 1px solid rgba(140,105,190,.22); border-radius: 9px; transition: all .15s; }
.fs-dir b { font-size: 15px; color: #e2d5f5; letter-spacing: 3px; }
.fs-dir span { font-size: 11.5px; color: #8d7ca8; line-height: 1.55; }
.fs-dir:hover { border-color: rgba(170,130,230,.55); background: rgba(52,40,76,.6); }
.fs-dir.on { border-color: #a97fe0; background: rgba(80,58,120,.55); box-shadow: 0 0 14px rgba(150,100,230,.3); }
.fs-dir.on b { color: #f0e6ff; }
.fs-rings { display: flex; gap: 12px; justify-content: center; }
.fs-ring { flex: 0 1 220px; display: flex; flex-direction: column; gap: 4px; padding: 10px; cursor: pointer;
  background: rgba(40,30,58,.5); border: 1px solid rgba(140,105,190,.22); border-radius: 9px; transition: all .15s; }
.fs-ring b { font-size: 15px; color: #e2d5f5; letter-spacing: 4px; }
.fs-ring span { font-size: 11px; color: #8d7ca8; }
.fs-ring:hover { border-color: rgba(170,130,230,.55); }
.fs-ring.on { border-color: #a97fe0; background: rgba(80,58,120,.55); box-shadow: 0 0 14px rgba(150,100,230,.3); }
#fs-ok { margin-top: 22px; padding: 11px 44px; font-size: 15px; letter-spacing: 6px; cursor: pointer;
  color: #140e20; background: linear-gradient(180deg, #c9aef0, #9a76d0); border: none; border-radius: 8px;
  box-shadow: 0 4px 18px rgba(140,95,210,.4); transition: all .15s; }
#fs-ok:hover:not(:disabled) { filter: brightness(1.1); }
#fs-ok:disabled { opacity: .35; cursor: not-allowed; box-shadow: none; }
.fs-note { margin-top: 14px; font-size: 11px; color: #6f6089; }
.fs-wu { grid-column: 1 / -1; }
.fs-wu b { color: #b8d0e8; }
.fs-perm-b { color: #e0a8ec; font-weight: 700; }
.fs-ring.dim { opacity: .3; pointer-events: none; }
#sp-svg .sp-perm { fill: #ffd27a; font-size: 9px; text-anchor: middle; }

/* ================= v1.6.5 残影/面具（创伤投影染色） ================= */
.yshadow { color: #b08ae8; text-shadow: 0 0 8px rgba(150,100,230,.35); font-style: italic; }
.yfaint { color: #8fa8b8; text-shadow: 0 0 8px rgba(140,170,190,.25); font-style: italic; }   /* v4.18 余痕（青灰·疤色） */
.ymask { color: #e8a04c; text-shadow: 0 0 8px rgba(220,150,60,.3); }
.yecho { color: #ffd27a; text-shadow: 0 0 8px rgba(255,210,122,.35); }   /* v3.2 四乘二·回响（金） */
.ywarm { color: #f2a9c4; text-shadow: 0 0 8px rgba(242,169,196,.3); }    /* v3.2 四乘二·牵记（暖） */
.yink  { color: #9fb8d8; text-shadow: 0 0 8px rgba(159,184,216,.3); }    /* v3.2 四乘二·故纸（墨） */
.yash  { color: #a9a9b3; text-shadow: 0 0 8px rgba(169,169,179,.3); }    /* v3.2 四乘二·寒渍（灰） */
.yshadow.revealed, .ymask.revealed, .yfaint.revealed { color: inherit; text-shadow: none; font-style: normal;
  border-bottom: 1px dashed rgba(176,138,232,.6); }
.dj-btn { display: inline-block; margin-top: 8px; margin-left: 6px; padding: 2px 10px; font-size: 11px; cursor: pointer;
  color: #b8a0e0; background: rgba(60,45,90,.4); border: 1px solid rgba(150,110,200,.35); border-radius: 6px; }
.dj-btn:hover:not(:disabled) { background: rgba(80,60,120,.5); }
.dj-btn:disabled { opacity: .4; cursor: not-allowed; }

/* ================= v2.4 副本融入客户端：覆盖层书卷 ================= */
#fb-mask {
  position: fixed; inset: 0; z-index: 85; background: rgba(5,7,12,.7);
  display: flex; align-items: center; justify-content: center; backdrop-filter: blur(3px);
}
#fb-shell {
  width: min(860px, 94vw); height: min(720px, 92vh); display: flex; flex-direction: column;
  background: #14100d; border: 1px solid rgba(216,180,106,.45); border-radius: 14px; overflow: hidden;
  box-shadow: 0 18px 60px rgba(0,0,0,.55);
}
.fbs-head {
  display: flex; align-items: center; gap: 10px; padding: 8px 14px; flex: none;
  border-bottom: 1px solid rgba(216,180,106,.3); background: rgba(30,25,21,.9);
}
.fbs-title { font-size: 13px; letter-spacing: 4px; color: #d8b46a; }
.fbs-sub { font-size: 10.5px; color: #8d84ab; letter-spacing: 1px; }
#fb-frame { flex: 1; width: 100%; border: none; background: #14100d; }
#btn-fb.fbdot { animation: fbpulse 1.2s ease-in-out infinite; box-shadow: 0 0 10px rgba(216,180,106,.8); }
@keyframes fbpulse { 0%,100% { filter: brightness(1); } 50% { filter: brightness(1.55); } }

/* ================= v2.4 token 放大栏 ================= */
#tokenbar { cursor: pointer; }
#tok-pop {
  position: fixed; top: 46px; left: 150px; z-index: 95; min-width: 300px; max-width: 380px;
  background: rgba(16,20,36,.97); border: 1px solid rgba(216,180,106,.45); border-radius: 10px;
  padding: 10px 14px 12px; font-size: 12px; color: #ece7f5; box-shadow: 0 10px 34px rgba(0,0,0,.5);
}
.tkp-title { font-size: 12.5px; letter-spacing: 3px; color: #d8b46a; margin-bottom: 6px; }
.tkp-row { display: flex; justify-content: space-between; gap: 14px; padding: 2px 0; }
.tkp-row .k { color: #8d84ab; }
.tkp-row .v { color: #ece7f5; font-variant-numeric: tabular-nums; }
.tkp-row.total { border-top: 1px solid rgba(216,180,106,.35); margin-top: 5px; padding-top: 6px; }
.tkp-row.total .v { color: #e8d9b0; font-weight: bold; }
.tkp-kinds { margin-top: 7px; border-top: 1px dashed rgba(125,106,168,.35); padding-top: 6px; }
.tkp-kinds .tkp-row .k { color: #b0a6cc; }
.tkp-note { margin-top: 7px; font-size: 10.5px; color: #6f6089; line-height: 1.6; }

/* ================= v2.4 事件判定词悬停栏 / 手账数值悬停栏 ================= */
#ed-finpop, #stat-tip {
  position: fixed; z-index: 96; max-width: 330px; pointer-events: none;
  background: rgba(16,20,36,.97); border: 1px solid rgba(125,106,168,.55); border-radius: 9px;
  padding: 8px 12px; font-size: 11.5px; line-height: 1.7; color: #d6cfe8;
  box-shadow: 0 8px 26px rgba(0,0,0,.5);
}
#ed-finpop .fp-k, #stat-tip .fp-k { color: #d8b46a; letter-spacing: 2px; font-size: 11.5px; }
#ed-finpop .fp-words { margin-top: 4px; color: #b8e0a8; }
#ed-finpop .fp-words i, #stat-tip i { font-style: normal; color: #8d84ab; }
#stat-tip .st-k { color: #d8b46a; letter-spacing: 1px; }
#stat-tip .st-now { color: #e8c98a; font-size: 12px; letter-spacing: 1px; margin-top: 3px; }
#stat-tip .st-bar { height: 5px; margin-top: 3px; border: 1px solid rgba(216,180,106,.3); border-radius: 3px;
  background: rgba(125,106,168,.18); overflow: hidden; }
#stat-tip .st-bar i { display: block; height: 100%; background: linear-gradient(90deg,#7d6aa8,#d8b46a); }
#stat-tip .st-sec { margin-top: 6px; }
#stat-tip .st-sec b { color: #b0a6cc; font-weight: normal; letter-spacing: 2px; }
#stat-tip .st-li { padding-left: 12px; text-indent: -12px; margin-top: 2px; line-height: 1.6; letter-spacing: 1px; }
#stat-tip .st-li::before { content: '· '; color: #b0a6cc; }
#stat-tip .st-n { font-style: normal; color: #e8c98a; }
.stw.has { cursor: help; border-bottom: 1px dashed rgba(125,106,168,.45); }
.stw.has:hover { color: #d8b46a; border-bottom-color: rgba(216,180,106,.7); }

/* ================= v2.4 心图：缘起芯片 / 修习单态 / 旧伤册兑换 ================= */
.yq-chip { display: inline-flex; align-items: center; gap: 5px; margin-left: 8px; padding: 1px 9px;
  border: 1px solid rgba(180,138,232,.55); border-radius: 10px; background: rgba(60,45,90,.35);
  color: #cdb2f0; font-size: 11px; }
.yq-chip b { color: #e2ccf8; }
.yq-go { margin-left: 6px; padding: 0 8px; font-size: 10.5px; cursor: pointer; font-family: inherit;
  color: #1a1626; background: linear-gradient(120deg, #b48ae8, #8f62c8); border: none; border-radius: 8px; }
.yq-go:hover { filter: brightness(1.18); }
.yq-go.off { opacity: .38; cursor: not-allowed; filter: grayscale(.5); }
.spm-yq { color: #cdb2f0; margin-left: 7px; }
.spm-yq b { color: #e2ccf8; }
.spl-order { font-size: 10.5px; color: #8d84ab; letter-spacing: .5px; padding: 3px 2px 5px; }
.spl-order b { color: #b0a6cc; font-weight: normal; }
.spl-item.od { opacity: .72; }
.spl-item.can { transition: box-shadow .15s, background .15s, border-color .15s; }
.spl-item.can:hover { border-color: #d8b46a; background: rgba(216,180,106,.18); box-shadow: 0 0 12px rgba(216,180,106,.35); }   /* 可兑换状：悬停放光变色；缘起不足的 .no 悬停不变 */
.spl-item .spp-btn[data-fbbook] { background: linear-gradient(120deg, #d8b46a, #b8934a); color: #1a1626; border: none; }
.wnd-buy { display: block; width: 100%; margin: 6px 0 4px; padding: 5px 0; font-size: 12px; cursor: pointer;
  font-family: inherit; letter-spacing: 1px; color: #1a1626;
  background: linear-gradient(120deg, #b48ae8, #8f62c8); border: none; border-radius: 8px; }
.wnd-buy:hover:not(:disabled):not(.off) { filter: brightness(1.18); }
.wnd-buy.off, .wnd-buy:disabled { opacity: .4; cursor: not-allowed; filter: grayscale(.45); }
.wnd-buy.od { background: rgba(125,106,168,.3); color: #b0a6cc; cursor: wait; }
.wnd-buy.fb { background: rgba(216,180,106,.16); color: #e8d9b0; border: 1px solid rgba(216,180,106,.6); }
.wnd-buy.fb:hover { background: rgba(216,180,106,.32); }
.wnd-sub { font-size: 10.5px; color: #8d84ab; line-height: 1.7; padding: 2px 2px 5px; }

/* ================= v2.4 事件圆拖拽 / 遗忘态 ================= */
.ev-ball { cursor: grab; touch-action: none; user-select: none; }
.ev-ball.dragging { cursor: grabbing; opacity: .85; z-index: 99; }
#spirit.ev-forget-target #sp-svg .sp-ring[data-ring="out"] { stroke: #b48ae8; stroke-width: 2.6; stroke-dasharray: 6 4; }
#spirit.ev-forget-target .sp-head { box-shadow: inset 0 -2px 0 rgba(180,138,232,.5); }
#sp-svg .spb-ring.evf { stroke: rgba(176,138,232,.55); stroke-width: 1.6; stroke-dasharray: 3 3; fill: rgba(16,20,36,.85); }
#sp-svg .spb-ev { cursor: pointer; }
#ed-hint.fp-able { cursor: help; color: #8d84ab; border-bottom: 1px dashed rgba(125,106,168,.55); }

/* ================= v2.5 奇遇栏（唯一栏目） ================= */
.qy-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.qy-head .spacer { flex: 1; }
.qy-acc { font-size: 10.5px; color: #8d84ab; padding: 2px 2px 4px; cursor: help; }
.qy-grace { font-size: 10px; color: #8d84ab; border: 1px dashed rgba(180,138,232,.4); border-radius: 8px; padding: 0 6px; cursor: help; }
.qy-grace.on { color: #e2ccf8; border: 1px solid rgba(180,138,232,.75); background: rgba(80,55,120,.35); }
.yq-go.shelf { background: rgba(216,180,106,.2); color: #e8d9b0; border: 1px solid rgba(216,180,106,.5); }
.qy-sec { font-size: 11px; letter-spacing: 3px; color: #b48ae8; margin: 9px 0 4px;
  border-bottom: 1px dashed rgba(125,106,168,.35); padding-bottom: 3px; cursor: help; }
.qy-sec-sub { font-size: 9.5px; color: #6f6089; letter-spacing: 0; margin-left: 6px; }
.qy-one { display: flex; align-items: center; gap: 7px; font-size: 11.5px; padding: 4px 7px; margin: 3px 0;
  border: 1px solid rgba(125,106,168,.3); border-radius: 8px; color: #d6cfe8; cursor: default; }
.qy-one .qy-ico { flex: none; }
.qy-one .qy-t { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.qy-one.go { border-color: rgba(216,180,106,.65); background: rgba(216,180,106,.09); cursor: pointer; }
.qy-one.go:hover { background: rgba(216,180,106,.22); box-shadow: 0 0 10px rgba(216,180,106,.25); }
.qy-one.wait { opacity: .68; }
.qy-one.bad { border-color: rgba(220,120,120,.55); cursor: pointer; }
.qy-one.bad:hover { background: rgba(220,120,120,.12); }
.qy-one.fin .qy-t { cursor: pointer; }
.qy-one.fin .qy-t:hover { color: #e8d9b0; }
.qy-none { font-size: 10.5px; color: #6f6089; padding: 3px 6px; }
.qy-mini { font-family: inherit; font-size: 10px; cursor: pointer; color: #b0a6cc; background: rgba(60,45,90,.3);
  border: 1px solid rgba(125,106,168,.5); border-radius: 6px; padding: 0 7px; }
.qy-mini:hover { color: #e2ccf8; border-color: #b48ae8; }
.qy-mini.wk2 { color: #e8d9b0; border-color: rgba(216,180,106,.6); }
.qy-mini.wk2:hover { background: rgba(216,180,106,.2); }
.qy-mini.wk2.nm2 { font-size: 9px; padding: 0 5px; }   /* v4.74 创伤本二周目＝「再战梦魇」 */
.qy-sub { font-size: 9.5px; color: #5a5a72; margin-top: 7px; line-height: 1.6; }
/* 六箴路连线珠 */
.qy-road { width: 100%; height: 66px; display: block; }
.qy-lk { stroke: rgba(125,106,168,.45); stroke-width: 1.4; }
.qy-bead { cursor: pointer; }
.qy-bead circle:first-child { fill: rgba(16,20,36,.9); stroke: rgba(125,106,168,.5); stroke-width: 1.4; }
.qy-bead text { font-size: 11px; fill: #b8aed6; text-anchor: middle; pointer-events: none; }
.qy-bead.done circle:first-child { stroke: #d8b46a; fill: rgba(216,180,106,.22); }
.qy-bead.done text { fill: #e8d9b0; }
.qy-bead.go circle:first-child { stroke: #d8b46a; stroke-width: 2.2; }
.qy-bead.go text { fill: #e8d9b0; }
.qy-bead.can circle:first-child { stroke: #9d92c4; stroke-width: 2; }
.qy-bead.can:hover circle:first-child { stroke: #d8b46a; fill: rgba(216,180,106,.18); }
.qy-bead.free circle:first-child { stroke: #b48ae8; stroke-width: 2.2; fill: rgba(80,55,120,.35); }
.qy-bead.free text { fill: #e2ccf8; }
.qy-bead.free:hover circle:first-child { fill: rgba(120,80,170,.45); }
.qy-bead.wait { opacity: .66; }
.qy-bead.off { opacity: .45; }
.qy-pulse { fill: none; stroke: rgba(216,180,106,.6); stroke-width: 1; animation: qypulse 1.6s ease-out infinite; }
@keyframes qypulse { 0% { r: 13; opacity: .9; } 100% { r: 22; opacity: 0; } }
/* 对话窗系统行（婚事门禁提示等） */
.ed-m.sys { text-align: center; color: #8d84ab; font-size: 10.5px; font-style: normal; }

/* ================= v2.6 左栏重构：命脉三条 + 技艺档条 + 声名轨 + 刚柔轴 ================= */
#hud-vitals { margin: 8px 10px; padding: 8px 10px; background: rgba(24,20,16,.82); border: 1px solid #4a3f30; border-radius: 6px; }
.vt-row { display: flex; align-items: center; gap: 8px; margin: 7px 0; }
.vt-k { width: 34px; flex: none; font-size: 12px; color: #b9a888; letter-spacing: 2px; }
.vt-bar { position: relative; flex: 1; height: 16px; background: #16120d; border: 1px solid #3a3226; border-radius: 3px; overflow: hidden; }
.vt-fill { height: 100%; border-radius: 2px; transition: width .35s ease; opacity: .85; }
.vt-num { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; text-shadow: 0 1px 2px #000; letter-spacing: 1px; }
.vt-raw { width: 30px; flex: none; text-align: right; font-size: 10px; color: #7a6f5c; }
.sk-row { display: flex; align-items: center; gap: 6px; margin: 4px 0; font-size: 11px; cursor: default; }
.sk-row:hover { background: rgba(216,180,106,.06); border-radius: 3px; }
.sk-k { width: 30px; flex: none; color: #b9a888; }
.sk-r { width: 34px; flex: none; color: #d8b46a; font-size: 10px; text-align: center; }
.sk-r.fm { color: #9db8d8; }
.sk-bar { flex: 1; height: 7px; background: #16120d; border: 1px solid #33291c; border-radius: 3px; overflow: hidden; position: relative; }
.sk-bar > i { display: block; height: 100%; background: #8a7448; border-radius: 2px; transition: width .3s ease; }
.sk-bar.fm > i { background: #5a7a9a; }
.sk-bar.gang { overflow: visible; background: linear-gradient(90deg, #7a3a3a 0%, #4a3f30 30%, #4a3f30 70%, #3a5a7a 100%); }
.gang-mark { position: absolute; top: -3px; width: 3px; height: 13px; background: #e8d8b0; border-radius: 2px; transform: translateX(-50%); box-shadow: 0 0 4px #000; }
.sk-e { width: 30px; flex: none; text-align: right; color: #8a7f6a; font-size: 10px; }

/* ================= v2.7 自动朗读 ================= */
#btn-tts { min-width: 36px; }
.tts-replay { float: right; margin-left: 8px; padding: 0 2px; border: none; background: none; cursor: pointer; font-size: 11px; opacity: .4; filter: grayscale(.4); }
.tts-replay:hover { opacity: 1; filter: none; }
#settings select { background: #1c1812; color: #d8cbb0; border: 1px solid #4a3f30; border-radius: 4px; padding: 3px 6px; max-width: 100%; }
#settings input[type=range] { accent-color: #d8b46a; }

/* ---- v4.10 劫数坞（自左栏抽出的独立浮动块，可拖可折叠） ---- */
#swdock { position: fixed; top: 54px; bottom: auto; left: 50%; transform: translateX(-50%); z-index: 58; background: rgba(20,25,46,.62); border: 1px solid rgba(216,180,106,.45); border-radius: 12px; padding: 6px 8px; width: 252px; backdrop-filter: blur(7px); box-shadow: 0 10px 34px rgba(0,0,0,.5); }   /* v4.70 行旅图同款金边半透明 */
#swdock .swd-head { display: flex; align-items: center; gap: 6px; cursor: grab; user-select: none; font-size: 13px; color: #d8b46a; letter-spacing: 1px; border-bottom: 1px solid rgba(216,180,106,.25); padding-bottom: 4px; }
#swdock .swd-head:active { cursor: grabbing; }
#swdock .swd-t { font-weight: 700; }
#swdock .swd-worst { font-size: 12px; }
#swdock .swd-foldbtn { border: 1px solid rgba(216,180,106,.4); background: none; color: #d8b46a; border-radius: 5px; width: 20px; height: 18px; line-height: 1; cursor: pointer; font-size: 12px; padding: 0; }
#swdock .swd-foldbtn:hover { color: #e8d9b0; border-color: #e8d9b0; }
#swdock .swd-body { margin-top: 5px; max-height: 46vh; overflow-y: auto; }
#swdock.folded .swd-body { display: none; }
#swdock.folded { width: auto; max-width: 300px; }
#swdock .sw-row { display: flex; align-items: center; gap: 5px; padding: 2.5px 2px; font-size: 12px; color: #c5bcdf; border-bottom: 1px dashed rgba(216,180,106,.15); }
#swdock .sw-row:last-child { border-bottom: none; }
#swdock .sw-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
#swdock .sw-nm { flex: none; min-width: 34px; }
#swdock .sw-cur { flex: 1; color: #b8aed6; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#swdock .sw-rk { flex: none; font-size: 11px; }
#swdock .sw-redeem { flex: none; border: 1px solid #d8b46a; background: none; color: #d8b46a; border-radius: 5px; font-size: 11px; padding: 0 5px; cursor: pointer; }
#swdock .sw-redeem:disabled { opacity: .38; cursor: default; border-color: #8f87ab; color: #8f87ab; }
/* ---- v4.10 战报汇总面板 ---- */
#warpin-pop { position: fixed; top: 120px; right: 18px; z-index: 62; width: 330px; max-height: 62vh; background: rgba(16,20,36,.94); border: 1px solid rgba(157,146,196,.4); border-radius: 10px; padding: 7px 9px; box-shadow: 0 6px 22px rgba(0,0,0,.45); display: flex; flex-direction: column; }
#warpin-pop .wpp-head { display: flex; align-items: baseline; gap: 7px; font-size: 13px; color: #d8cbb0; letter-spacing: 1px; border-bottom: 1px solid rgba(157,146,196,.25); padding-bottom: 5px; }
#warpin-pop .wpp-sub { font-size: 11px; color: #8f87ab; }
#warpin-pop .wpp-x { cursor: pointer; color: #9d92c4; padding: 0 3px; }
#warpin-pop .wpp-x:hover { color: #e8d9b0; }
#warpin-pop .wpp-list { overflow-y: auto; margin-top: 5px; }
#warpin-pop .wpp-one { padding: 4px 4px; border-bottom: 1px dashed rgba(157,146,196,.14); cursor: pointer; font-size: 12px; color: #c5bcdf; }
#warpin-pop .wpp-one:hover { background: rgba(157,146,196,.12); }
#warpin-pop .wpp-one .wpp-r { color: #8f87ab; font-size: 11px; margin-right: 5px; }
#warpin-pop .wpp-one .wpp-win { color: #e8c98a; }
#warpin-pop .wpp-empty { color: #8f87ab; font-size: 12px; padding: 10px 4px; }
/* ---- v4.10 知门档词 ---- */
.kw-g { cursor: help; border-bottom: 1px dotted currentColor; }
.bb-foeline { font-size: 11px; color: #9d92c4; padding: 2px 8px; }
.np-kw { color: #b9b0d4; }
.np-talk { line-height: 1.5; }
.np-num { color: #8a92a8; }

/* ---- v4.11 战役批：点攻修复/将领附着/帮助面板/战报改道 ---- */
.wu.atk-hi circle { stroke: #e05555; stroke-width: 3; stroke-dasharray: 3 2; }
#wp-leaders { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 6px 10px; background: rgba(20,26,48,.85); border-top: 1px solid rgba(157,146,196,.25); }
#wp-leaders .wl-k { font-size: 12px; color: #9d92c4; }
#wp-leaders .wl-chip { display: inline-flex; align-items: center; gap: 4px; border: 1.6px solid rgba(216,180,106,.55); border-radius: 16px; padding: 3px 9px; cursor: pointer; font-size: 12px; color: #e8d9b0; background: rgba(28,32,54,.9); user-select: none; }
#wp-leaders .wl-chip:hover { border-color: #e8d9b0; }
#wp-leaders .wl-chip.sel { background: rgba(216,180,106,.28); border-color: #e8d9b0; box-shadow: 0 0 8px rgba(232,217,176,.35); }
#wp-leaders .wl-chip.attached { opacity: .38; cursor: default; border-style: dashed; }
#wp-leaders .wl-chip .wl-t { font-size: 11px; color: #9d92c4; }
/* ---- v4.22 部署栏：地貌账 + 每队人数微调 + 就绪开战（未上阵留池） ---- */
.wp-dep { padding: 6px 10px; background: rgba(20,26,48,.85); border-top: 1px solid rgba(157,146,196,.25); }
.wp-dep .lb-sub { font-size: 10.5px; color: #8d84ab; }
.wp-dep-size { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.wp-dep-size .wl-chip { display: inline-flex; align-items: center; gap: 5px; border: 1.6px solid rgba(216,180,106,.55); border-radius: 14px; padding: 2px 8px; font-size: 11.5px; color: #e8d9b0; background: rgba(28,32,54,.9); }
.wp-size-in { width: 52px; background: #1c2138; border: 1px solid rgba(157,146,196,.4); color: #e8d9b0; border-radius: 6px; padding: 2px 4px; text-align: center; font-size: 11.5px; }
.wp-dep-go { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
#wp-help-pop { position: fixed; top: 90px; left: 50%; transform: translateX(-50%); z-index: 130; width: 520px; max-width: 92vw; max-height: 76vh; background: rgba(16,20,36,.97); border: 1px solid rgba(157,146,196,.5); border-radius: 12px; padding: 10px 14px; box-shadow: 0 8px 30px rgba(0,0,0,.55); display: flex; flex-direction: column; }
#wp-help-pop .wph-head { display: flex; font-size: 14px; color: #d8cbb0; letter-spacing: 1px; border-bottom: 1px solid rgba(157,146,196,.3); padding-bottom: 6px; }
#wp-help-pop .wph-x { cursor: pointer; color: #9d92c4; padding: 0 4px; }
#wp-help-pop .wph-x:hover { color: #e8d9b0; }
#wp-help-pop .wph-body { overflow-y: auto; margin-top: 7px; font-size: 12.5px; color: #c5bcdf; line-height: 1.75; }
#wp-help-pop .wph-sec { margin-bottom: 9px; }
#wp-help-pop .wph-sec b { color: #e8d9b0; }
#wp-help-pop .wph-t { display: inline-block; min-width: 20px; text-align: center; border-radius: 4px; padding: 0 4px; margin-right: 3px; color: #d8cbb0; }
#wp-help-pop .wph-t.t-水 { background: #1c3a5e; }
#wp-help-pop .wph-t.t-滩 { background: #6a5c3e; }
#wp-help-pop .wph-t.t-原 { background: #1e2b1e; }
#wp-help-pop .wph-t.t-丘 { background: #3d3226; }
#wp-help-pop .wph-t.t-林 { background: #24401f; }

/* ================= v4.14 开局主菜单 / 开局序章 / 立绘动图 / 全屏 ================= */
/* 开局层：封面双段交叉循环（视频优先、静态图兜底），四钮主菜单 */
#boot-mask { position: fixed; inset: 0; z-index: 400; display: flex; align-items: center; justify-content: center; background: #06080f; overflow: hidden; }
#boot-mask.bye { transition: opacity .9s ease; opacity: 0; pointer-events: none; }
.boot-bg, .boot-vid { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 2.5s ease; }
.boot-bg { background-size: cover; background-position: center; }
.boot-bg.on, .boot-vid.on { opacity: 1; }
.boot-veil { position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 42%, rgba(4,6,12,0) 30%, rgba(4,6,12,.55) 78%, rgba(4,6,12,.82)); }
.boot-core { position: relative; text-align: center; z-index: 2; }
.boot-title { font-size: 92px; letter-spacing: .35em; text-indent: .35em; color: #e8d9b0; text-shadow: 0 0 26px rgba(216,180,106,.35), 0 2px 10px rgba(0,0,0,.8); font-weight: 700; }
.boot-motto { margin-top: 10px; font-size: 14px; letter-spacing: .28em; text-indent: .28em; color: rgba(232,217,176,.78); text-shadow: 0 1px 6px rgba(0,0,0,.8); }
.boot-menu { margin-top: 44px; display: flex; flex-direction: column; gap: 13px; align-items: center; }
.boot-btn { width: 240px; padding: 11px 0; font-size: 16px; letter-spacing: .42em; text-indent: .42em; color: #d8c9a0; background: rgba(16,20,34,.62); border: 1px solid rgba(216,180,106,.42); border-radius: 9px; cursor: pointer; transition: all .18s ease; backdrop-filter: blur(2px); }
.boot-btn:hover { background: rgba(216,180,106,.16); border-color: rgba(232,205,138,.85); color: #f4e6bd; transform: translateY(-1px); }
.boot-btn.primary { border-color: rgba(232,205,138,.9); color: #f4e6bd; background: rgba(216,180,106,.14); }
.boot-btn.dim { opacity: .72; }
.boot-btn.dim:hover { opacity: 1; }
.boot-ver { margin-top: 26px; font-size: 11px; color: rgba(216,200,160,.5); letter-spacing: .12em; }
.boot-fs { position: absolute; top: 14px; right: 16px; z-index: 3; width: 34px; height: 34px; font-size: 17px; color: #d8c9a0; background: rgba(16,20,34,.55); border: 1px solid rgba(216,180,106,.4); border-radius: 8px; cursor: pointer; }
.boot-fs:hover { background: rgba(216,180,106,.18); }
.boot-loadpop { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); z-index: 4; width: 340px; background: rgba(16,20,34,.94); border: 1px solid rgba(216,180,106,.5); border-radius: 12px; padding: 14px; }
/* v4.16 双选面板＋存档栏退出 */
.sv-x { float: right; cursor: pointer; color: #9d92c4; font-size: 13px; padding: 0 2px; }
.sv-x:hover { color: #e8d9b0; }
.bn-choice { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; width: 100%; margin: 6px 0; padding: 10px 12px; background: rgba(30,36,60,.6); border: 1px solid rgba(216,180,106,.45); border-radius: 9px; color: #e3d3ab; cursor: pointer; text-align: left; }
.bn-choice:hover:not(.off) { border-color: #d8b46a; background: rgba(40,48,78,.75); }
.bn-choice .bn-main { font-size: 14px; letter-spacing: .06em; }
.bn-choice .bn-sub { font-size: 10.5px; color: #8a80a8; letter-spacing: .04em; }
.bn-choice.off { opacity: .45; cursor: not-allowed; }
.bn-warn { margin: 8px 0 2px; padding: 8px 10px; font-size: 11.5px; line-height: 1.8; color: #e8a0a0; background: rgba(120,40,40,.18); border: 1px solid rgba(216,120,106,.45); border-radius: 8px; }   /* v4.17 提示填入 api */
.bn-warn button { margin-left: 8px; font-family: inherit; font-size: 11px; cursor: pointer; color: #e8d9b0; background: none; border: 1px solid rgba(216,180,106,.6); border-radius: 6px; padding: 2px 10px; }
.bn-warn button:hover { border-color: #d8b46a; }
/* 开局序章：新局点「开始游戏」后滚动世界背景，点击/Esc/回车跳过 */
#crawl-mask { position: fixed; inset: 0; z-index: 410; background: rgba(4,5,9,.88); overflow: hidden; cursor: pointer; }
.crawl-col { position: absolute; left: 50%; top: 102%; transform: translateX(-50%); width: min(560px, 84vw); text-align: center; font-size: 19px; line-height: 2.5; letter-spacing: .14em; color: #e3d3ab; text-shadow: 0 1px 8px rgba(0,0,0,.9); }
.crawl-col p { margin: 0 0 1.1em; }
.crawl-col.run { animation: crawlUp 62s linear forwards; }
@keyframes crawlUp { from { top: 102%; } to { top: -340%; } }
.crawl-fade { position: absolute; left: 0; right: 0; height: 22vh; z-index: 2; pointer-events: none; }
.crawl-fade-top { top: 0; background: linear-gradient(to bottom, rgba(4,5,9,.97), rgba(4,5,9,0)); }
.crawl-fade-bot { bottom: 0; background: linear-gradient(to top, rgba(4,5,9,.97), rgba(4,5,9,0)); }
.crawl-skip { position: absolute; right: 22px; bottom: 16px; z-index: 3; font-size: 12px; color: rgba(216,200,160,.55); letter-spacing: .18em; }
/* 立绘动图独立块（加大版）：mp4 优先、png 兜底、心境切换淡入淡出 */
#hud-avatar { text-align: center; padding: 4px 0 0; }
.np-avatar-stack { position: relative; width: 216px; height: 288px; margin: 0 auto; }
.np-av-layer { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; transition: opacity .45s ease; }
.np-av-layer.on { opacity: 1; }
.np-av-layer.off { opacity: 0 !important; }
video.np-avatar { object-fit: cover; background: rgba(10,13,24,.5); }

/* v4.19 出征幕布（全屏过场＋进度，用户裁示） */
#veil { position: fixed; inset: 0; z-index: 9000; overflow: hidden; background: #000; }
#veil-vid, #veil-vid-b { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 2.5s ease; }
#veil-vid.on, #veil-vid-b.on { opacity: 1; }
#veil-shade { position: absolute; inset: 0; background: rgba(6, 8, 14, 0.45); }
#veil-box { position: absolute; left: 50%; bottom: 8%; transform: translateX(-50%); text-align: center;
  color: #e8dcc0; text-shadow: 0 1px 6px #000; }
#veil-title { font-size: 26px; letter-spacing: 6px; margin-bottom: 12px; }
#veil-stage { font-size: 15px; opacity: 0.92; }
#veil-elapsed { font-size: 12px; opacity: 0.65; margin-top: 6px; }
#veil-cancel { margin-top: 14px; opacity: 0.85; }

/* 015 阶段G：小队卡三阶占比条 + 操作钮 */
.squad-bar { display: inline-flex; width: 72px; height: 6px; border-radius: 3px; overflow: hidden;
  vertical-align: middle; background: #2a2620; }
.squad-bar i { display: block; height: 100%; }
.sb-lo { background: #9aa0a6; }
.sb-mid { background: #e6a23c; }
.sb-hi { background: #c0392b; }
.sq-ops { display: inline-flex; gap: 4px; margin-left: 6px; flex-wrap: wrap; }
.sq-ops .mbtn { padding: 1px 7px; font-size: 12px; }
.sq-ops .mbtn.danger { color: #e8dcc0; background: #7a2a22; }

/* v4.45 思维链染色 · 五档程度词＋九品色阶（词色随思考字数升品，思维停止即冻结） */
.think-live { display: inline-flex; align-items: center; gap: 5px; margin-left: 10px;
  vertical-align: middle; --tl-color: #9aa0a6; --tl-glow: rgba(154,160,166,.55); }
.tl-word { font-style: normal; font-size: 12.5px; letter-spacing: .2em; font-weight: 700;
  color: var(--tl-color); text-shadow: 0 0 8px var(--tl-glow);
  transition: color .4s ease, text-shadow .4s ease; }   /* 字数变化时颜色平滑过渡；不主动循环 */
.tl-chars { font-size: 10px; color: #b8aed6; white-space: nowrap; letter-spacing: .04em; }
.tl-state { font-style: normal; font-size: 10px; color: rgba(216,180,106,.85); }
.think-live .tl-note { font-style: normal; font-size: 11px; color: rgba(216,180,106,.78);
  letter-spacing: .06em; margin-left: 3px; white-space: nowrap; }   /* v4.69 首条思考长属正常的旁注 */
.think-live.stopped { opacity: .9; }
.think-live.stopped .tl-state { color: rgba(170,160,190,.8); }

/* v4.45 八派演化 · 单开 GM 对话框（分类索引：要闻/势力/关系/传闻/战报/决策） */
.goka-msg { border-left: 3px solid rgba(216,180,106,.55); padding-left: 10px; margin-top: 4px; }
.goka-msg .who { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.goka-msg .who .think-live { margin-left: 0; }   /* 多阶段词条并排时去掉每个词条的额外左距 */
.goka-tag { font-size: 10px; letter-spacing: .12em; color: #c9a86a;
  background: rgba(216,180,106,.12); border: 1px solid rgba(216,180,106,.35);
  border-radius: 4px; padding: 1px 7px; }
.goka-msg .bubble { background: rgba(24,26,44,.42); border-color: rgba(201,168,106,.4); }
.goka-summary { font-size: 12.5px; line-height: 1.8; color: #d8cba8; white-space: pre-wrap; }
.goka-hint { margin-top: 5px; font-size: 11px; line-height: 1.7; color: #8d84ab; }
.goka-actions { margin-top: 8px; }
.goka-expand { font-family: inherit; font-size: 12px; cursor: pointer; white-space: nowrap;
  color: #e8d9b0; background: rgba(216,180,106,.14); border: 1px solid rgba(216,180,106,.55);
  border-radius: 999px; padding: 5px 16px; letter-spacing: .1em; transition: all .18s ease; }
.goka-expand:hover { background: rgba(216,180,106,.28); border-color: #d8b46a;
  box-shadow: 0 0 10px rgba(216,180,106,.25); }
.goka-expand:disabled { opacity: .45; cursor: default; box-shadow: none; }
.goka-full { margin-top: 10px; border-top: 1px dashed rgba(216,180,106,.3); padding-top: 10px; }
.goka-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 10px; }
.goka-tab { font-family: inherit; font-size: 11.5px; cursor: pointer; white-space: nowrap;
  color: #c9b891; background: rgba(24,26,44,.6); border: 1px solid rgba(216,180,106,.3);
  border-radius: 999px; padding: 3px 12px; letter-spacing: .06em; transition: all .16s ease; }
.goka-tab:hover { border-color: #d8b46a; color: #e8d9b0; }
.goka-tab.on { background: rgba(216,180,106,.18); border-color: #d8b46a; color: #f4e6bd; }
.goka-pane { display: none; }
.goka-pane.on { display: block; }
.goka-news-item { font-size: 12.5px; line-height: 1.8; color: #e3d3ab; padding: 4px 0;
  border-bottom: 1px dashed rgba(216,180,106,.15); }
.goka-await { margin: 8px 0 4px; padding: 7px 10px; font-size: 12px; color: #e8b06a;
  background: rgba(216,150,60,.12); border: 1px solid rgba(216,160,80,.45); border-radius: 6px; }
.goka-sec { margin: 10px 0 4px; font-size: 12px; letter-spacing: .14em; color: #e8c98a; }
.goka-tbl { width: 100%; border-collapse: collapse; font-size: 11.5px; margin: 4px 0 10px; }
.goka-tbl th, .goka-tbl td { border: 1px solid rgba(216,180,106,.22); padding: 3px 7px;
  text-align: left; color: #e3d3ab; }
.goka-tbl th { background: rgba(216,180,106,.1); color: #e8c98a; font-weight: normal; letter-spacing: .08em; }
.goka-tbl .off { color: #8a6a6a; }
.goka-talk, .goka-report { font-size: 12px; line-height: 1.8; color: #cfc6a8; margin: 2px 0 8px;
  padding: 6px 9px; background: rgba(0,0,0,.18); border-left: 2px solid rgba(216,180,106,.35);
  white-space: pre-wrap; }
.goka-dbg { font-size: 11px; color: #9f96b8; white-space: pre-wrap; background: rgba(18,18,34,.5);
  padding: 6px 9px; border-radius: 6px; }

/* v4.46 八派决策 · 八等分圆（每派一扇区）+ 各家明细小弹层 */
.goka-msg .who { position: relative; }
.goka-ring { display: inline-flex; align-items: center; gap: 5px; background: none; border: none;
  cursor: pointer; padding: 0; }
.goka-ring svg { width: 34px; height: 34px; border-radius: 50%; background: rgba(255,255,255,.05);
  box-shadow: 0 0 6px rgba(0,0,0,.4); }
.goka-ring-total { font-size: 10px; color: #b8aed6; letter-spacing: .04em; white-space: nowrap; }
.goka-ring-pop { position: absolute; left: 0; top: calc(100% + 4px); z-index: 40; width: 330px;
  max-height: 300px; overflow: auto; background: #1a1510; border: 1px solid #6b4f2a; border-radius: 8px;
  padding: 8px 10px; box-shadow: 0 6px 24px rgba(0,0,0,.55); }
.goka-ring-title { font-size: 11.5px; letter-spacing: .14em; color: #e8c98a; margin-bottom: 4px; }
.goka-ring-row { display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: #e3d3ab;
  padding: 3px 0; border-bottom: 1px dashed rgba(216,180,106,.15); }
.goka-ring-row i { width: 13px; height: 13px; border-radius: 3px; display: inline-block; flex: none; }
.goka-ring-row b { flex: 1; text-align: left; font-weight: normal; }
.goka-ring-row span { color: #d8b46a; }
.goka-ring-row em { font-style: normal; color: #9f96b8; }

/* v4.46 测试栏后台 AI 全量输入/输出：可滚动、保留换行 */
.gt-detail-list .gt-e-q, .gt-detail-list .gt-e-a {
  white-space: pre-wrap; word-break: break-word; max-height: 180px; overflow: auto; }

/* v4.49 行旅日志栏：可拖动（标题栏）+ 可缩放（右下角 CSS resize），非对话 GM 信息全进这里 */
/* v4.49b 风格归一（用户裁示：照心图/行旅图重做）——与 #mappanel/#spirit 同一面板语言：
   靛底 rgba(20,25,46,.6) + 金描边 + 12px 圆角 + blur(7px) + 金字标题（字距 3）+ mbtn 钮 */
#log-panel {
  position: fixed; right: 14px; bottom: 14px; width: 380px; height: 148px;
  min-width: 220px; min-height: 96px; max-width: 92vw; max-height: 80vh;
  display: flex; flex-direction: column; z-index: 55;
  background: rgba(20, 25, 46, .6); border: 1px solid rgba(216, 180, 106, .45);
  border-radius: 12px; box-shadow: 0 10px 34px rgba(0,0,0,.5);
  resize: both; overflow: hidden; backdrop-filter: blur(7px);
}
#log-panel .lp-head {
  flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
  padding: 7px 10px; cursor: move; user-select: none;
  border-bottom: 1px solid rgba(216,180,106,.3);
}
#log-panel .lp-head .lp-title { flex: 1; font-size: 13px; letter-spacing: 3px; color: #d8b46a; cursor: pointer; padding-right: 6px; border-radius: 6px; transition: background .15s; }
#log-panel .lp-head .lp-title:hover { background: rgba(216, 180, 106, .14); }
#log-panel .lp-head .lp-badge {
  background: #d8b46a; color: #1a1626; border-radius: 9px; font-size: 11px;
  padding: 0 7px; line-height: 17px; display: none; font-weight: 600;
}
#log-panel .lp-head button { width: 24px; height: 22px; line-height: 1; padding: 0; font-size: 12px; }
#log-panel .lp-body {
  flex: 1 1 auto; overflow-y: auto; padding: 6px 10px 10px;
  font-size: 12.5px; line-height: 1.65; color: #c5bdd9;
}
#log-panel .lp-line { border-bottom: 1px dashed rgba(216,180,106,.14); padding: 2px 0; word-break: break-word; }
#log-panel .lp-line .lp-t { color: #8d84ab; margin-right: 6px; font-size: 11px; }
/* v4.74 奇遇日志：剧本生成实时流水（SSE 推送）——等宽小字，按行类型染色 */
#log-panel .lp-qy {
  flex: 1 1 auto; display: none; overflow-y: auto; padding: 6px 10px 10px;
  font-family: Consolas, "Courier New", monospace; font-size: 11.5px; line-height: 1.6;
  color: #c5bdd9; white-space: pre-wrap; word-break: break-all;
}
#log-panel.qy-mode .lp-body { display: none; }
#log-panel.qy-mode .lp-qy { display: block; }
#log-panel .lp-qy-head {
  border-bottom: 1px dashed rgba(216,180,106,.28); padding: 2px 0 7px; margin-bottom: 4px;
  font-family: inherit; white-space: normal;
}
#log-panel .lp-qy-name { color: #ffd27a; font-size: 12.5px; letter-spacing: 1px; font-weight: 600; margin-right: 8px; }
#log-panel .lp-qy-st { color: #8d84ab; font-size: 11px; }
#log-panel .lp-qy-line { padding: 1px 0; }
#log-panel .lp-qy-line.qy-ai { color: #a9c0ff; }
#log-panel .lp-qy-line.qy-mk { color: #d8b46a; }
#log-panel .lp-qy-line.qy-warn { color: #ff9d8a; }
#log-panel .lp-qy-dim { color: #8d84ab; font-family: inherit; white-space: normal; }
#log-panel.lp-collapsed { height: auto !important; resize: none; }
#log-panel.lp-collapsed .lp-body, #log-panel.lp-collapsed .lp-qy { display: none; }
#log-panel.lp-flash { animation: lpFlash 1s ease; }
@keyframes lpFlash { 0%,100% { border-color: rgba(216,180,106,.45); } 50% { border-color: #ffd27a; } }

/* v4.53 套装架：风格一致弹层（与行旅日志同族——宣纸底/金框/圆角），三线横排节点卡＋甲胄图鉴格 */
#armor-tree {
  position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: min(1080px, 88vw); max-height: 84vh; z-index: 950;
  display: flex; flex-direction: column;
  background: rgba(20, 25, 46, .92); border: 1px solid rgba(216, 180, 106, .45);
  border-radius: 12px; box-shadow: 0 10px 34px rgba(0,0,0,.5); backdrop-filter: blur(7px);
}
#armor-tree .at-head { display: flex; align-items: center; gap: 12px; padding: 9px 14px;
  border-bottom: 1px solid rgba(216,180,106,.3); color: #cfc8e8; flex: 0 0 auto; }
#armor-tree .at-title { font-size: 14px; letter-spacing: 3px; color: #d8b46a; }
#armor-tree .at-prog { font-size: 12.5px; color: #9f96b8; }
#armor-tree .at-prog b { font-weight: 600; }
#armor-tree .at-close { margin-left: auto; background: none; border: 1px solid rgba(216,180,106,.4);
  color: #d8b46a; border-radius: 6px; padding: 3px 12px; cursor: pointer; font-size: 12px; }
#armor-tree .at-close:hover { background: rgba(216,180,106,.12); }
#armor-tree .at-creed { flex: 0 0 auto; padding: 7px 14px; font-size: 12px; line-height: 1.7;
  color: #a99fc4; border-bottom: 1px dashed rgba(216,180,106,.18); }
#armor-tree .at-body { flex: 1 1 auto; overflow-y: auto; padding: 10px 14px 14px; }

.c-han { color: #9fc3e8; } .c-wmf { color: #d8908a; } .c-dress { color: #e8a0b8; } .c-always { color: #d8b46a; }

#armor-tree .sl-line { margin-bottom: 14px; }
#armor-tree .sl-head { display: flex; align-items: center; gap: 10px; margin-bottom: 5px; }
#armor-tree .sl-name { font-size: 13px; letter-spacing: 2px; }
#armor-tree .sl-sub { font-size: 11px; color: #7f76a0; }
#armor-tree .sl-bar { flex: 1 1 auto; height: 5px; border-radius: 3px; background: rgba(160,150,200,.16); overflow: hidden; }
#armor-tree .sl-fill { display: block; height: 100%; border-radius: 3px; transition: width .4s; }
#armor-tree .sl-fill.c-han { background: linear-gradient(90deg, #5b7fa8, #9fc3e8); }
#armor-tree .sl-fill.c-wmf { background: linear-gradient(90deg, #a85b58, #d8908a); }
#armor-tree .sl-fill.c-dress { background: linear-gradient(90deg, #a85b80, #e8a0b8); }
#armor-tree .sl-prog { font-size: 11.5px; color: #9f96b8; white-space: nowrap; }
#armor-tree .sl-next { font-size: 11.5px; color: #8d84ab; margin: 0 0 7px 2px; }
#armor-tree .sl-next.sl-done { color: #8fd18f; }
#armor-tree .sl-cards { display: flex; gap: 10px; overflow-x: auto; padding: 2px 2px 6px; }

#armor-tree .at-node { position: relative; flex: 0 0 150px; border: 1px solid rgba(160,150,200,.3); border-radius: 8px;
  padding: 7px 9px; font-size: 12.5px; color: #b9b2d4; background: rgba(40,34,62,.5); cursor: default; }
#armor-tree .at-node + .at-node::before { content: ''; position: absolute; left: -11px; top: 50%; width: 10px; height: 1px;
  background: rgba(160,150,200,.35); }
#armor-tree .at-node.unlocked { border-color: rgba(143,209,143,.55); cursor: pointer; }
#armor-tree .at-node.unlocked:hover { background: rgba(60,70,50,.55); }
#armor-tree .at-node.worn { border-color: #ffd27a; background: rgba(80,64,30,.45); cursor: pointer; }
#armor-tree .at-node.locked { opacity: .55; }
#armor-tree .at-nm { font-size: 13px; color: #e8e2f8; }
#armor-tree .at-meta { margin-top: 2px; font-size: 11px; color: #9f96b8; }
#armor-tree .at-def { color: #8fb8ff; }
#armor-tree .at-need { margin-top: 3px; font-size: 11px; color: #d4a0a0; }
#armor-tree .at-act { margin-top: 4px; font-size: 11px; color: #8fd18f; }
/* 背包武器图（悬停提示内）＋ 套装架 360° 帧查看器 */
.bt-img { display: block; max-width: 220px; max-height: 240px; margin: 6px auto 2px;
  border-radius: 6px; border: 1px solid rgba(160,150,200,.25); background: rgba(10,8,18,.6); }
#armor-tree .at-view { margin: 2px auto; text-align: center; min-height: 0; }
#armor-tree .at-viewer { max-width: 110px; max-height: 170px; border-radius: 6px;
  border: 1px solid rgba(160,150,200,.3); background: rgba(10,8,18,.6); cursor: ew-resize; user-select: none; }
#armor-tree .at-view-hint { font-size: 10.5px; color: #7f76a0; margin-top: 1px; }

/* 甲胄图鉴格 */
#armor-tree .ag-wrap { border-top: 1px solid rgba(216,180,106,.25); padding-top: 9px; margin-top: 2px; }
#armor-tree .ag-head { font-size: 13px; letter-spacing: 2px; color: #d8b46a; margin-bottom: 8px;
  display: flex; align-items: baseline; gap: 10px; }
#armor-tree .ag-count { font-size: 11.5px; color: #9f96b8; letter-spacing: 0; }
#armor-tree .ag-tip { font-size: 11px; color: #7f76a0; letter-spacing: 0; }
#armor-tree .ag-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(74px, 1fr)); gap: 7px; }
#armor-tree .ag-cell { border: 1px solid rgba(160,150,200,.22); border-radius: 7px; padding: 4px 3px 5px;
  text-align: center; background: rgba(40,34,62,.35); opacity: .45; }
#armor-tree .ag-cell.got { opacity: 1; border-color: rgba(216,180,106,.4); }
#armor-tree .ag-img { height: 58px; display: flex; align-items: center; justify-content: center; }
#armor-tree .ag-img::before { content: '🥋'; font-size: 22px; filter: grayscale(1); opacity: .5; }
#armor-tree .ag-cell.got .ag-img::before { filter: none; opacity: .9; }
#armor-tree .ag-img:has(.ag-pic)::before { display: none; }
#armor-tree .ag-pic { max-width: 100%; max-height: 58px; border-radius: 5px; }
#armor-tree .ag-nm { font-size: 11px; color: #b9b2d4; margin-top: 2px; }
#armor-tree .ag-cell.got .ag-nm { color: #e8e2f8; }

/* ================= v4.54 套装图鉴模式（伪3D 大图＋骑砍实件清单） ================= */
#armor-tree .at-gallery { margin-left: auto; background: none; border: 1px solid rgba(159,195,232,.45);
  color: #9fc3e8; border-radius: 6px; padding: 3px 12px; cursor: pointer; font-size: 12px; letter-spacing: 1px; }
#armor-tree .at-gallery:hover { background: rgba(159,195,232,.12); }
#armor-tree .at-close { margin-left: 0; }

#armor-tree .sg-creed { font-size: 12px; line-height: 1.7; color: #a99fc4; margin-bottom: 12px;
  padding-bottom: 8px; border-bottom: 1px dashed rgba(216,180,106,.18); }
#armor-tree .sg-line { margin-bottom: 16px; }
#armor-tree .sg-line-nm { font-size: 13px; letter-spacing: 3px; color: #d8b46a; margin-bottom: 8px;
  border-left: 3px solid rgba(216,180,106,.5); padding-left: 8px; }
#armor-tree .sg-card { display: flex; gap: 14px; align-items: flex-start; border: 1px solid rgba(160,150,200,.28);
  border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; background: rgba(40,34,62,.5); }
#armor-tree .sg-card.unlocked { border-color: rgba(143,209,143,.5); }
#armor-tree .sg-card.worn { border-color: #ffd27a; background: rgba(80,64,30,.4); }
#armor-tree .sg-card.locked { opacity: .6; }
#armor-tree .sg-view { flex: 0 0 auto; text-align: center; }
#armor-tree .sg-view .at-viewer { max-width: 220px; max-height: 396px; border-radius: 8px;
  border: 1px solid rgba(160,150,200,.3); background: rgba(10,8,18,.6); cursor: ew-resize; user-select: none; }
#armor-tree .sg-info { flex: 1 1 auto; min-width: 0; }
#armor-tree .sg-nm { font-size: 15px; letter-spacing: 2px; color: #e8e2f8; display: flex; align-items: baseline; gap: 10px; }
#armor-tree .sg-tier { font-size: 11px; letter-spacing: 1px; color: #d8b46a; border: 1px solid rgba(216,180,106,.35);
  border-radius: 4px; padding: 1px 7px; }
#armor-tree .sg-meta { margin-top: 4px; font-size: 12px; line-height: 1.7; color: #9f96b8; }
#armor-tree .sg-st { margin-top: 4px; font-size: 11.5px; }
#armor-tree .sg-st.worn { color: #ffd27a; }
#armor-tree .sg-st.ok { color: #8fd18f; }
#armor-tree .sg-st.lock { color: #d4a0a0; }
#armor-tree .sg-pieces { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 5px 8px; }
#armor-tree .sg-piece { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: #b9b2d4;
  background: rgba(20,25,46,.55); border: 1px solid rgba(160,150,200,.2); border-radius: 5px; padding: 2px 8px 2px 3px; }
#armor-tree .sg-slot { font-size: 10.5px; color: #14192e; background: rgba(216,180,106,.75); border-radius: 3px;
  padding: 1px 5px; letter-spacing: 0; }
#armor-tree .sg-pn { letter-spacing: .3px; }

/* v4.65 行动仓（原「给这一幕配图」按钮改：预设行动，勾引剧情码） */
#actiondock { position: fixed; left: 50%; bottom: 108px; transform: translateX(-50%);
  width: min(640px, 94vw); max-height: 64vh; overflow: auto; z-index: 96;
  background: rgba(18, 24, 40, .97); border: 1px solid #d8b46a; border-radius: 12px;
  padding: 12px 14px 10px; color: #e8d9b0; font-size: 12.5px;
  box-shadow: 0 12px 34px rgba(0, 0, 0, .55); line-height: 1.6; }
#actiondock .ad-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
#actiondock .ad-head b { font-size: 14px; color: #d8b46a; }
#actiondock .ad-sub { color: #8f93ad; font-size: 11.5px; flex: 1; }
#actiondock .ad-cat { margin: 9px 0 3px; color: #cfc6e8; }
#actiondock .ad-cat b { color: #d8b46a; letter-spacing: .3px; }
#actiondock .ad-aim { float: right; color: #8fd18f; font-size: 11px; }
#actiondock .ad-item { display: block; width: 100%; text-align: left; margin: 4px 0;
  background: #1a2138; border: 1px solid #333c5c; border-radius: 8px; color: #e8d9b0;
  padding: 7px 10px; cursor: pointer; font-size: 12.5px; line-height: 1.6; }
#actiondock .ad-item:hover { border-color: #d8b46a; background: #202a47; }
#actiondock .ad-foot { margin-top: 10px; border-top: 1px dashed #3a4668; padding-top: 8px;
  display: flex; justify-content: space-between; gap: 8px; align-items: center; }
#actiondock .ad-close { background: none; border: 1px solid #5a6488; color: #b9b2d4;
  border-radius: 7px; padding: 3px 12px; cursor: pointer; }

/* v4.65 行动仓 v3：圆环分发式（与上浮面板同族风格） */
#actdock3 { position: fixed; left: 50%; bottom: 108px; transform: translateX(-50%);
  width: min(700px, 96vw); max-height: 78vh; overflow: auto; z-index: 98;
  background: rgba(17, 22, 38, .98); border: 1px solid #d8b46a; border-radius: 14px;
  padding: 10px 12px 12px; color: #e8d9b0; font-size: 12.5px; line-height: 1.6;
  box-shadow: 0 14px 38px rgba(0, 0, 0, .6); }
#actdock3 .a3-head { display: flex; align-items: center; gap: 10px; border-bottom: 1px solid #3a4668;
  padding-bottom: 7px; }
#actdock3 .a3-head b { color: #d8b46a; font-size: 14.5px; }
#actdock3 .a3-head span.sub { color: #8f93ad; flex: 1; font-size: 11.5px; }
#actdock3 .a3-head button { background: none; border: 1px solid #5a6488; color: #b9b2d4;
  border-radius: 7px; padding: 2px 10px; cursor: pointer; }
#actdock3 .a3-status { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center;
  margin: 8px 0 2px; font-size: 12px; }
#actdock3 .a3-wheel { position: relative; width: 620px; height: 460px; margin: 4px auto; }
#actdock3 .a3-cat { position: absolute; transform: translate(-50%, -50%); width: 118px; min-height: 82px;
  background: #1a2138; border: 1px solid #333c5c; border-radius: 12px; color: #e8d9b0;
  cursor: pointer; text-align: center; padding: 8px 6px; display: flex; flex-direction: column;
  justify-content: center; }
#actdock3 .a3-cat:hover { border-color: #d8b46a; background: #202a47; }
#actdock3 .a3-cat.on { border-color: #d8b46a; box-shadow: 0 0 0 1px #d8b46a inset; }
#actdock3 .a3-cat .c-ic { font-size: 20px; }
#actdock3 .a3-cat .c-nm { font-weight: bold; color: #e8d9b0; }
#actdock3 .a3-cat .c-aim { font-size: 10.5px; color: #8fd18f; }
#actdock3 .a3-hub { position: absolute; transform: translate(-50%, -50%); width: 168px; min-height: 168px;
  border-radius: 50%; background: radial-gradient(circle, #1c2438 0%, #141a2c 100%);
  border: 1px solid #4a5578; color: #e8d9b0; display: flex; flex-direction: column; align-items: center;
  justify-content: center; cursor: pointer; text-align: center; }
#actdock3 .a3-hub .h-mood { font-size: 22px; }
#actdock3 .a3-hub .h-num { font-size: 11.5px; line-height: 1.5; }
#actdock3 .a3-opt { position: absolute; transform: translate(-50%, -50%); width: 250px; max-height: 320px;
  overflow: auto; background: #1a2138; border: 1px solid #d8b46a; border-radius: 10px;
  padding: 8px 9px; z-index: 5; box-shadow: 0 8px 22px rgba(0, 0, 0, .45); }
#actdock3 .a3-opt .opt-t { color: #d8b46a; margin-bottom: 4px; font-size: 12px; }
#actdock3 .a3-opt .a3-item-b { display: block; width: 100%; text-align: left; margin: 4px 0;
  background: #232c48; border: 1px solid #3a4668; border-radius: 7px; color: #e8d9b0;
  padding: 6px 8px; cursor: pointer; }
#actdock3 .a3-opt .a3-send { display: block; width: 100%; text-align: left; margin: 4px 0;
  background: #202a47; border: 1px solid #4a5578; border-radius: 7px; color: #e8d9b0;
  padding: 6px 8px; cursor: pointer; }
#actdock3 .a3-opt .a3-send:hover { border-color: #d8b46a; }

/* v4.65 行动仓 v3 美化层：透明金边统一风格 */
#actdock3 { background: rgba(11, 15, 29, .92); border: 1px solid rgba(216, 180, 106, .45);
  backdrop-filter: blur(6px); box-shadow: 0 18px 46px rgba(0, 0, 0, .62), 0 0 0 1px rgba(216, 180, 106, .08) inset; }
#actdock3 .a3-head { border-bottom-color: rgba(216, 180, 106, .22); }
#actdock3 .a3-head b { color: #e8c876; text-shadow: 0 1px 6px rgba(216, 180, 106, .25); }
#actdock3 .a3-over { display: grid; grid-template-columns: 150px 1fr 1fr; gap: 12px; align-items: center;
  margin: 10px 0 4px; padding: 10px 12px; border-radius: 12px;
  background: rgba(22, 29, 52, .55); border: 1px solid rgba(160, 150, 200, .18); }
#actdock3 .a3-over .ov-mood { text-align: center; }
#actdock3 .a3-over .ov-mood .m { font-size: 40px; line-height: 1.1; }
#actdock3 .a3-over .ov-mood .w { color: #cbb98f; font-size: 12px; }
#actdock3 .a3-over .ov-bars { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
#actdock3 .a3-over .ov-right { text-align: center; }
#actdock3 .a3-wheel { height: 400px; margin: 2px auto; }
#actdock3 .a3-hub { width: 150px; min-height: 150px; border-color: rgba(216, 180, 106, .28);
  background: radial-gradient(circle, rgba(30, 38, 66, .9) 0%, rgba(15, 20, 37, .95) 100%);
  box-shadow: 0 0 22px rgba(216, 180, 106, .12) inset; }
#actdock3 .a3-hub .h-num { color: #b9b2d4; font-size: 11px; }
#actdock3 .a3-cat { background: rgba(24, 31, 56, .86); border: 1px solid rgba(180, 165, 210, .2);
  box-shadow: 0 4px 10px rgba(0, 0, 0, .25); }
#actdock3 .a3-cat:hover { background: rgba(34, 44, 76, .92); border-color: rgba(216, 180, 106, .6); }
#actdock3 .a3-cat.on { border-color: rgba(216, 180, 106, .85); background: rgba(44, 38, 26, .92);
  box-shadow: 0 0 0 1px rgba(216, 180, 106, .5), 0 0 14px rgba(216, 180, 106, .15); }
#actdock3 .a3-opt { width: 320px; max-height: 300px; background: rgba(17, 22, 40, .96);
  border-color: rgba(216, 180, 106, .65); box-shadow: 0 10px 26px rgba(0, 0, 0, .5), 0 0 0 1px rgba(216, 180, 106, .08) inset; }
#actdock3 .a3-opt .opt-t { color: #e8c876; }
#actdock3 .a3-opt .a3-send { background: rgba(28, 36, 62, .9); border-color: rgba(160, 150, 200, .25); }
#actdock3 .a3-opt .a3-send:hover { border-color: rgba(216, 180, 106, .75); background: rgba(40, 50, 84, .92); }
#actdock3 .a3-opt .a3-item-b { background: rgba(28, 36, 62, .9); border-color: rgba(160, 150, 200, .25); }
#actdock3 .a3-opt .sent { display: block; color: #d8d2c2; font-size: 12px; line-height: 1.55; margin-top: 2px; }
#actdock3 .a3-opt .lab { color: #9db8d8; font-size: 11.5px; }

/* v4.65 行动仓 v3 二次放大/透明度定稿 */
#actdock3 { width: min(780px, 97vw); max-height: 86vh;
  background: rgba(13, 18, 34, .82); backdrop-filter: blur(10px); }
#actdock3 .a3-over { grid-template-columns: 180px 1fr 1fr; gap: 16px;
  padding: 12px 14px; background: rgba(24, 31, 56, .6); }
#actdock3 .a3-over .ov-mood .m { font-size: 48px; }
#actdock3 .a3-over .ov-mood .w { font-size: 13px; }
#actdock3 .a3-over .ov-bars { gap: 4px; }
#actdock3 .a3-wheel { width: 700px; height: 470px; margin: 4px auto; }
#actdock3 .a3-hub { width: 180px; min-height: 180px;
  background: radial-gradient(circle, rgba(32, 41, 72, .9) 0%, rgba(15, 20, 37, .92) 100%); }
#actdock3 .a3-cat { width: 146px; min-height: 108px; padding: 10px 8px; border-radius: 14px;
  background: rgba(26, 34, 62, .78); }
#actdock3 .a3-cat:hover { background: rgba(36, 46, 82, .88); }
#actdock3 .a3-cat.on { background: rgba(52, 44, 30, .9); }
#actdock3 .a3-cat .c-ic { font-size: 26px; }
#actdock3 .a3-cat .c-nm { font-size: 15px; }
#actdock3 .a3-cat .c-aim { font-size: 11px; margin-top: 2px; }
#actdock3 .a3-opt { width: 380px; max-height: 380px; padding: 10px 12px;
  background: rgba(16, 22, 42, .9); }
#actdock3 .a3-opt .sent { font-size: 13px; }

#actdock3 .a3-opt { overflow: visible; max-height: none; }   /* v4.65 无滚动：句子框随内容展开 */
#actdock3 .a3-opt .lab { font-size: 12px; }
#actdock3 .a3-head b { font-size: 16px; }
#actdock3 .a3-head .sub { font-size: 12px; }
#actdock3 .a3-status { font-size: 12.5px; }

/* v4.65 行动仓 v3 第三次：再放大 + 透明度压淡 */
#actdock3 { width: min(860px, 96vw); max-height: 86vh; padding: 12px 14px 14px;
  background: rgba(8, 12, 26, .6); backdrop-filter: blur(12px);
  border: 1px solid rgba(216, 180, 106, .5); font-size: 13.5px; }
#actdock3 .a3-head b { font-size: 19px; }
#actdock3 .a3-head .sub { font-size: 12.5px; }
#actdock3 .a3-over { grid-template-columns: 190px 1.2fr .85fr; padding: 12px 14px;
  background: rgba(24, 31, 56, .35); }
#actdock3 .a3-over .ov-mood .m { font-size: 46px; }
#actdock3 .a3-over .ov-mood .w { font-size: 14px; }
#actdock3 .a3-over .ov-right svg { width: 180px; height: 190px; }
#actdock3 .a3-wheel { width: 760px; height: 500px; margin: 4px auto; }
#actdock3 .a3-hub { width: 180px; min-height: 180px;
  background: radial-gradient(circle, rgba(32, 41, 72, .62) 0%, rgba(15, 20, 37, .68) 100%); }
#actdock3 .a3-hub .h-mood { font-size: 30px; }
#actdock3 .a3-hub .h-num { font-size: 12.5px; }
#actdock3 .a3-cat { width: 150px; min-height: 116px; padding: 10px 8px; border-radius: 16px;
  background: rgba(26, 34, 62, .5); }
#actdock3 .a3-cat:hover { background: rgba(36, 46, 82, .7); }
#actdock3 .a3-cat.on { background: rgba(60, 50, 32, .72); }
#actdock3 .a3-cat .c-ic { font-size: 28px; }
#actdock3 .a3-cat .c-nm { font-size: 16px; }
#actdock3 .a3-cat .c-aim { font-size: 12px; }
#actdock3 .a3-opt { width: 430px; max-height: 400px; padding: 10px 12px;
  background: rgba(13, 18, 36, .72); }
#actdock3 .a3-opt .opt-t { font-size: 13.5px; }
#actdock3 .a3-opt .sent { font-size: 13.5px; }

/* v4.65 物品图鉴（战力栏「📖 图鉴」；风格对齐套装架） */
#item-codex { position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: min(1120px, 94vw); max-height: 86vh; z-index: 960; display: flex; flex-direction: column;
  background: rgba(18, 23, 44, .9); border: 1px solid rgba(216, 180, 106, .45);
  border-radius: 14px; box-shadow: 0 12px 38px rgba(0, 0, 0, .55); backdrop-filter: blur(8px); }
#item-codex .at-head { display: flex; align-items: center; gap: 12px; padding: 10px 16px;
  border-bottom: 1px solid rgba(216, 180, 106, .3); flex: 0 0 auto; }
#item-codex .at-title { font-size: 15px; letter-spacing: 3px; color: #d8b46a; }
#item-codex .at-prog { font-size: 12.5px; color: #9f96b8; flex: 1; }
#item-codex .at-close { background: none; border: 1px solid rgba(216, 180, 106, .4); color: #d8b46a;
  border-radius: 7px; padding: 4px 14px; cursor: pointer; font-size: 12.5px; }
#item-codex .at-close:hover { background: rgba(216, 180, 106, .12); }
#item-codex .at-body { flex: 1 1 auto; overflow-y: auto; padding: 12px 16px 18px; }
#item-codex .ic-note { font-size: 12px; color: #8d84ab; padding: 8px 2px 2px; }
#item-codex .ic-sec { margin: 16px 0 6px; font-size: 15px; color: #e8c876; letter-spacing: 2px;
  border-bottom: 1px dashed rgba(216, 180, 106, .25); padding-bottom: 5px; }
#item-codex .ic-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 8px; }
#item-codex .ic-card { border: 1px solid rgba(160, 150, 200, .22); border-radius: 10px;
  padding: 8px 10px; background: rgba(34, 41, 70, .45); font-size: 12px; line-height: 1.6; }
#item-codex .ic-card.testable { cursor: pointer; }
#item-codex .ic-card.testable:hover { border-color: rgba(216, 180, 106, .7);
  background: rgba(52, 44, 30, .55); }
#item-codex .ic-top { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
#item-codex .ic-nm { font-size: 14px; color: #e8e2f8; }
#item-codex .ic-meta { font-size: 11px; color: #9f96b8; white-space: nowrap; }
#item-codex .ic-line { margin-top: 2px; }
#item-codex .ic-line b { color: #8fb8ff; font-weight: 600; }
#item-codex .ic-line.u b { color: #9fd3a8; }
#item-codex .ic-line.a b { color: #d8908a; }
#item-codex .ic-ef { color: #cfc6e8; }
#actdock3 .a3-opt .lab { font-size: 13px; }

/* v4.65 行动仓 v3 收尾：去滚动、内容自适、单套拖动 */
#actdock3 { width: min(800px, 96vw); max-height: none; overflow: visible;
  padding: 12px 14px 16px; }
#actdock3 .a3-head { user-select: none; cursor: move; }
#actdock3 .a3-over { grid-template-columns: 170px 1.15fr .8fr; padding: 10px 12px; margin: 8px 0 2px; }
#actdock3 .a3-over .ov-mood .m { font-size: 42px; }
#actdock3 .a3-over .ov-right svg { width: 165px; height: 174px; }
#actdock3 .a3-wheel { width: 720px; height: 420px; overflow: visible; margin: 2px auto; }
#actdock3 .a3-hub { width: 160px; min-height: 160px; }
#actdock3 .a3-cat { width: 132px; min-height: 104px; }
#actdock3 .a3-cat .c-ic { font-size: 26px; }
#actdock3 .a3-cat .c-nm { font-size: 15px; }
#actdock3 .a3-opt { width: 350px; max-height: 330px; overflow-y: auto; }
#actdock3 .a3-opt .sent { font-size: 13px; }

/* v4.67 心图缩小态「镂空」（用户裁示 2026-09-03）：mini 整板底色拉到近全透、摘掉毛玻璃，
   让底下「行旅日志」被盖住的字透得出来；头部自留半透底，拖动/按钮仍可辨认 */
#spirit.mini {
  background: rgba(20, 25, 46, .03);
  border-color: rgba(157, 146, 196, .16);
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
#spirit.mini .sp-head {
  background: rgba(16, 20, 36, .62);
  border-bottom-color: rgba(157, 146, 196, .22);
}
/* v4.68 缩小态文字回血：行/脚注各自垫一块低透深底（空处仍全透，字不再浮在底下日志上发虚） */
#spirit.mini #sp-mini .spm-row,
#spirit.mini #sp-mini .spm-hint {
  background: rgba(12, 16, 30, .62);
  border: 1px solid rgba(157, 146, 196, .14);
  border-radius: 6px;
  padding: 3px 7px;
}
#spirit.mini #sp-mini .spm-row { margin-bottom: 6px; }
#spirit.mini #sp-mini .spm-hint {
  opacity: 1;
  font-size: 10px;
  letter-spacing: .5px;
  color: #c8bfde;
  margin-bottom: 6px;
}
#spirit.mini #sp-mini .spm-row b { color: #f0d6a0; }
#spirit.mini #sp-mini .spm-row .jrt { color: #e8c98a; }
#spirit.mini #sp-mini .spm-row .spm-yq { color: #d8b46a; }

/* ========== v4.66 行旅图宇宙版（晨昏线星球）+ 全屏模式 ========== */
#mp-planetview { position: relative; width: 100%; height: 420px; border-radius: 8px; overflow: hidden; background: #05070f; }
#mappanel.mp-small #mp-planetview { height: 300px; }
#mp-planet3d { position: absolute; inset: 0; }
#mp-planet3d canvas { display: block; width: 100%; height: 100%; cursor: grab; }
#mp-planet3d canvas:active { cursor: grabbing; }
#mp-planetlabels { position: absolute; inset: 0; pointer-events: none; overflow: hidden; }
.plb {
  position: absolute; transform: translate(-50%, -130%); pointer-events: auto;
  font-size: 11px; letter-spacing: 1px; color: #ece7f5; white-space: nowrap;
  text-shadow: 0 0 4px rgba(0,0,0,.9), 0 1px 2px rgba(0,0,0,.8);
  cursor: pointer; opacity: 0; transition: opacity .18s;
  padding: 1px 5px; border-radius: 5px;
}
.plb:hover { color: #ffe9b8; background: rgba(216,180,106,.16); }
.plb::after {   /* 落点钉 */
  content: ''; position: absolute; left: 50%; top: 100%; transform: translateX(-50%);
  width: 4px; height: 4px; border-radius: 50%; background: #d8b46a;
  box-shadow: 0 0 4px rgba(216,180,106,.8);
}
.plb.cur { color: #ffd98a; font-weight: bold; }
.plb.cur::after { background: #ffd98a; width: 6px; height: 6px; box-shadow: 0 0 8px rgba(255,217,138,.95); }
.plv {
  position: absolute; left: 10px; bottom: 8px; z-index: 3; pointer-events: none;
  font-size: 11px; letter-spacing: 3px; color: rgba(216,180,106,.78);
  text-shadow: 0 1px 3px rgba(0,0,0,.9);
}
/* 全屏模式：面板铺满视口，星球/平面两版通吃 */
#mappanel.mp-full {
  position: fixed !important; left: 0 !important; top: 0 !important; right: 0 !important; bottom: 0 !important;
  width: auto !important; height: auto !important; z-index: 80; border-radius: 0;
}
#mappanel.mp-full .mp-body { flex: 1; display: flex; flex-direction: column; overflow: hidden; }
#mappanel.mp-full #mp-planetview { flex: 1; height: auto; }
#mappanel.mp-full #mp-svg { flex: 1; height: 100%; }

/* ========== v4.66b 头部按钮行压回 + 星球全链路样式 ========== */
/* 按钮还是那些按钮：收紧宽高与间距，当前地文字超长省略，避免撑高头栏 */
.mp-head { gap: 4px; flex-wrap: wrap; row-gap: 3px; }
.mbtn { width: 21px; height: 20px; font-size: 11px; }
.mp-cur { max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 星球节点：归属色落点钉 + 派系旗 + 争夺/市肆角标 */
.plb .plb-flag { margin-right: 2px; font-size: 12px; text-shadow: 0 0 4px rgba(0,0,0,.9); }
.plb .plb-bd { margin-left: 2px; font-size: 10px; }
.plb.dim { opacity: .62; }
.plb::after { background: var(--own, #d8b46a); box-shadow: 0 0 4px var(--own, #d8b46a); }
/* 战报钉（球面版：红底方块钉，与平面版同形） */
.plb-pin {
  position: absolute; transform: translate(-50%, -50%); pointer-events: auto;
  width: 17px; height: 17px; border-radius: 4px; text-align: center;
  font-size: 11px; line-height: 17px; color: #ffd9d0;
  background: rgba(90,26,22,.85); border: 1px solid rgba(226,96,80,.8);
  box-shadow: 0 1px 5px rgba(0,0,0,.6); cursor: pointer; opacity: 0; transition: opacity .18s;
}
.plb-pin:hover { background: rgba(140,36,28,.92); }
.plb-pin sup { font-size: 8px; color: #ffb9a8; margin-left: 1px; }

/* ---- v4.76 全屏 lite：B站 iframe 全屏合成层重建（频闪）对策——全屏期关全部毛玻璃 ---- */
.fs-lite, .fs-lite *, .fs-lite *::before, .fs-lite *::after {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* ================= v12 手机版式（html.mb 生效；检测/切换在 bridge_ui.js） =================
   策略：一套抽屉式布局横竖屏通用——左栏手账变左侧抽屉（边缘「手账」舌开合），
   浮动面板全屏化，顶栏单行横滑，输入条防 iOS 聚焦放大。桌面样式一行不动。 */

/* 顶栏：单行横滑（不换行——#layout 高度按 46px 算死的，换行会顶穿布局） */
html.mb #topbar { flex-wrap: nowrap; overflow-x: auto; gap: 8px; padding: 0 8px; scrollbar-width: none; }
html.mb #topbar::-webkit-scrollbar { display: none; }
html.mb #topbar .brand { flex: 0 0 auto; }
html.mb #topbar .tbtn { flex: 0 0 auto; font-size: 11px; padding: 3px 8px; }
html.mb #tokenbar { flex: 0 0 auto; font-size: 10px; }

/* 天下危局挂件：不再居中定宽，左右贴边自适应 */
html.mb #worldbar { left: 8px; right: 8px; transform: none; min-width: 0; max-width: none; width: auto; overflow: hidden; }

/* 布局视口防爆（实测根因：固定元素内宽内容会把 Chrome 布局视口从 390 撑到 472，
   一切 left/right 贴边面板跟着溢出 82px——「UI 挤出去不显示」的真凶）：
   行旅图头行允许换行（按钮排自然宽 454px 是首犯）；输入条各件允许缩；body 禁横滚兜底 */
html.mb #mappanel .mp-head { flex-wrap: wrap; row-gap: 4px; }
html.mb body { overflow-x: hidden; }

/* 左栏手账 → 左侧抽屉：默认藏，边缘舌点开；点抽屉外任意处收起 */
html.mb #hud {
  position: fixed !important; left: 0; top: 46px; bottom: 36px; width: min(86vw, 340px); z-index: 75;
  background: rgba(14,18,34,.97); border-right: 1px solid rgba(125,106,168,.5);
  transform: translateX(-103%); transition: transform .22s ease; box-shadow: 8px 0 30px rgba(0,0,0,.5);
}
html.mb.hud-open #hud { transform: none; }
#mb-hudtab { display: none; }
html.mb #mb-hudtab {
  display: block; position: fixed; left: 0; top: 42%; z-index: 74;
  writing-mode: vertical-lr; padding: 14px 5px; font-size: 12px; letter-spacing: 3px;
  color: #e8d9b0; background: rgba(20,25,46,.88); border: 1px solid rgba(216,180,106,.5); border-left: none;
  border-radius: 0 8px 8px 0; cursor: pointer; user-select: none;
}
html.mb.hud-open #mb-hudtab { display: none; }

/* 聊天区全宽；输入条紧凑 + 安全区 + 16px 字号防 iOS 聚焦自动放大 */
html.mb #chat { padding: 12px 12px 8px; }
html.mb #inputbar { gap: 6px; padding: 8px 10px calc(10px + env(safe-area-inset-bottom, 0px)); }
html.mb #inputbar .qk { padding: 4px 7px; font-size: 13px; flex: 0 0 auto; }
html.mb #inp { font-size: 16px; padding: 9px 12px; min-width: 0; }
html.mb #btn-send { padding: 0 14px; letter-spacing: 1px; }
html.mb #battlebar { margin: 0 10px 8px !important; }

/* 浮动面板全屏化（左右贴边，宽度让位给视口） */
html.mb #spirit, html.mb #spirit:not(.mini) { left: 8px !important; right: 8px !important; width: auto !important; max-width: none !important; }
html.mb #mappanel { left: 8px !important; right: 8px !important; top: 52px !important; bottom: 10px !important; width: auto !important; max-height: none !important; }
html.mb #log-panel { left: 8px; right: 8px; bottom: 8px; width: auto; }
html.mb #saves-pop { left: 8px; right: 8px; width: auto; }
html.mb #codexpanel { width: 96vw; height: 92vh; }
html.mb #cx-nav { width: 126px; }
html.mb #settings { width: 96vw; height: 88vh; }
html.mb #armor-tree { width: 96vw; max-height: 92vh; }
html.mb #fissure-mask .fs-card, html.mb .boot-loadpop { max-width: 92vw; }

/* 账目栏：页签紧凑可横滑 */
html.mb .lb-head { overflow-x: auto; scrollbar-width: none; }
html.mb .lb-head::-webkit-scrollbar { display: none; }
html.mb .lb-tab { flex: 0 0 auto; }

/* ================= v14 触屏拖动补链 + 行动仓/战斗框适配 ================= */
/* 拖柄禁浏览器手势接管：不设的话，单指按住先走滚动/捏合判定，pointermove 被延迟派发
   或直接 pointercancel——「拖动不跟手、灵敏度极低」的根因（桌面无手势判定故无感） */
html.mb .gt-head, html.mb #wb-head, html.mb #swd-head, html.mb .lp-head,
html.mb .a3-head, html.mb #mappanel canvas, html.mb #planet-fs canvas { touch-action: none; }

/* 战斗框三列（侧栏 108×2+战场 150+gap）最小 372px，390 屏加 padding 必溢——收窄 */
html.mb #battlebar { padding: 8px 10px; }
html.mb .bb-side { flex-basis: 84px; min-height: 108px; }
html.mb .bb-stagebox { min-width: 100px; height: 116px; }
html.mb .bb-k { width: 42px; }
html.mb .bb-side .bb-k { width: 26px; }
html.mb .bb-limb, html.mb .bb-skill, html.mb .bb-tgt { font-size: 12px; padding: 5px 8px; }

/* 行动仓圆环：.a3-wheel 620px 硬宽（全像素绝对定位）——zoom 等比收，事件坐标随件缩放最稳 */
@media (max-width: 400px) { html.mb #actdock3 .a3-wheel { zoom: .52; } }
@media (min-width: 401px) and (max-width: 480px) { html.mb #actdock3 .a3-wheel { zoom: .6; } }
@media (min-width: 481px) and (max-width: 620px) { html.mb #actdock3 .a3-wheel { zoom: .74; } }
@media (min-width: 621px) { html.mb #actdock3 .a3-wheel { zoom: .88; } }

/* 开局界面：标题/按钮按小屏收 */
html.mb .boot-title { font-size: 46px !important; }
html.mb .boot-motto { font-size: 13px; }
html.mb .boot-menu .boot-btn { font-size: 14px; padding: 9px 24px; }

/* ================= v17 右上舌签列（心图/行旅/日志/危局/劫数） ================= */
/* 与手账舌同款竖签，贴右缘竖排；类隐藏用 !important 盖引擎 paint 的内联 display，重绘不回弹 */
#mb-tabs { display: none; }
html.mb #mb-tabs { position: fixed; right: 0; top: 56px; z-index: 74; display: flex; flex-direction: column; gap: 6px; }
html.mb #mb-tabs .mbt {
  writing-mode: vertical-lr; padding: 12px 5px; font-size: 12px; letter-spacing: 3px;
  color: #e8d9b0; background: rgba(20,25,46,.88); border: 1px solid rgba(216,180,106,.5); border-right: none;
  border-radius: 8px 0 0 8px; cursor: pointer; user-select: none;
}
html.mb #mb-tabs .mbt.on { background: rgba(216,180,106,.30); border-color: #d8b46a; }
html.mb.mbhide-log #log-panel { display: none !important; }
html.mb.mbhide-wb #worldbar { display: none !important; }
html.mb.mbhide-swd #swdock { display: none !important; }
/* 劫数坞展开时全宽贴边（本体拖拽存位在小屏可能出屏） */
html.mb #swdock { left: 8px !important; right: 8px !important; width: auto !important; max-width: none !important; }

/* v17b 日志头触屏拖区加宽（旧 padding 7px/字号 13px，指尖命中率太低——「非常难拖动」的根因） */
html.mb #log-panel .lp-head { padding: 13px 12px; gap: 10px; }
html.mb #log-panel .lp-head .lp-title { font-size: 15px; padding: 4px 8px 4px 0; }
html.mb #log-panel .lp-head button { width: 34px; height: 30px; font-size: 14px; }

/* ================= v18 H7 省电批（用户实测发热 2026-09-06） =================
   原则：视觉效果保留，功耗压到底。JS 侧（数量/频率）在 green_apply H7；此处管 CSS 侧。
   全部 html.mb 守卫，桌面版式零影响。 */

/* H7b 摘毛玻璃：backdrop-filter 每帧对底层全屏模糊采样，是移动端 GPU 发热公认大户。
   玩家常开面板全摘，底色不透明度补齐保可读（参照 v11 心图 .92 / fs-lite 先例） */
html.mb #topbar, html.mb #worldbar, html.mb .hud-block, html.mb #battlebar,
html.mb #mappanel, html.mb #spirit, html.mb #evdock, html.mb #swdock,
html.mb #log-panel, html.mb #armor-tree, html.mb #item-codex,
html.mb .msg .bubble, html.mb .boot-btn,
html.mb #actdock3, html.mb #actdock3 .a3-wheel, html.mb #actdock3 .a3-opt {
  backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
}
html.mb #log-panel, html.mb #worldbar, html.mb #spirit, html.mb #evdock,
html.mb #swdock, html.mb #mappanel, html.mb .hud-block, html.mb #battlebar {
  background: rgba(20, 25, 46, .88) !important;
}
html.mb .msg .bubble { background: rgba(18, 22, 40, .78) !important; }
html.mb #actdock3 .a3-opt { background: rgba(13, 18, 34, .92) !important; }
html.mb #item-codex { background: rgba(14, 18, 34, .94) !important; }

/* H7d 停纯装饰无限动画（功能指示保留：流式光标 blink、战伤 bb-hurtp、写本提醒 fbpulse、
   日晕 wxSunBreathe）。停的每一条都是每帧 paint/layout 的常驻开销： */
html.mb #weather-sky .wx-sun-core { animation: none !important; }        /* 日核 7s 胀缩（box-shadow+filter 双 paint） */
html.mb #weather-sky .wx-ray-motes i::after { animation: none !important; } /* 尘粒反光闪烁 3.2s×26（rAF 微呼吸仍在） */
html.mb .qy-pulse { animation: none !important; opacity: .5; }           /* 部曲/产业圆脉冲：SVG r 动画=每帧布局，最毒 */
html.mb #mp-svg .nm-pulse { animation: none !important; opacity: .55; }  /* 心图当前节点环：静态环仍可见 */
html.mb #sp-svg .sp-nmsign, html.mb #sp-svg .sp-ine,
html.mb #spirit.inertia .sp-title::after { animation: none !important; } /* 念力印记/惯性呼吸：文字本体仍在 */

/* ================= v18b H8 省电第二刀 ================= */
/* H8a 丁达尔光锥混合模式摘除（本批最大头）：.wx-rays 是 200vmax 巨层（≈4倍屏面积）×
   mix-blend-mode:screen —— 合成器每帧要把这层和底下整个画面做屏幕混合，移动端发热首犯。
   改 normal 后近乎白色的淡光锥视觉差异极小；两层偏角副光锥（::before/::after）直接摘除。 */
html.mb #weather-sky .wx-rays, html.mb #weather-sky .wx-ray-column { mix-blend-mode: normal !important; }
html.mb #weather-sky .wx-rays::before, html.mb #weather-sky .wx-rays::after { content: none !important; }
/* H8d 劫霾双层渐变 → 留一层（厄运态专属，出现率低但一出现就是双层全屏动画） */
html.mb #omen-drift.doom::after { content: none !important; }

/* ================= v18c H9 功耗账本案结（探针实测） =================
   实测 S2 闲置期动画面积 320万px²/帧，光锥一家占 274万。CSS 动画不受 rAF 泵管制，
   始终满刷新率跑——唯一的省法是让巨层静止。视觉保留：光锥/日晕本体还在，只是不摇。 */
html.mb #weather-sky .wx-rays { animation: none !important; }       /* ±2.5°/20s 摇摆本不可辨 */
html.mb #weather-sky .wx-sun-halo { animation: none !important; }   /* filter 动画=每帧重绘 72vmin 层 */

/* ================= v19 H10 天气 canvas 收编 =================
   mb 下云/雨/雾团/贴地雾 4 组 DOM 动画层降级为纯数据模型（不渲染，dataset 照常维护），
   画面由单 canvas 层（.wx-cv）逐帧等价重绘——20~80 合成层 → 1 层，且吃 rAF 泵限频 */
html.mb #weather-sky.wxcv-on #wx-clouds, html.mb #weather-sky.wxcv-on #wx-rain,
html.mb #weather-sky.wxcv-on #wx-fog-p, html.mb #weather-sky.wxcv-on .wx-mist {
  display: none !important;
}
#weather-sky .wx-cv { position: absolute; left: 0; top: 0; pointer-events: none; }

/* ================= v19b 五连修 ================= */
/* 修3a 特殊对话窗（事件/同伴/势力共用 #evdlg）：桌面 right:404px 在手机整体出屏——贴边全宽 */
html.mb #evdlg { left: 8px !important; right: 8px !important; top: 64px !important; width: auto !important; max-width: none !important; max-height: 72vh; }
/* 修3b 特殊事件坞 #evdock 入舌签列：贴边全宽 + 类隐藏（桌面 right:300px 同样出屏） */
html.mb #evdock { left: 8px !important; right: 8px !important; top: 52px !important; width: auto !important; max-width: none !important; }
html.mb.mbhide-evd #evdock { display: none !important; }

/* ---- v20 H11c 两指捏合缩放：浏览器默认把双指手势抢去做页面缩放，必须 touch-action:none 放权给 JS（仅手机版式，桌面不动） ---- */
html.mb #mp-svg { touch-action: none; }
html.mb #mp-planet3d canvas { touch-action: none; }

/* 性能H3：长列表屏外跳渲染（渐进增强，不支持的浏览器自动忽略） */
#chat .msg { content-visibility: auto; contain-intrinsic-size: auto 110px; }
#log-panel .lp-line { content-visibility: auto; contain-intrinsic-size: auto 22px; }
