/* 只加动效，不改 UI 风格 */
body.dungeon-v2::before{
  animation: torchAmbient 7.5s ease-in-out infinite alternate;
  will-change: opacity, transform;
}
@keyframes torchAmbient{
  0%{opacity:.72;transform:scale(1)}
  38%{opacity:.92;transform:scale(1.012)}
  62%{opacity:.78;transform:scale(1.004)}
  100%{opacity:1;transform:scale(1.018)}
}
body.dungeon-v2::after{animation:vignettePulse 12s ease-in-out infinite alternate}
@keyframes vignettePulse{from{opacity:.92}to{opacity:1}}

.embers i{animation-duration:8.5s;filter:drop-shadow(0 0 4px rgba(255,150,55,.5))}
.embers i:nth-child(2){animation-duration:12s}
.embers i:nth-child(5){animation-duration:10s}
.dust{animation-duration:20s}
.torches i{animation-duration:4.8s}

.panel{transition:transform .28s ease, box-shadow .28s ease}
.side-col .panel:hover{transform:translateY(-2px);box-shadow:0 18px 38px rgba(0,0,0,.32)}
.scene{overflow:hidden}
.scene-bg{transition:opacity .7s ease, transform 1.2s ease}
.scene:hover .scene-bg{transform:scale(1.015)}
.scene.scene-in .scene-bg{animation:sceneIn .9s ease-out}
.scene .scene-layers .l1{animation:mist 22s ease-in-out infinite alternate}
.scene .scene-layers .l2{animation:mist 16s ease-in-out infinite alternate-reverse}
@keyframes mist{from{transform:translateX(-8px)}to{transform:translateX(14px)}}

.msg.dm{animation:inkRise .45s cubic-bezier(.2,.8,.2,1) both}
@keyframes inkRise{from{opacity:0;transform:translateY(5px);filter:blur(.4px)}to{opacity:1;transform:none;filter:none}}
.msg.player{animation:stampRise .35s ease-out both}
@keyframes stampRise{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

#actionText:focus{animation:focusBreathe 2.6s ease-in-out infinite}
@keyframes focusBreathe{50%{box-shadow:0 0 0 4px rgba(240,180,82,.16)}}
.btn-gold{transition:transform .16s ease, filter .16s ease, box-shadow .16s ease}
.btn-gold:hover{transform:translateY(-1px)}
.chip-btn{transition:color .2s, border-color .2s, background .2s, transform .2s}
.chip-btn:hover{transform:translateY(-1px)}
.codex-btn,.buy-btn{transition:color .2s,border-color .2s,background .2s}

.status-strip .ss-hp i{animation:hpBreathe 3.8s ease-in-out infinite}
@keyframes hpBreathe{50%{filter:brightness(1.2)}}
#radar{animation:radarGlow 6s ease-in-out infinite alternate}
@keyframes radarGlow{from{filter:drop-shadow(0 0 0 rgba(255,180,80,0))}to{filter:drop-shadow(0 0 8px rgba(255,180,80,.18))}}

/* 跟随鼠标的火光（由 effects.js 创建） */
#torch-follow{
  position:fixed;left:0;top:0;width:620px;height:620px;border-radius:50%;
  pointer-events:none;z-index:2;opacity:0;
  background:radial-gradient(circle,rgba(255,146,54,.10) 0%,rgba(255,120,40,.05) 38%,transparent 68%);
  mix-blend-mode:screen;transform:translate(-50%,-50%);
  transition:opacity .8s ease;will-change:left,top;
}
@media(prefers-reduced-motion:reduce){
  body.dungeon-v2::before,body.dungeon-v2::after,.embers i,.dust,.torches i,
  .scene-bg,.scene .scene-layers i,.msg.dm,.msg.player,#actionText,.ss-hp i,#radar{animation:none!important}
  .panel,.scene-bg,.btn-gold,.chip-btn{transition:none!important}
}

html[lang="en"] .goal-line::before{content:"Objective · "}

.legal-strip{display:flex;justify-content:center;align-items:center;gap:8px;height:28px;box-sizing:border-box;padding:0 12px;border-top:1px solid rgba(92,74,34,.45);background:rgba(6,8,13,.72);color:#93876f;font-size:11px;letter-spacing:.3px;position:relative;z-index:2;flex-shrink:0}
.legal-strip a{color:#b8ab95;text-decoration:none}.legal-strip a:hover{color:#ffd47e}
.legal-strip span{opacity:.45}
@media(max-width:940px){.legal-strip{height:auto;min-height:28px;flex-wrap:wrap;padding:6px 10px}.game-grid{height:auto!important}}
