.character-dialogue{
  --speech:#ffc64b;--speech-glow:#ffb02c66;
  position:absolute;z-index:96;inset:var(--game-nav-height) 0 0;overflow:hidden;
  background:linear-gradient(90deg,#080a0cb0,transparent 38%),linear-gradient(0deg,#080a0cf9 0%,#0a0b0d80 38%,transparent 85%);
  isolation:isolate;color:#f5f3f0;animation:campaign-enter 210ms ease both;
}
.character-dialogue[data-speaker=player]{--speech:#58d4ff;--speech-glow:#30baff88}
.dialogue-character{
  position:absolute;bottom:0;width:31%;height:87%;object-fit:contain;object-position:bottom;
  opacity:1;filter:brightness(.48) saturate(.64);transition:filter 200ms,opacity 200ms,scale 180ms;
  pointer-events:none;animation:character-arrival 320ms cubic-bezier(.2,.75,.25,1) both;
}
.dialogue-character[hidden]{display:none}
.dialogue-character[data-character=raze]{left:0;--entry:-18%;object-position:left bottom}
.dialogue-character[data-character=player]{right:0;--entry:18%;object-position:right bottom}
.dialogue-character.is-speaking{opacity:1;filter:drop-shadow(0 0 17px var(--speech-glow))}
.dialogue-character.is-speaking[data-emotion=happy]{scale:1.025;filter:brightness(1.12) drop-shadow(0 0 17px var(--speech-glow))}
.dialogue-character.is-speaking[data-emotion=surprised]{scale:1.045}
.dialogue-character.is-speaking[data-emotion=annoyed]{filter:contrast(1.18) drop-shadow(0 0 21px var(--speech-glow))}
.dialogue-character.is-speaking[data-emotion=thoughtful]{filter:brightness(.84) drop-shadow(0 0 12px var(--speech-glow))}
@keyframes character-arrival{from{translate:var(--entry) 0;opacity:0}}
.character-dialogue .campaign-copy{
  position:absolute;left:25%;top:33%;width:min(31%,560px);
  padding:clamp(13px,1.6vw,30px);border:2px solid var(--speech);border-radius:18px;
  background:linear-gradient(140deg,#1b1914f7,#101216fc);
  box-shadow:0 0 23px var(--speech-glow),inset 0 0 20px color-mix(in srgb,var(--speech) 13%,transparent);
}
.character-dialogue[data-speaker=player] .campaign-copy{left:auto;right:25%;top:43%;background:linear-gradient(140deg,#121c23fa,#101216fc)}
.character-dialogue[data-speaker=narrator] .campaign-copy{left:30%;width:40%}
.character-dialogue .campaign-copy::before{
  content:"";position:absolute;top:56%;left:-13px;width:22px;height:22px;rotate:45deg;
  background:#191814;border-left:2px solid var(--speech);border-bottom:2px solid var(--speech);
}
.character-dialogue[data-speaker=player] .campaign-copy::before{left:auto;right:-13px;rotate:225deg;background:#111a20}
.character-dialogue[data-speaker=narrator] .campaign-copy::before{display:none}
.character-dialogue .campaign-copy h2{color:var(--speech);margin:.22em 0;font:800 clamp(23px,2.6vw,48px)/1.05 Inter,Arial,sans-serif}
.character-dialogue .campaign-copy p{margin:.35em 0 .75em;line-height:1.4;font-size:clamp(15px,1.48vw,27px);min-height:2.8em;max-height:18dvh;overflow:auto}
.character-dialogue .eyebrow{color:var(--speech);font-size:clamp(9px,.9vw,16px)}
.dialogue-count{font-size:clamp(12px,1.15vw,22px);color:#cecac2}
.character-dialogue .campaign-scene-controls{
  position:absolute;bottom:clamp(10px,4.7vh,54px);left:50%;translate:-50% 0;display:flex;gap:clamp(8px,2vw,36px);
}
.character-dialogue .campaign-scene-controls button{
  min-height:44px;min-width:clamp(114px,15vw,290px);padding:.45em 1.1em;justify-content:center;text-align:center;
  font-size:clamp(14px,1.7vw,29px);border-radius:11px;
}
.character-dialogue .campaign-scene-controls .campaign-scene-close{display:none}
.dialogue-choices{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;max-height:15dvh;overflow:auto}
.dialogue-choices[hidden]{display:none}
.dialogue-choices button{padding:6px 10px;background:#22262a;border:1px solid var(--speech);border-radius:6px;color:#fff}
#game:has(.character-dialogue) :is(.raze-target,.vehicle-target){visibility:hidden}
body:has(.character-dialogue) .account-toast{visibility:hidden}
@media(max-height:550px) and (orientation:landscape){
  .dialogue-character{width:29%;height:81%}
  .character-dialogue .campaign-copy,.character-dialogue[data-speaker=player] .campaign-copy{top:20%;width:39%;padding:11px;border-radius:11px}
  .character-dialogue .campaign-copy{left:23%}
  .character-dialogue[data-speaker=player] .campaign-copy{left:auto;right:23%}
  .character-dialogue[data-speaker=narrator] .campaign-copy{left:28%;width:44%}
  .character-dialogue .campaign-copy h2{font-size:clamp(20px,3vw,25px)}
  .character-dialogue .campaign-copy p{font-size:15px;max-height:24dvh;margin:.3em 0 .5em}
  .character-dialogue .campaign-scene-controls{bottom:9px}
  .character-dialogue .campaign-scene-controls button{min-height:42px}
}
body.no-motion .dialogue-character{animation:none;transition:none}
@media(prefers-reduced-motion:reduce){.dialogue-character{animation:none;transition:none}}


.dialogue-character[data-character=stranger]{left:0;--entry:-18%;object-position:left bottom}
.character-dialogue[data-speaker=stranger]{--speech:#a6d0bb;--speech-glow:#79c3a75c}
