:root {
  color-scheme:dark;
  --ink:#f5ecd2;
  --muted:#b3baa3;
  --gold:#d3b46e;
  --border:#736849;
  --panel:#192721;
  --deep:#0e1713;
  --green:#90b970
}
* {
  box-sizing:border-box
}
body {
  margin:0;
  background:var(--deep);
  color:var(--ink);
  font:14px/1.4 system-ui,-apple-system,Segoe UI,sans-serif
}
button,input {
  font:inherit
}
button {
  color:var(--ink);
  background:linear-gradient(#34443b,#213027);
  border:1px solid #687357;
  border-radius:5px;
  min-height:36px;
  padding:7px 12px;
  cursor:pointer;
  box-shadow:inset 0 1px #ffffff0b
}
button:hover:not(:disabled) {
  border-color:#d8c386;
  background:linear-gradient(#43543f,#2b3c2e)
}
button:active:not(:disabled) {
  transform:translateY(1px)
}
button:disabled {
  opacity:.4;
  cursor:default
}
button:focus-visible,input:focus-visible {
  outline:3px solid #aadee8;
  outline-offset:2px
}
.primary {
  background:linear-gradient(#d1b274,#9a7541);
  color:#1c2115;
  border-color:#e1ca91;
  font-weight:750
}
.primary:hover:not(:disabled) {
  background:linear-gradient(#e9cf95,#b59154);
  border-color:#f2ddb0
}
.quiet,.text-button {
  background:transparent;
  border-color:transparent;
  box-shadow:none;
  color:var(--muted)
}
[hidden] {
  display:none!important
}
h1,h2,h3,p {
  margin:0
}
h1,h2,h3 {
  font-family:Georgia,serif;
  font-weight:600
}
h1 {
  font-size:38px;
  letter-spacing:-1px
}
h2 {
  font-size:25px
}
small {
  color:var(--muted)
}
.game-shell {
  height:100dvh;
  min-height:320px;
  display:grid;
  grid-template-rows:auto minmax(0,1fr) auto;
  overflow:hidden
}
.battle-hud {
  z-index:5;
  height:62px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  padding:8px 16px;
  background:linear-gradient(#25352b,#19251f);
  border-bottom:1px solid var(--border);
  box-shadow:0 3px 12px #0005
}
.zone-button {
  display:flex;
  align-items:center;
  gap:9px;
  background:none;
  border:0;
  padding:0;
  text-align:left;
  box-shadow:none;
  min-width:165px
}
.zone-button strong {
  display:block;
  font:600 19px Georgia,serif
}
.zone-button small {
  display:block;
  font-size:11px
}
.alliance-crest {
  font:700 21px Georgia,serif;
  width:30px;
  height:36px;
  background:#2e5480;
  color:#e5ca81;
  text-align:center;
  padding-top:2px;
  border:2px solid #b1a26c;
  clip-path:polygon(0 0,100% 0,100% 70%,50% 100%,0 70%)
}
.battle-resources {
  display:flex;
  align-items:center;
  gap:24px
}
.battle-resources>span {
  display:grid;
  grid-template-columns:auto auto;
  column-gap:7px;
  align-items:center;
  min-width:48px
}
.battle-resources strong {
  font-size:21px;
  line-height:1.1;
  font-variant-numeric:tabular-nums
}
.battle-resources small {
  font-size:10px;
  grid-column:2;
  text-transform:uppercase;
  letter-spacing:.6px
}
.battle-resources img,.keep-icon {
  width:24px;
  height:26px;
  grid-row:span 2
}
.keep-icon {
  display:block;
  border:2px solid #9badb9;
  background:#48749c;
  clip-path:polygon(0 0,100% 0,100% 62%,50% 100%,0 62%)
}
.battle-resources>span:last-child {
  grid-template-columns:auto
}
.battle-resources>span:last-child small {
  grid-column:1
}
.battle-controls {
  display:flex;
  gap:5px
}
.battle-controls button {
  min-width:41px;
  padding:7px 9px;
  font-size:12px
}
.help-button {
  font:bold 18px Georgia!important
}
.arena {
  display:grid;
  place-items:center;
  min-height:0;
  background:#0d1711
}
.field-frame {
  position:relative;
  width:min(100%,calc((100dvh - 244px)*5/3));
  max-height:100%;
  aspect-ratio:5/3;
  border:2px solid #574d33;
  background:#314925;
  box-shadow:0 0 32px #0008;
  overflow:hidden
}
#field-scroller {
  height:100%;
  width:100%;
  overflow:hidden;
  overscroll-behavior:contain;
  scrollbar-width:thin;
  scrollbar-color:#a38b58 #1c2c22
}
.battlefield {
  position:relative;
  width:100%;
  aspect-ratio:5/3
}
#field {
  display:block;
  width:100%;
  height:100%
}
.cells {
  position:absolute;
  inset:0
}
.grid-cell {
  position:absolute;
  width:4%;
  height:6.666667%;
  border:0;
  border-radius:0;
  background:transparent!important;
  box-shadow:none;
  padding:0;
  min-height:0;
  touch-action:pan-x pan-y
}
.grid-cell:hover:not(:disabled) {
  background:#f3de7c16!important;
  transform:none
}
.grid-cell:focus-visible {
  outline:2px solid #bce9ed;
  outline-offset:-2px;
  z-index:1
}
.grid-cell:disabled {
  opacity:1
}
.map-tools {
  position:absolute;
  top:8px;
  left:8px;
  display:flex;
  gap:4px
}
.map-tools button {
  min-height:29px;
  padding:4px 9px;
  background:#152b20e8;
  font-size:11px
}
.minimap-button {
  display:none;
  position:absolute;
  right:8px;
  bottom:8px;
  width:112px;
  height:70px;
  padding:3px;
  background:#142319ed;
  border:1px solid #c5b37c;
  box-shadow:0 2px 9px #0008
}
.minimap-button canvas {
  width:100%;
  height:100%;
  display:block
}
.field-frame.close-view {
  width:100%;
  height:100%;
  aspect-ratio:auto
}
.close-view #field-scroller {
  overflow:auto
}
.close-view .battlefield {
  width:1100px;
  height:660px;
  aspect-ratio:auto
}
.close-view .minimap-button {
  display:block
}
.field-toast {
  position:absolute;
  top:48px;
  left:50%;
  transform:translateX(-50%);
  max-width:min(85%,540px);
  padding:8px 15px;
  border:1px solid #d6c290;
  background:#17251eea;
  color:#f5e2b7;
  font-weight:600;
  text-align:center;
  opacity:0;
  pointer-events:none;
  transition:opacity .15s;
  z-index:3
}
.field-toast.visible {
  opacity:1
}
.pause-banner {
  position:absolute;
  top:40%;
  left:50%;
  transform:translate(-50%,-50%);
  padding:13px 26px;
  text-align:center;
  background:#14271fec;
  border:1px solid #adac7d;
  pointer-events:none;
  z-index:3
}
.pause-banner strong {
  display:block;
  font:24px Georgia
}
.pause-banner span {
  display:block;
  font-size:11px;
  color:var(--muted)
}
.wave-banner {
  position:absolute;
  top:38%;
  left:50%;
  transform:translate(-50%,-50%);
  font:600 35px Georgia;
  color:#f5df9f;
  text-shadow:0 3px 6px #000;
  text-align:center;
  pointer-events:none
}
.boss-hud {
  position:absolute;
  top:10px;
  left:50%;
  transform:translateX(-50%);
  display:flex;
  gap:8px;
  align-items:center;
  width:310px;
  background:#241c19eb;
  border:1px solid #aa7749;
  padding:6px 10px;
  z-index:2
}
.boss-hud>div {
  flex:1
}
.boss-hud .painted-portrait {
  width:36px;
  height:43px
}
.boss-hud strong {
  display:block;
  font:600 15px Georgia
}
.boss-hud small {
  display:block;
  font-size:9px
}
.boss-progress {
  height:6px;
  background:#080c08;
  margin:3px 0;
  overflow:hidden
}
.boss-progress span {
  display:block;
  width:var(--boss-health,100%);
  height:100%;
  background:linear-gradient(90deg,#972d23,#e09659)
}
.command-dock {
  position:relative;
  padding:7px 14px 9px;
  background:linear-gradient(#27362c,#18251e);
  border-top:2px solid #837453;
  box-shadow:0 -3px 14px #0005;
  z-index:4
}
.status-line {
  display:flex;
  align-items:center;
  gap:12px;
  min-height:34px;
  margin-bottom:6px
}
.status-line>div {
  flex:1;
  min-width:0
}
.status-line strong {
  display:block;
  font:600 17px Georgia
}
.status-line span {
  display:block;
  font-size:11px;
  color:var(--muted);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis
}
.status-line>button {
  font-size:12px
}
.loadout-row {
  display:flex;
  gap:13px;
  align-items:stretch
}
.tower-cards {
  display:grid;
  grid-template-columns:repeat(6,minmax(0,1fr));
  flex:1;
  gap:6px;
  min-width:0
}
.tower-card {
  position:relative;
  display:flex;
  align-items:center;
  gap:3px;
  min-width:0;
  height:67px;
  text-align:left;
  padding:3px 5px;
  overflow:hidden
}
.tower-card.active {
  border-color:#e3c381;
  background:linear-gradient(#405640,#2c4232);
  box-shadow:inset 0 0 0 1px #ad975b
}
.tower-card.unaffordable {
  filter:saturate(.7)
}
.tower-card strong {
  display:block;
  font-size:11px;
  line-height:1.2
}
.tower-card small {
  display:block;
  font-size:10px;
  margin-top:3px
}
.tower-card b {
  color:#e6c47e
}
.shortcut {
  position:absolute;
  top:2px;
  right:4px;
  font-size:9px;
  color:#a8b093
}
.painted-portrait {
  flex:none;
  display:block;
  width:42px;
  height:54px;
  background-image:url('assets/painted-local/defenders-atlas.png');
  background-repeat:no-repeat;
  background-size:300% 100%;
  filter:drop-shadow(0 2px 2px #0008)
}
.portrait-mage {
  background-position:0 0
}
.portrait-hunter {
  background-position:50% 0
}
.portrait-warrior {
  background-position:100% 0
}
.portrait-frost,.portrait-fire,.portrait-arcane {
  background-image:url('assets/painted-local/mage-spec-atlas.png');
  background-size:300% 100%
}
.portrait-frost {
  background-position:0 0
}
.portrait-fire {
  background-position:50% 0
}
.portrait-arcane {
  background-position:100% 0
}
.portrait-raider,.portrait-runner,.portrait-vanguard,.portrait-troll,.portrait-brute,.portrait-warlord {
  background-image:url('assets/painted-local/enemies-atlas.png');
  background-size:300% 200%
}
.portrait-raider {
  background-position:0 0
}
.portrait-runner {
  background-position:50% 0
}
.portrait-vanguard {
  background-position:100% 0
}
.portrait-troll {
  background-position:0 100%
}
.portrait-brute {
  background-position:50% 100%
}
.portrait-warlord {
  background-position:100% 100%
}
.mission-supplies {
  display:grid;
  grid-template-columns:repeat(4,48px);
  gap:4px;
  align-content:center
}
.supply {
  height:57px;
  padding:3px 2px;
  position:relative;
  font-size:9px;
  line-height:1.2;
  background:#263a32
}
.supply .spell-icon {
  width:28px;
  height:29px;
  display:block;
  margin:0 auto 1px;
  background:url('assets/command-icons.svg') no-repeat;
  background-size:400% 100%
}
.supply .icon-bomb {
  background-position:0 0
}
.supply .icon-freeze {
  background-position:33.333% 0
}
.supply .icon-rally {
  background-position:66.666% 0
}
.supply .icon-ultimate {
  background-position:100% 0
}
.supply.active {
  outline:2px solid #e3c681
}
.supply b {
  position:absolute;
  top:1px;
  right:2px;
  font-size:9px;
  color:#eed6a0
}
.selection {
  display:flex;
  align-items:center;
  gap:15px;
  background:#13271ed9;
  border:1px solid #8a8059;
  margin-bottom:6px;
  padding:7px 12px;
  min-height:55px
}
.selection-copy {
  flex:1;
  min-width:0
}
.selection-copy strong {
  font:600 17px Georgia;
  display:block
}
.selection-copy span {
  display:block;
  font-size:11px;
  color:var(--muted)
}
.selection button {
  font-size:12px;
  min-width:75px
}
.selection.invalid {
  border-color:#b97664
}
.incoming-panel {
  position:absolute;
  right:14px;
  bottom:100%;
  width:265px;
  background:#17271fee;
  border:1px solid #a29666;
  padding:12px;
  box-shadow:0 0 22px #0008
}
.incoming-panel strong {
  font:18px Georgia
}
.incoming-row {
  display:flex;
  align-items:center;
  gap:9px;
  font-size:12px;
  border-top:1px solid #a0a07524;
  margin-top:5px;
  padding-top:4px
}
.incoming-row .painted-portrait {
  width:30px;
  height:34px
}
.incoming-row img {
  width:34px;
  height:34px
}
.tutorial {
  position:absolute;
  left:14px;
  bottom:100%;
  max-width:400px;
  display:flex;
  align-items:center;
  gap:7px;
  padding:8px 12px;
  background:#233829f2;
  border:1px solid #d1bf8e;
  font-size:12px;
  box-shadow:0 2px 12px #0009
}
.tutorial span {
  flex:1
}
.tutorial button {
  min-height:26px;
  white-space:nowrap;
  font-size:11px;
  padding:3px 6px
}
.battle-hud.leaking {
  animation:leak-flash .6s ease
}
@keyframes leak-flash {
  50% {
    background:#71392a
  }
}
dialog {
  width:min(760px,calc(100% - 24px));
  max-height:calc(100dvh - 28px);
  padding:24px;
  border:1px solid #b6a370;
  border-radius:8px;
  background:radial-gradient(ellipse at top right,#344a34,#17281f 55%);
  color:var(--ink);
  box-shadow:0 18px 90px #0009;
  overflow:auto
}
dialog::backdrop {
  background:#08130be0;
  backdrop-filter:blur(4px)
}
dialog p {
  margin:12px 0;
  color:#c5cbbb
}
dialog button {
  margin:3px 2px
}
.eyebrow {
  font-size:10px;
  letter-spacing:2px;
  color:#d7be81!important
}
.campaign-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  min-height:150px
}
.campaign-head img {
  width:165px;
  height:165px;
  object-fit:contain;
  filter:drop-shadow(0 8px 8px #0006)
}
.campaign-wallet {
  display:flex;
  align-items:center;
  gap:20px;
  border-block:1px solid #a597652f;
  padding:10px 0;
  margin-bottom:15px;
  font-size:12px
}
.campaign-wallet span {
  display:flex;
  align-items:center;
  gap:5px
}
.campaign-wallet b {
  color:#e3c684
}
.campaign-wallet img {
  width:19px;
  height:19px
}
.mission-map-card {
  display:flex;
  gap:15px;
  align-items:center;
  padding:19px;
  border:1px solid #a49664;
  background:#14271f8a
}
.map-number {
  font:38px Georgia;
  color:#a2ad85
}
.mission-map-card>div {
  flex:1
}
.mission-map-card small {
  font-size:9px;
  letter-spacing:1.3px;
  color:#d2c08d
}
.mission-map-card h2 {
  font-size:25px;
  margin-top:3px
}
.mission-map-card p {
  font-size:12px;
  margin:7px 0
}
.mission-map-card #mission-record {
  color:#d0bd7e;
  font-size:11px
}
.setup-heading {
  margin:18px 0 8px
}
.setup-heading h2 {
  font-size:22px
}
.setup-heading h2 span {
  font:11px system-ui;
  color:#d1b977
}
.setup-heading p {
  font-size:12px;
  margin:6px 0
}
.difficulty-buttons {
  display:flex;
  gap:6px;
  margin-top:8px
}
.difficulty-buttons button {
  flex:1
}
.difficulty-buttons small {
  display:block;
  font-size:10px
}
.difficulty-buttons .selected {
  border-color:#e4c88c;
  background:#40563d
}
.loadout-picker {
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:6px
}
.pick-tower {
  display:flex;
  align-items:center;
  gap:6px;
  text-align:left;
  padding:5px;
  opacity:.65;
  position:relative
}
.pick-tower.chosen {
  opacity:1;
  border-color:#b6c186;
  background:#314931
}
.pick-tower.chosen:after {
  content:'✓';
  position:absolute;
  right:4px;
  top:3px;
  color:#e4d09a;
  font-size:11px
}
.pick-tower strong {
  display:block;
  font-size:12px
}
.pick-tower small {
  display:block;
  font-size:10px
}
.inventory-picker {
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:9px
}
.inventory-card {
  padding:9px;
  background:#162a20;
  border:1px solid #77805b
}
.inventory-card p {
  font-size:11px;
  min-height:32px;
  margin:5px 0
}
.inventory-card button {
  font-size:11px;
  width:100%;
  margin:0
}
.inventory-card .equipped {
  border-color:#d2bb80;
  background:#3a5137
}
.setup-actions {
  display:flex;
  justify-content:space-between;
  margin-top:18px
}
.campaign-settings {
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:6px;
  border-top:1px solid #afaa7233;
  margin-top:20px;
  padding-top:12px;
  font-size:11px;
  color:var(--muted)
}
.campaign-settings label {
  display:flex;
  align-items:center;
  gap:6px
}
.campaign-settings input {
  width:80px;
  accent-color:#d5bf84
}
.campaign-settings button {
  font-size:11px
}
.fan-notice {
  font-size:10px;
  color:#899c85!important;
  margin-bottom:0!important
}
#campaign-notice:empty {
  display:none
}
.result-dialog {
  max-width:620px;
  text-align:center
}
.result-keep {
  width:140px;
  height:140px;
  object-fit:contain
}
.result-dialog h2 {
  font-size:33px
}
.result-stats {
  display:grid;
  grid-template-columns:repeat(3,1fr);
  border-block:1px solid #ada57544;
  margin:18px 0;
  padding:12px
}
.result-stats span {
  font-size:10px;
  color:var(--muted)
}
.result-stats strong {
  display:block;
  font:31px Georgia;
  color:#e9d197
}
.result-actions {
  display:flex;
  justify-content:center;
  flex-wrap:wrap
}
.key-guide {
  font-size:11px
}
#qa-controls {
  position:fixed;
  bottom:0;
  right:0;
  z-index:10;
  font:9px monospace;
  background:#000c;
  color:#bdeab2;
  padding:2px 5px;
  pointer-events:none
}
@media(max-width:850px) {
  .battle-hud {
    padding:7px 10px
  }
  .battle-resources {
    gap:13px
  }
  .tower-card {
    flex-direction:column;
    justify-content:center;
    text-align:center;
    height:72px;
    padding:1px
  }
  .tower-card .painted-portrait {
    width:33px;
    height:40px
  }
  .tower-card strong {
    font-size:10px;
    white-space:nowrap
  }
  .tower-card small {
    font-size:9px;
    margin:0
  }
  .tower-card .shortcut {
    display:none
  }
  .mission-supplies {
    grid-template-columns:repeat(4,40px)
  }
  .supply {
    height:62px
  }
  .loadout-row {
    gap:6px
  }
  .command-dock {
    padding:6px 8px 8px
  }
  .field-frame {
    width:min(100%,calc((100dvh - 252px)*5/3))
  }
}
@media(max-width:620px) {
  .battle-hud {
    height:84px;
    flex-wrap:wrap;
    gap:5px;
    padding:5px 8px
  }
  .zone-button {
    min-width:145px
  }
  .zone-button strong {
    font-size:17px
  }
  .zone-button small {
    font-size:9px
  }
  .alliance-crest {
    width:25px;
    height:31px;
    font-size:18px
  }
  .battle-resources {
    gap:13px;
    margin-left:auto
  }
  .battle-resources strong {
    font-size:18px
  }
  .battle-resources small {
    font-size:8px
  }
  .battle-resources img,.keep-icon {
    width:19px;
    height:21px
  }
  .battle-controls {
    width:100%;
    justify-content:flex-end;
    gap:5px
  }
  .battle-controls button {
    min-height:27px;
    padding:3px 9px;
    font-size:10px
  }
  .battle-controls #help {
    font-size:14px!important
  }
  .field-frame {
    width:100%;
    border-inline:0
  }
  .field-frame.close-view {
    height:100%
  }
  .status-line {
    gap:3px;
    min-height:32px
  }
  .status-line strong {
    font-size:14px
  }
  .status-line span {
    font-size:10px;
    max-width:230px
  }
  .status-line>button {
    font-size:10px;
    min-height:30px;
    padding:5px 7px
  }
  .loadout-row {
    flex-direction:column;
    gap:5px
  }
  .tower-cards {
    gap:3px
  }
  .tower-card {
    height:70px
  }
  .tower-card .painted-portrait {
    width:33px;
    height:39px
  }
  .tower-card strong {
    font-size:9px
  }
  .mission-supplies {
    display:flex;
    justify-content:center;
    gap:6px
  }
  .supply {
    display:flex;
    align-items:center;
    gap:4px;
    height:36px;
    min-width:74px;
    padding:2px 6px;
    font-size:9px
  }
  .supply .spell-icon {
    width:25px;
    height:25px;
    margin:0
  }
  .supply b {
    top:0;
    right:2px;
    font-size:8px
  }
  .selection {
    gap:5px;
    padding:6px 7px;
    min-height:61px
  }
  .selection-copy strong {
    font-size:14px
  }
  .selection-copy span {
    font-size:10px
  }
  .selection button {
    min-width:54px;
    padding:5px 7px;
    font-size:11px
  }
  .tutorial {
    left:7px;
    max-width:calc(100% - 14px);
    font-size:11px
  }
  .boss-hud {
    top:43px;
    width:255px;
    padding:5px
  }
  .boss-hud strong {
    font-size:13px
  }
  .boss-hud .painted-portrait {
    width:27px;
    height:34px
  }
  .field-toast {
    font-size:11px;
    padding:6px 9px;
    top:42px
  }
  .wave-banner {
    font-size:27px
  }
  .pause-banner strong {
    font-size:20px
  }
  .pause-banner span {
    font-size:10px;
    white-space:nowrap
  }
  dialog {
    padding:17px
  }
  .campaign-head {
    min-height:118px
  }
  .campaign-head h1 {
    font-size:29px
  }
  .campaign-head img {
    width:115px;
    height:115px
  }
  .eyebrow {
    font-size:8px;
    letter-spacing:1.2px
  }
  .mission-map-card {
    flex-wrap:wrap;
    padding:12px;
    gap:10px
  }
  .mission-map-card h2 {
    font-size:21px
  }
  .mission-map-card button {
    margin-left:40px
  }
  .map-number {
    font-size:30px
  }
  .loadout-picker {
    grid-template-columns:repeat(2,1fr)
  }
  .pick-tower .painted-portrait {
    width:33px;
    height:42px
  }
  .pick-tower strong {
    font-size:11px
  }
  .pick-tower small {
    font-size:9px
  }
  .inventory-picker {
    gap:5px
  }
  .inventory-card {
    padding:6px
  }
  .inventory-card button {
    font-size:10px
  }
  .inventory-card p {
    font-size:10px;
    min-height:45px
  }
  .result-dialog h2 {
    font-size:27px
  }
}
@media(max-height:500px) and (min-width:621px) {
  .battle-hud {
    height:45px;
    padding:4px 9px
  }
  .zone-button strong {
    font-size:15px
  }
  .zone-button small {
    font-size:9px
  }
  .alliance-crest {
    width:24px;
    height:29px;
    font-size:17px
  }
  .battle-resources strong {
    font-size:17px
  }
  .battle-controls button {
    min-height:28px;
    padding:3px 7px;
    font-size:10px
  }
  .command-dock {
    padding:4px 8px
  }
  .status-line {
    min-height:25px;
    margin-bottom:3px
  }
  .status-line strong {
    font-size:13px
  }
  .status-line span {
    font-size:9px
  }
  .status-line>button {
    min-height:25px;
    font-size:10px;
    padding:3px 7px
  }
  .tower-card {
    height:47px;
    flex-direction:row;
    text-align:left
  }
  .tower-card .painted-portrait {
    width:29px;
    height:38px
  }
  .tower-card strong {
    font-size:9px
  }
  .tower-card small {
    font-size:8px
  }
  .mission-supplies {
    grid-template-columns:repeat(4,36px)
  }
  .supply {
    height:43px;
    font-size:8px
  }
  .supply .spell-icon {
    width:23px;
    height:24px
  }
  .selection {
    min-height:39px;
    margin-bottom:3px;
    padding:3px 8px
  }
  .selection-copy strong {
    font-size:13px
  }
  .selection-copy span {
    font-size:9px
  }
  .selection button {
    min-height:28px;
    font-size:10px
  }
  .field-frame {
    width:min(100%,calc((100dvh - 152px)*5/3))
  }
  .boss-hud {
    top:6px
  }
  .tutorial {
    font-size:10px;
    padding:5px 9px
  }
  .field-toast {
    top:38px
  }
  .map-tools {
    top:5px
  }
  .map-tools button {
    min-height:24px;
    font-size:9px;
    padding:3px 6px
  }
  .minimap-button {
    width:92px;
    height:57px
  }
}
@media(prefers-reduced-motion:reduce) {
  *,*:before,*:after {
    animation:none!important;
    transition:none!important
  }
}
@media(max-width:620px) {
  .battle-hud {
    height:92px
  }
  .battle-controls button {
    min-height:35px
  }
  .supply {
    height:44px
  }
  .selection button {
    min-height:40px
  }
}
/* Campaign views and faction identity */
body[data-faction="horde"] .battle-hud{background:linear-gradient(#49352b,#2d201c);border-color:#a1744b}
body[data-faction="horde"] .alliance-crest{background:#8b3329;color:#ebcc8e;border-color:#cc9a58}
body[data-faction="horde"] .command-dock{background:linear-gradient(#42382b,#2b281e);border-color:#b18c55}
body[data-faction="horde"] .portrait-frost,body[data-faction="horde"] .portrait-fire,body[data-faction="horde"] .portrait-arcane,body[data-faction="horde"] .portrait-hunter,body[data-faction="horde"] .portrait-warrior{background-image:url('assets/painted-local/horde-defenders.png');background-size:300% 200%}
body[data-faction="horde"] .portrait-frost{background-position:0 0}body[data-faction="horde"] .portrait-fire{background-position:50% 0}body[data-faction="horde"] .portrait-arcane{background-position:100% 0}body[data-faction="horde"] .portrait-hunter{background-position:0 100%}body[data-faction="horde"] .portrait-warrior{background-position:50% 100%}
.portrait-footman,.portrait-archer,.portrait-battlemage,.portrait-commander,.portrait-gryphon,.portrait-engineer{background-image:url('assets/painted-local/alliance-army.png');background-size:300% 200%}
.portrait-footman{background-position:0 0}.portrait-archer{background-position:50% 0}.portrait-battlemage{background-position:100% 0}.portrait-commander{background-position:0 100%}.portrait-gryphon{background-position:50% 100%}.portrait-engineer{background-position:100% 100%}
body[data-zone="ashenvale"] .portrait-hunter{background-image:url('assets/painted-local/alliance-army.png');background-size:300% 200%;background-position:50% 0}
#campaign-progress{font-size:12px;color:#d3be85;margin:0 0 9px}.mission-map-card{padding:12px;gap:12px;margin:8px 0}.mission-map-card.locked{opacity:.63}.mission-thumbnail{width:128px;height:77px;flex:none;border:1px solid #a49667;box-shadow:0 3px 12px #0006;object-fit:cover}.mission-map-card h2{font-size:21px}.mission-map-card p{margin:5px 0;font-size:11px}.mission-map-card .record{font-size:10px;color:#d6c88e}.mission-map-card button{font-size:11px;min-width:83px}.mission-brief{padding:12px 14px;background:#12271a99;border:1px solid #96946b}.mission-brief h2{font-size:25px}.mission-brief p{font-size:12px;margin:7px 0}.mission-brief .tactical-hint{color:#dbcfaa}.mission-brief small{font-size:10px}.wave-banner{width:calc(100% - 40px);max-width:740px;font-size:clamp(20px,2.8vw,31px);line-height:1.2}
@media(max-width:620px){.mission-map-card{gap:8px;padding:9px;flex-wrap:nowrap}.mission-thumbnail{width:75px;height:65px}.mission-map-card h2{font-size:16px}.mission-map-card small{font-size:8px;letter-spacing:.3px}.mission-map-card p{font-size:9px;line-height:1.25}.mission-map-card .record{font-size:9px}.mission-map-card button{margin:0;padding:4px 6px;min-width:49px;min-height:40px;font-size:9px}.mission-brief{padding:10px}.mission-brief h2{font-size:22px}.battle-resources{gap:9px}.battle-resources>span{min-width:35px}.battle-resources strong{font-size:17px}.battle-resources>span:last-child small{grid-column:1}}

@media(max-width:620px){.battle-hud{height:101px}.battle-controls button{min-height:44px}.status-line>button{min-height:40px}.command-dock{padding-bottom:max(8px,env(safe-area-inset-bottom))}}

.result-map{display:block;width:150px;height:90px;object-fit:cover;margin:0 auto 12px;border:1px solid #a99764;box-shadow:0 5px 18px #0008}
/* Wave and objective values both use a compact two-line resource slot. */
.battle-resources>span:nth-child(3){grid-template-columns:auto}
.battle-resources>span:nth-child(3) small{grid-column:1}
@media(max-width:620px){.zone-button small{max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.battle-resources{gap:7px}}

.portrait-gryphon{background-image:url('assets/painted-local/gryphon-rider.png');background-size:contain;background-position:center;background-repeat:no-repeat}

#placement-confirm{position:absolute;z-index:8;display:flex;gap:4px;background:#17271ff5;border:1px solid #d4b36b;padding:4px;border-radius:5px;box-shadow:0 4px 12px #0008;white-space:nowrap}#placement-confirm[hidden]{display:none}#placement-confirm button{min-height:44px;padding:7px 10px;font-size:12px}#placement-confirm [data-near-cancel]{min-width:44px}.battle-resources>span:first-child strong{color:#ffe0a0}.battle-resources>span:first-child img{filter:drop-shadow(0 0 3px #b9974c)}.tower-card strong{white-space:normal;line-height:1.1}.pick-tower small{line-height:1.35}.pick-tower .painted-portrait{flex:none}.selection-copy strong{font-size:16px}
.cash-resource{position:relative}.cash-resource::before,.cash-resource::after{content:'';position:absolute;width:11px;height:11px;border-radius:50%;border:1px solid #687879;left:-3px;top:13px;background:linear-gradient(135deg,#edf3ed,#7f979e);box-shadow:inset 0 0 0 2px #bdc9c4}.cash-resource::after{left:4px;top:19px;border-color:#825331;background:linear-gradient(135deg,#dfb17b,#a4673d);box-shadow:inset 0 0 0 2px #c78e58}.cash-resource img{position:relative;z-index:1}.cash-resource strong,.cash-resource small{position:relative;z-index:1}

/* Tactical controls share the existing dock; detailed stats expand on demand. */
.selection{gap:10px;align-items:center}
.selection-copy{min-width:175px}
.selection-copy>span{line-height:1.45}
.defender-details{margin-top:3px;font-size:11px;color:#d4cfaf}
.defender-details summary{cursor:pointer;color:#e7d9ac;min-height:24px;display:flex;align-items:center}
.defender-details summary:focus-visible{outline:2px solid #c8e59d;outline-offset:2px}
.defender-details p{margin:6px 0;max-width:530px;line-height:1.4}
.stat-comparison{display:grid;grid-template-columns:repeat(3,minmax(70px,1fr));gap:5px 12px;margin:5px 0}
.stat-comparison span{display:flex;flex-direction:column}.stat-comparison b{font-variant-numeric:tabular-nums;color:#f4dfab;font-size:12px}.stat-comparison small{font-size:10px}
.priority-picker{font-size:10px;color:#e6d3a4;display:flex;flex-direction:column;gap:3px;width:162px;flex:none}
.priority-picker select{min-height:44px;padding:6px 9px;background:#172d22;color:#f4e6c0;border:1px solid #968861;border-radius:4px;font:13px Georgia}
.priority-picker small{max-width:162px;line-height:1.25;color:#bfc8ae;font-size:10px}
.priority-picker select:focus-visible{outline:2px solid #c8e59d;outline-offset:2px}
.incoming-panel{width:340px;max-width:calc(100vw - 26px);max-height:min(490px,70vh);overflow-y:auto}
.incoming-row{align-items:flex-start}.incoming-row>div{min-width:0}.incoming-row b{font-size:12px;display:block;line-height:1.35}.incoming-row small{display:block;font-size:10px;line-height:1.5;color:#c2c8ad}
.wave-note{font-size:11px;line-height:1.4;color:#d4c89e;margin:9px 0}
#send-wave{min-height:44px;width:100%;margin-top:8px}#send-wave-note{display:block;font-size:10px;color:#c2c8ad;text-align:center;margin-top:4px}
@media(max-width:750px){.selection{flex-wrap:wrap;gap:6px}.selection-copy{flex:1 1 calc(100% - 165px);min-width:140px}.priority-picker{width:146px}.selection button{min-height:44px}.defender-details summary{min-height:28px}.defender-details[open]{max-height:180px;overflow-y:auto}.stat-comparison{grid-template-columns:repeat(2,minmax(70px,1fr))}}
@media(max-height:500px) and (orientation:landscape){.selection-copy strong{font-size:12px}.selection-copy>span,.priority-picker small{font-size:9px}.priority-picker{width:137px}.priority-picker select{min-height:44px}.defender-details{max-width:360px}.defender-details[open]{position:absolute;bottom:100%;left:8px;background:#172d22f5;padding:10px;border:1px solid #a39468;max-height:180px;overflow-y:auto;z-index:11}.selection{flex-wrap:nowrap}}

@media(max-height:500px) and (orientation:landscape){.selection button{min-height:44px}.incoming-panel{max-height:calc(100vh - 80px);bottom:100%}}
