/* === METRAVIA · HUD/Cyberdeck Theme === */

:root {
  color-scheme: dark;
  --control-height: 38px;
  --control-radius: 4px;
  --control-pad-x: 14px;
  --panel-pad: 20px;

  --bg: #07090f;
  --bg-soft: #0d1119;
  --bg-card: #11161f;
  --bg-elev: #161d29;
  --border: #1f2a3d;
  --border-strong: #2c3a55;
  --text: #e4eaf5;
  --text-muted: #7a8aa8;
  --text-dim: #4a5872;

  --cyan: #00f0d0;
  --cyan-dim: #00b8a0;
  --purple: #9d6bff;
  --pink: #ff5cb4;
  --gold: #ffcc66;
  --green: #6ed29a;
  --red: #ff5577;
  --warn: #ffb84d;
  --share-target: #ffd45a;
  --share-target-separator: #070b0f;
  --share-text: #ffe09a;
  --duel-accent: #ff78bd;

  --accent: var(--cyan);
  --accent2: var(--purple);
  --danger: var(--red);
  --warn: var(--gold);
  --success: var(--green);

  --shadow-neon: 0 0 0 1px rgba(0,240,208,.25), 0 8px 32px rgba(0,240,208,.18);
  --shadow-soft: 0 12px 40px rgba(0,0,0,.45);
  --cell: 32px;

  --font-display: 'Segoe UI Semibold', 'Microsoft YaHei UI', system-ui, sans-serif;
  --font-body: 'Segoe UI', 'Microsoft YaHei UI', system-ui, sans-serif;

  --clip-card: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
  --clip-btn: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);

  --asset-login-bg: url('/assets/themes/dark/login-bg.png');
  --asset-avatar-placeholder: url('/assets/themes/dark/avatar-placeholder.png');
  --asset-ground: url('/assets/themes/dark/tiles/ground.png');
  --asset-fog: url('/assets/themes/dark/tiles/fog.png');
  --asset-poison: url('/assets/themes/dark/tiles/poison.png');
  --asset-path: url('/assets/themes/dark/tiles/path.png');
  --asset-warning: url('/assets/themes/dark/tiles/warning.png');
  --asset-flag: url('/assets/themes/dark/flag.png');
  --asset-chest-normal: url('/assets/themes/dark/chest-normal.png');
  --asset-chest-rare: url('/assets/themes/dark/chest-rare.png');
  --asset-chest-boss: url('/assets/themes/dark/chest-boss.png');
  --asset-boss-1: url('/assets/themes/dark/boss-1.png');
  --asset-boss-2: url('/assets/themes/dark/boss-2.png');
}

:root[data-theme="light"] {
  color-scheme: light;
  --bg: #ecf0f7;
  --bg-soft: #f7f9fd;
  --bg-card: #ffffff;
  --bg-elev: #ffffff;
  --border: #cfd6e4;
  --border-strong: #aab4c8;
  --text: #0e1626;
  --text-muted: #4e5970;
  --text-dim: #5f6b7f;
  --cyan: #006f62;
  --cyan-dim: #00594f;
  --purple: #6438c8;
  --gold: #8a5a00;
  --green: #207044;
  --red: #b42348;
  --share-target: #ffc43d;
  --share-target-separator: #172028;
  --share-text: #6f4900;
  --duel-accent: #9b2668;
  --shadow-neon: 0 0 0 1px rgba(0,140,122,.18), 0 12px 30px rgba(100,56,200,.15);
  --shadow-soft: 0 8px 24px rgba(0,0,0,.08);
  --asset-login-bg: url('/assets/themes/light/login-bg.png');
  --asset-avatar-placeholder: url('/assets/themes/light/avatar-placeholder.png');
  --asset-ground: url('/assets/themes/light/tiles/ground.png');
  --asset-fog: url('/assets/themes/light/tiles/fog.png');
  --asset-poison: url('/assets/themes/light/tiles/poison.png');
  --asset-path: url('/assets/themes/light/tiles/path.png');
  --asset-warning: url('/assets/themes/light/tiles/warning.png');
  --asset-flag: url('/assets/themes/light/flag.png');
  --asset-chest-normal: url('/assets/themes/light/chest-normal.png');
  --asset-chest-rare: url('/assets/themes/light/chest-rare.png');
  --asset-chest-boss: url('/assets/themes/light/chest-boss.png');
  --asset-boss-1: url('/assets/themes/light/boss-1.png');
  --asset-boss-2: url('/assets/themes/light/boss-2.png');
}

* { box-sizing: border-box; }
html, body {
  margin: 0; padding: 0;
  color: var(--text);
  font-family: var(--font-body);
  font-size: 14.5px;
  line-height: 1.6;
  letter-spacing: .015em;
  min-height: 100vh;
}
/* 内页：实色底 + 极轻渐变光斑 */
body {
  background: var(--bg);
  background-image:
    radial-gradient(80% 60% at 20% 0%, rgba(0,240,208,.06), transparent 60%),
    radial-gradient(60% 50% at 100% 100%, rgba(157,107,255,.07), transparent 60%);
  background-attachment: fixed;
}
/* 登录页等需要展示动态壁纸的页面 → body 自身保持透明，让 .login-bg 等图层穿透 */
body.with-wallpaper {
  background: transparent;
  background-image: none;
}

/* 全局微噪点 + 扫描线：放在卡片之下（z=0），不再使用 mix-blend-mode 避免浅底变灰白 */
body::after {
  content: '';
  position: fixed; inset: 0;
  pointer-events: none;
  background-image:
    repeating-linear-gradient(0deg, rgba(255,255,255,.025) 0 1px, transparent 1px 3px),
    radial-gradient(rgba(255,255,255,.05) 1px, transparent 1.4px);
  background-size: auto, 3px 3px;
  z-index: 0;
  opacity: .18;
}
:root[data-theme="light"] body::after {
  background-image:
    repeating-linear-gradient(0deg, rgba(20,30,50,.03) 0 1px, transparent 1px 3px),
    radial-gradient(rgba(20,30,50,.05) 1px, transparent 1.4px);
  opacity: .25;
}
/* 登录页屏蔽噪点层，避免与 .login-scanline 叠加 */
body.with-wallpaper::after { display: none; }

/* 确保所有内容层级在 noise 之上 */
.app-shell, .topbar, .layout, .game-layout, .login-wrap, #toast-wrap { position: relative; z-index: 1; }

a { color: var(--cyan); text-decoration: none; transition: color .15s, text-shadow .15s; }
a:hover { color: var(--purple); text-shadow: 0 0 12px rgba(157,107,255,.45); }

h1, h2, h3, h4 { font-family: var(--font-display); letter-spacing: .04em; margin: 0 0 .5em 0; font-weight: 700; }
h1 { font-size: 24px; } h2 { font-size: 20px; } h3 { font-size: 16px; }

::selection { background: rgba(0,240,208,.35); color: #fff; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--cyan-dim); }

/* === Controls === */
input[type=text], input[type=password], input[type=number], input[type=email], select, textarea {
  height: var(--control-height);
  border-radius: var(--control-radius);
  padding: 0 var(--control-pad-x);
  background: var(--bg-soft);
  border: 1px solid var(--border-strong);
  color: var(--text);
  font: inherit;
  font-family: var(--font-body);
  outline: none;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
textarea { height: auto; min-height: 90px; padding: 10px var(--control-pad-x); line-height: 1.5; }
input:focus, select:focus, textarea:focus {
  border-color: var(--cyan);
  box-shadow: 0 0 0 3px rgba(0,240,208,.15), inset 0 0 12px rgba(0,240,208,.06);
  background: var(--bg-card);
}
input[type=checkbox], input[type=radio] {
  width: 16px; height: 16px; padding: 0; margin: 0; vertical-align: middle;
  accent-color: var(--cyan);
}
input::placeholder, textarea::placeholder { color: var(--text-muted); font-style: italic; }

button, .btn {
  position: relative;
  height: var(--control-height);
  padding: 0 18px;
  background: var(--bg-soft);
  border: 1px solid var(--border-strong);
  color: var(--text);
  cursor: pointer;
  font: inherit;
  font-family: var(--font-body);
  font-weight: 500;
  letter-spacing: .05em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  clip-path: var(--clip-btn);
  transition: background .15s, color .15s, transform .05s, box-shadow .15s;
  overflow: hidden;
}
button::after, .btn::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(120deg, transparent 30%, rgba(0,240,208,.18) 50%, transparent 70%);
  transform: translateX(-120%);
  transition: transform .55s ease;
  pointer-events: none;
}
button:hover::after, .btn:hover::after { transform: translateX(120%); }
button:hover, .btn:hover { background: var(--bg-elev); color: var(--cyan); border-color: var(--cyan); box-shadow: 0 0 14px rgba(0,240,208,.22); }
button:active, .btn:active { transform: translateY(1px); }

button.primary, .btn.primary {
  background: linear-gradient(135deg, var(--cyan) 0%, var(--purple) 100%);
  border: none;
  color: #050810;
  font-weight: 700;
  box-shadow: 0 0 0 1px rgba(0,240,208,.4), 0 4px 18px rgba(0,240,208,.35);
}
button.primary:hover, .btn.primary:hover { color: #050810; filter: brightness(1.1) saturate(1.1); box-shadow: 0 0 0 1px rgba(0,240,208,.6), 0 6px 26px rgba(157,107,255,.45); }
button.danger { background: var(--red); color: #fff; border: none; }
button.warn { background: var(--gold); color: #050810; border: none; }
:root[data-theme="light"] button.primary,
:root[data-theme="light"] .btn.primary,
:root[data-theme="light"] button.primary:hover,
:root[data-theme="light"] .btn.primary:hover,
:root[data-theme="light"] button.warn { color: #fff; }
button[disabled] { opacity: .35; cursor: not-allowed; filter: grayscale(.4); }
button[disabled]::after { display: none; }

label { display: inline-flex; align-items: center; gap: 6px; color: var(--text-muted); margin-right: 12px; font-size: 12.5px; text-transform: uppercase; letter-spacing: .08em; }
label input, label select { color: var(--text); text-transform: none; letter-spacing: 0; }

/* === Tables === */
table { width: 100%; border-collapse: separate; border-spacing: 0; }
th, td { padding: 13px 16px; border-bottom: 1px solid var(--border); text-align: left; font-size: 14px; }
th { color: var(--cyan); font-family: var(--font-display); font-weight: 500; font-size: 12px; text-transform: uppercase; letter-spacing: .12em; background: rgba(0,240,208,.03); border-bottom-color: var(--border-strong); }
tr:hover td { background: rgba(0,240,208,.04); }

/* === Cards === */
.card {
  background: var(--bg-card);
  border: 1px solid var(--border);
  padding: var(--panel-pad);
  position: relative;
  clip-path: var(--clip-card);
  box-shadow: var(--shadow-soft);
}
.card::before {
  content: '';
  position: absolute;
  top: 0; right: 14px;
  width: 28px; height: 1px;
  background: var(--cyan);
  box-shadow: 0 0 8px var(--cyan);
}
.card + .card { margin-top: 14px; }
.card-title {
  font-family: var(--font-display);
  font-size: 13px;
  letter-spacing: .15em;
  text-transform: uppercase;
  color: var(--cyan);
  margin-bottom: 14px;
  display: flex;
  align-items: center;
  gap: 10px;
}
.card-title::before { content: '◢'; color: var(--purple); font-size: 11px; }

.row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.col { display: flex; flex-direction: column; gap: 8px; }
.grow { flex: 1; }
.muted { color: var(--text-muted); font-size: 12.5px; letter-spacing: .04em; line-height: 1.55; }
.dim { color: var(--text-dim); }

.tag {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px;
  background: var(--bg-soft);
  border: 1px solid var(--border-strong);
  font-size: 11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--text-muted);
  font-family: var(--font-display);
  clip-path: polygon(4px 0, 100% 0, calc(100% - 4px) 100%, 0 100%);
}
.tag.ok { color: var(--green); border-color: rgba(110,210,154,.5); box-shadow: none; }
.tag.warn { color: var(--gold); border-color: rgba(255,184,77,.45); box-shadow: none; }
.tag.danger { color: var(--red); border-color: rgba(255,85,119,.55); box-shadow: none; }
.tag.info { color: var(--cyan); border-color: rgba(0,240,208,.5); box-shadow: none; }

/* === Sidebar Layout (admin pages) === */
.app-shell {
  display: grid;
  grid-template-columns: 220px 1fr;
  min-height: 100vh;
}
.sidebar {
  background: var(--bg-soft);
  border-right: 1px solid var(--border);
  padding: 20px 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
  position: sticky; top: 0; height: 100vh;
}
.sidebar .brand {
  padding: 0 20px 18px;
  margin-bottom: 12px;
  border-bottom: 1px solid var(--border);
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 20px;
  letter-spacing: .12em;
  background: linear-gradient(120deg, var(--cyan), var(--purple));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.sidebar .brand small { display: block; font-size: 10px; letter-spacing: .25em; color: var(--text-dim); margin-top: 4px; -webkit-text-fill-color: var(--text-dim); }
.sidebar .nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 22px;
  color: var(--text-muted);
  font-family: var(--font-display);
  font-size: 12.5px;
  text-transform: uppercase;
  letter-spacing: .12em;
  position: relative;
  transition: color .15s, background .15s;
}
.sidebar .nav-item::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0;
  width: 3px; background: var(--cyan);
  transform: scaleY(0); transition: transform .15s;
}
.sidebar .nav-item:hover { color: var(--cyan); background: rgba(0,240,208,.04); text-decoration: none; }
.sidebar .nav-item.active { color: var(--cyan); background: rgba(0,240,208,.07); }
.sidebar .nav-item.active::before { transform: scaleY(1); box-shadow: 0 0 12px var(--cyan); }
.sidebar .nav-item .icon { width: 12px; text-align: center; opacity: .7; }
.sidebar .sidebar-bottom { margin-top: auto; padding: 16px 20px; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 8px; }
.sidebar .me {
  display: block;
  font-size: 12px;
  color: var(--text-muted);
  text-decoration: none;
  padding: 8px 10px;
  border: 1px solid transparent;
  transition: border-color .15s, background .15s, color .15s;
  position: relative;
}
.sidebar .me b { color: var(--text); font-family: var(--font-display); letter-spacing: .08em; display: block; font-size: 13px; margin-bottom: 2px; }
.sidebar .me:hover {
  text-decoration: none;
  background: rgba(0,240,208,.05);
  border-color: rgba(0,240,208,.4);
  color: var(--text);
}
.sidebar .me:hover::after {
  content: '›';
  position: absolute; right: 10px; top: 50%;
  transform: translateY(-50%);
  color: var(--cyan);
  font-size: 18px;
}

.main { padding: 24px 32px; min-width: 0; }
.page-head {
  display: flex; align-items: center; gap: 14px;
  padding-bottom: 16px;
  margin-bottom: 20px;
  border-bottom: 1px dashed var(--border);
}
.page-head h1 {
  margin: 0;
  font-size: 20px;
  letter-spacing: .1em;
  position: relative;
}
.page-head h1::before {
  content: '//'; color: var(--cyan); margin-right: 8px;
}
.page-head .status-pill {
  margin-left: auto;
  display: flex; align-items: center; gap: 8px;
  font-size: 11px; text-transform: uppercase; letter-spacing: .18em;
  color: var(--text-muted);
  font-family: var(--font-display);
}
.page-head .status-pill::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: var(--green); box-shadow: 0 0 6px rgba(110,210,154,.55);
  animation: pulse 2.4s infinite;
}
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

/* Legacy topbar fallback (player pages still use it) */
.topbar { display: flex; align-items: center; gap: 16px; padding: 14px 24px; background: var(--bg-soft); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 50; }
.topbar .brand { font-family: var(--font-display); font-weight: 900; font-size: 16px; letter-spacing: .12em; background: linear-gradient(120deg, var(--cyan), var(--purple)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.topbar .nav { display: flex; gap: 6px; flex-wrap: wrap; }
.topbar .nav a { color: var(--text-muted); padding: 6px 12px; font-size: 11px; text-transform: uppercase; letter-spacing: .1em; font-family: var(--font-display); }
.topbar .nav a:hover, .topbar .nav a.active { background: rgba(0,240,208,.08); color: var(--cyan); text-decoration: none; }
.topbar .right { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.topbar .right .muted { font-size: 11px; }

.layout { max-width: 1280px; margin: 24px auto; padding: 0 24px; }

/* === Toast === */
#toast-wrap { position: fixed; top: 20px; right: 20px; display: flex; flex-direction: column; gap: 8px; z-index: 10000; }
.toast { background: var(--bg-card); border: 1px solid var(--border-strong); padding: 12px 18px; box-shadow: var(--shadow-soft); animation: toast-in .3s; max-width: 320px; font-size: 12px; clip-path: var(--clip-btn); }
.toast.success { border-color: var(--green); box-shadow: 0 0 0 1px var(--green), 0 8px 24px rgba(92,255,156,.2); }
.toast.error { border-color: var(--red); box-shadow: 0 0 0 1px var(--red), 0 8px 24px rgba(255,85,119,.2); }
@keyframes toast-in { from { transform: translateX(120%); opacity: 0; } to { transform: none; opacity: 1; } }

/* === Asset expedition === */
html.asset-expedition-open,
html.asset-expedition-open body { overflow: hidden; }
.asset-expedition [hidden] { display: none !important; }
.asset-expedition {
  --asset-flag-left: 3%;
  position: fixed;
  inset: 0;
  z-index: 30000;
  display: grid;
  place-items: center;
  width: 100%;
  min-height: 100vh;
  min-height: 100dvh;
  padding: max(18px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
  overflow: auto;
  font-family: var(--font-body);
  letter-spacing: 0;
  isolation: isolate;
}
.asset-expedition__backdrop {
  position: absolute;
  inset: 0;
  z-index: -1;
  background-color: #07090f;
  background-image:
    linear-gradient(rgba(7,9,15,.78), rgba(7,9,15,.92)),
    var(--asset-login-bg);
  background-position: center;
  background-size: cover;
  filter: saturate(.85);
  animation: expedition-backdrop 18s ease-in-out infinite alternate;
}
:root[data-theme="light"] .asset-expedition__backdrop {
  background-color: #edf2f8;
  background-image:
    linear-gradient(rgba(246,249,253,.78), rgba(232,238,247,.94)),
    var(--asset-login-bg);
  filter: saturate(.72);
}
.asset-expedition__panel {
  position: relative;
  width: min(590px, 100%);
  max-height: calc(100dvh - 36px);
  overflow: auto;
  padding: 30px;
  border: 0;
  background: var(--bg-card);
  background: color-mix(in srgb, var(--bg-card) 92%, transparent);
  box-shadow: 0 0 0 1px var(--border-strong), 0 8px 8px rgba(0,0,0,.32);
  clip-path: polygon(0 0, calc(100% - 18px) 0, 100% 18px, 100% 100%, 18px 100%, 0 calc(100% - 18px));
}
.asset-expedition__eyebrow {
  margin-bottom: 6px;
  color: var(--cyan);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0;
}
.asset-expedition h2 {
  margin: 0;
  color: var(--text);
  font-size: 27px;
  letter-spacing: 0;
}
.asset-expedition__lead {
  margin: 2px 0 22px;
  color: var(--text-muted);
  font-size: 13px;
}
.asset-expedition__route {
  position: relative;
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 7px;
  align-items: center;
  height: 92px;
  margin: 0 8px 18px;
  padding-right: 58px;
}
.asset-expedition__route::before {
  content: '';
  position: absolute;
  left: 3%;
  right: 8%;
  top: 50%;
  height: 2px;
  background: linear-gradient(to right, var(--cyan), var(--purple), var(--gold));
  opacity: .5;
}
.asset-expedition__route > span {
  position: relative;
  aspect-ratio: 1;
  border: 1px solid color-mix(in srgb, var(--cyan) 45%, var(--border));
  background-color: var(--bg-soft);
  background-image: var(--asset-ground);
  background-position: center;
  background-size: cover;
  box-shadow: inset 0 0 0 999px color-mix(in srgb, var(--bg) 50%, transparent);
  opacity: .78;
}
.asset-expedition__flag,
.asset-expedition__chest {
  position: absolute;
  display: block;
  background-position: center;
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
}
.asset-expedition__flag {
  left: var(--asset-flag-left);
  top: 7px;
  z-index: 2;
  width: 38px;
  height: 38px;
  background-image: var(--asset-flag);
  filter: drop-shadow(0 4px 8px rgba(0,0,0,.55));
  transform: translateX(-18%);
  transition: left .18s linear;
  animation: expedition-flag 1.2s ease-in-out infinite alternate;
}
.asset-expedition__chest {
  right: 0;
  bottom: 13px;
  width: 58px;
  height: 58px;
  background-image: var(--asset-chest-normal);
  filter: drop-shadow(0 5px 10px rgba(0,0,0,.5));
}
.asset-expedition.is-complete .asset-expedition__chest { animation: expedition-chest .34s ease-out 2 alternate; }
.asset-expedition__stage {
  display: grid;
  gap: 2px;
  min-height: 45px;
  margin-bottom: 14px;
}
.asset-expedition__stage strong { color: var(--text); font-size: 15px; }
.asset-expedition__stage span { color: var(--text-muted); font-size: 12px; }
.asset-expedition__progress-row,
.asset-expedition__stats {
  display: flex;
  justify-content: space-between;
  gap: 14px;
  min-width: 0;
  font-size: 11px;
}
.asset-expedition__progress-row { margin-bottom: 7px; color: var(--text-muted); }
.asset-expedition__progress-row span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asset-expedition__progress-row b { color: var(--cyan); font-size: 13px; }
.asset-expedition__progress {
  position: relative;
  height: 10px;
  overflow: hidden;
  border: 1px solid var(--border-strong);
  background: var(--bg-soft);
}
.asset-expedition__progress span {
  display: block;
  width: 0;
  height: 100%;
  background: linear-gradient(to right, var(--cyan), var(--purple), var(--gold));
  transition: width .15s linear;
}
.asset-expedition__stats { margin-top: 8px; color: var(--text-dim); }
.asset-expedition__error {
  margin-top: 16px;
  padding: 10px 12px;
  border: 1px solid color-mix(in srgb, var(--danger) 55%, var(--border));
  background: var(--bg-soft);
  background: color-mix(in srgb, var(--danger) 10%, var(--bg-soft));
  color: var(--text);
  font-size: 12px;
  line-height: 1.55;
}
.asset-expedition__actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; }
.asset-expedition__actions button { min-width: 116px; }
@keyframes expedition-backdrop { from { transform: scale(1.01); } to { transform: scale(1.05); } }
@keyframes expedition-flag { from { transform: translate(-18%, 0); } to { transform: translate(-18%, -5px); } }
@keyframes expedition-chest { from { transform: scale(1); } to { transform: scale(1.08); } }

@media (max-width: 520px) {
  .asset-expedition { place-items: stretch center; padding-top: max(12px, env(safe-area-inset-top)); }
  .asset-expedition__panel { align-self: center; padding: 24px 18px; }
  .asset-expedition h2 { font-size: 23px; }
  .asset-expedition__route { grid-template-columns: repeat(3, minmax(0, 1fr)); height: 84px; padding-right: 48px; }
  .asset-expedition__route > span:nth-of-type(n+4) { display: none; }
  .asset-expedition__flag { width: 32px; height: 32px; }
  .asset-expedition__chest { width: 48px; height: 48px; }
  .asset-expedition__stats { flex-direction: column; gap: 2px; }
  .asset-expedition__actions { flex-direction: column-reverse; }
  .asset-expedition__actions button { width: 100%; }
}
@media (max-height: 560px) and (orientation: landscape) {
  .asset-expedition { place-items: start center; }
  .asset-expedition__panel { padding: 18px 22px; }
  .asset-expedition__lead { margin-bottom: 8px; }
  .asset-expedition__route { height: 54px; margin-bottom: 8px; }
  .asset-expedition__flag { top: 0; width: 28px; height: 28px; }
  .asset-expedition__chest { bottom: 2px; width: 40px; height: 40px; }
}
@media (prefers-reduced-motion: reduce) {
  .asset-expedition__backdrop,
  .asset-expedition__flag,
  .asset-expedition__chest,
  .asset-expedition__progress span { animation: none !important; transition: none !important; }
}

/* Player profile: persistent pre-match preferences and B50 review */
.profile-shortcuts {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}
.profile-shortcuts .btn { min-height: 44px; }
.profile-management { scroll-margin-top: 84px; }
.profile-section-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}
.profile-section-head .card-title,
.profile-management > .card-title { margin-bottom: 4px; font-size: 15px; letter-spacing: 0; text-transform: none; }
.profile-section-head p,
.rating-review-guidance { max-width: 72ch; margin: 0; line-height: 1.6; }
.match-preference-layout {
  display: grid;
  grid-template-columns: minmax(260px, .75fr) minmax(0, 1.25fr);
  gap: 24px;
  min-width: 0;
}
.match-preference-form {
  display: grid;
  align-content: start;
  gap: 14px;
  min-width: 0;
  padding-right: 24px;
  border-right: 1px solid var(--border);
}
.match-preference-field { display: grid; gap: 6px; min-width: 0; }
.match-preference-field label { margin: 0; color: var(--text); font-size: 12px; letter-spacing: 0; text-transform: none; }
.match-preference-field input,
.match-preference-field select,
.match-preference-field textarea { width: 100%; min-width: 0; }
.match-preference-field textarea { min-height: 96px; resize: vertical; }
.match-preference-form > button { min-height: 44px; }
.match-preference-preview {
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr);
  align-items: center;
  gap: 9px;
  min-width: 0;
  padding: 8px;
  background: var(--bg-soft);
  border: 1px solid var(--border);
}
.match-preference-preview[hidden] { display: none; }
.match-preference-preview img { width: 40px; height: 40px; object-fit: cover; background: var(--asset-avatar-placeholder) center / cover; }
.match-preference-preview span { display: grid; min-width: 0; gap: 2px; }
.match-preference-preview b { overflow-wrap: anywhere; font-size: 12px; }
.match-preference-preview small { color: var(--text-muted); font-size: 10px; }
.match-preference-activity { min-width: 0; }
.match-preference-quota {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  margin-bottom: 18px;
  overflow: hidden;
  background: var(--border);
  border: 1px solid var(--border);
}
.match-preference-quota > div {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 3px 10px;
  padding: 12px;
  background: var(--bg-soft);
}
.match-preference-quota span { color: var(--text-muted); font-size: 11px; }
.match-preference-quota strong { color: var(--cyan); font-size: 15px; font-variant-numeric: tabular-nums; }
.match-preference-quota small { grid-column: 1 / -1; color: var(--text-muted); font-size: 10px; }
.match-preference-list-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.match-preference-list-head h3,
.rating-review-history h3 { margin: 0; color: var(--text); font-size: 13px; letter-spacing: 0; }
.match-preference-list { min-width: 0; }
.match-preference-row {
  display: grid;
  grid-template-columns: minmax(150px, .7fr) minmax(220px, 1.3fr) auto;
  align-items: center;
  gap: 14px;
  min-width: 0;
  padding: 12px 0;
  border-top: 1px solid var(--border);
}
.match-preference-target { display: grid; grid-template-columns: 44px minmax(0, 1fr); align-items: center; gap: 9px; min-width: 0; }
.match-preference-target img { width: 44px; height: 44px; object-fit: cover; background: var(--asset-avatar-placeholder) center / cover; }
.match-preference-target div,
.match-preference-copy { display: grid; min-width: 0; gap: 3px; }
.match-preference-target strong,
.match-preference-target span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.match-preference-target strong { color: var(--text); font-size: 12px; }
.match-preference-target span { color: var(--text-muted); font-size: 10px; }
.match-preference-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; }
.match-preference-meta time { margin-left: auto; font-size: 10px; }
.match-preference-copy p { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 8px; margin: 0; font-size: 11px; line-height: 1.45; }
.match-preference-copy p b { color: var(--text-muted); font-weight: 500; }
.match-preference-copy p span { overflow-wrap: anywhere; color: var(--text); }
.match-preference-actions { display: grid; justify-items: end; gap: 7px; }
.match-preference-actions > button { min-width: 72px; min-height: 40px; }
.match-preference-confirm { display: grid; grid-template-columns: repeat(2, auto); justify-content: end; gap: 6px; max-width: 260px; }
.match-preference-confirm[hidden] { display: none; }
.match-preference-confirm > span,
.match-preference-confirm > small { grid-column: 1 / -1; color: var(--text-muted); font-size: 10px; line-height: 1.4; text-align: right; }
.match-preference-confirm button { min-height: 40px; }
.profile-section-status { padding: 10px; color: var(--text-muted); background: var(--bg-soft); font-size: 11px; line-height: 1.5; }
.profile-section-status[data-state="error"] { color: var(--red); }
.profile-section-status[data-state="success"] { color: var(--green); }
.profile-section-status button { min-height: 36px; margin-left: 8px; }
.rating-current-b50 {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin: 12px 0 4px;
  padding: 9px 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  font-size: 11px;
}
.rating-current-b50 > span { color: var(--text-muted); }
.rating-review-pending { display: flex; align-items: center; gap: 10px; margin: 12px 0; padding: 10px; background: color-mix(in srgb, var(--warn) 8%, var(--bg-soft)); border: 1px solid color-mix(in srgb, var(--warn) 40%, var(--border)); }
.rating-review-pending[hidden] { display: none; }
.rating-review-actions { display: flex; justify-content: flex-end; margin-top: 12px; }
.rating-review-actions button { min-height: 44px; }
.rating-review-history { margin-top: 20px; }
.rating-review-table-wrap { max-width: 100%; overflow-x: auto; margin-top: 8px; }
.rating-review-table { min-width: 720px; }
.rating-review-empty td { padding: 20px; color: var(--text-muted); text-align: center; }

@media (max-width: 820px) {
  .match-preference-layout { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .match-preference-form { padding-right: 0; padding-bottom: 20px; border-right: 0; border-bottom: 1px solid var(--border); }
  .match-preference-row { grid-template-columns: minmax(0, 1fr) auto; }
  .match-preference-copy { grid-column: 1 / -1; grid-row: 2; }
  .match-preference-actions { grid-column: 2; grid-row: 1; }
}

@media (max-width: 720px) {
  #match-preferences .match-preference-field input,
  #match-preferences .match-preference-field select,
  #rating .cfg-row input[type=number],
  #rating .file-input-btn,
  #rating .file-input-clear { min-height: 44px; height: 44px; }
  #rating .file-input-clear { width: 44px; min-width: 44px; flex: 0 0 44px; }
}

@media (max-width: 560px) {
  .profile-shortcuts { display: grid; grid-template-columns: minmax(0, 1fr); }
  .profile-shortcuts .btn { width: 100%; justify-content: center; white-space: normal; text-align: center; }
  .profile-section-head { display: block; }
  .match-preference-quota { grid-template-columns: minmax(0, 1fr); }
  .match-preference-row { grid-template-columns: minmax(0, 1fr); align-items: stretch; }
  .match-preference-copy,
  .match-preference-actions { grid-column: 1; grid-row: auto; }
  .match-preference-actions { justify-items: stretch; }
  .match-preference-actions > button { width: 100%; min-height: 44px; }
  .match-preference-confirm { grid-template-columns: minmax(0, 1fr); max-width: none; }
  .match-preference-confirm > span,
  .match-preference-confirm > small { grid-column: 1; text-align: left; }
  .match-preference-confirm button { width: 100%; min-height: 44px; }
  .rating-review-pending { align-items: flex-start; }
  .rating-review-actions button { width: 100%; }
  .rating-review-table-wrap { overflow: visible; }
  .rating-review-table,
  .rating-review-table tbody,
  .rating-review-table tr,
  .rating-review-table td { display: block; width: 100%; min-width: 0; }
  .rating-review-table thead { display: none; }
  .rating-review-table tr { padding: 10px 0; border-top: 1px solid var(--border); }
  .rating-review-table td { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 8px; padding: 5px 0; border: 0; overflow-wrap: anywhere; }
  .rating-review-table td::before { content: attr(data-label); color: var(--text-muted); font-size: 10px; }
  .rating-review-empty td { display: block; text-align: center; }
  .rating-review-empty td::before { content: none; }
}

/* === Login page · 动态壁纸图层栈 ===
 * 关键：所有壁纸层显式锁定负 z-index，确保始终在 body::after / 卡片之下。
 * with-wallpaper 类已让 body 自身透明，这里只管壁纸本身。
 */
.login-bg {
  position: fixed; inset: -4%;
  background-image: var(--asset-login-bg);
  background-size: cover; background-position: center;
  filter: brightness(0.55) saturate(1.15) contrast(1.1);
  z-index: -5;
  animation: bg-kenburns 36s ease-in-out infinite alternate;
}
:root[data-theme="light"] .login-bg { filter: brightness(.9) saturate(.92) contrast(1.03); }
:root[data-theme="light"] .login-aurora { opacity: .42; mix-blend-mode: multiply; }
@keyframes bg-kenburns {
  0%   { transform: scale(1.05) translate(0, 0); }
  50%  { transform: scale(1.12) translate(-1.5%, -1%); }
  100% { transform: scale(1.18) translate(-3%, -2.2%); }
}
.login-aurora {
  position: fixed; inset: 0; z-index: -4;
  pointer-events: none;
  background:
    radial-gradient(50% 50% at 25% 35%, rgba(0,240,208,.32), transparent 60%),
    radial-gradient(45% 55% at 75% 60%, rgba(157,107,255,.32), transparent 60%),
    radial-gradient(30% 40% at 60% 20%, rgba(255,92,180,.18), transparent 65%);
  mix-blend-mode: screen;
  filter: blur(24px);
  animation: bg-aurora 18s ease-in-out infinite alternate;
}
@keyframes bg-aurora {
  0%   { transform: translate(0, 0) scale(1);   opacity: .9; }
  50%  { transform: translate(-2%, 2%) scale(1.05); opacity: 1; }
  100% { transform: translate(3%, -3%) scale(1.08); opacity: .95; }
}
.login-grid {
  position: fixed; inset: 0; z-index: -3;
  pointer-events: none;
  background-image:
    linear-gradient(to right, rgba(0,240,208,.10) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(157,107,255,.10) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse at center, black 35%, transparent 75%);
  animation: bg-grid 24s linear infinite;
}
@keyframes bg-grid {
  from { background-position: 0 0; }
  to   { background-position: 64px 64px; }
}
.login-particles { position: fixed; inset: 0; z-index: -2; pointer-events: none; overflow: hidden; }
.login-particles span {
  position: absolute; bottom: -20px;
  width: 6px; height: 6px; border-radius: 50%;
  background: rgba(0,240,208,.9);
  box-shadow: 0 0 10px rgba(0,240,208,.9), 0 0 22px rgba(0,240,208,.5);
  opacity: 0;
  animation: float-up linear infinite;
}
.login-particles span:nth-child(3n) { background: rgba(157,107,255,.9); box-shadow: 0 0 10px rgba(157,107,255,.9), 0 0 22px rgba(157,107,255,.5); }
.login-particles span:nth-child(5n) { background: rgba(255,200,120,.9); box-shadow: 0 0 10px rgba(255,200,120,.9), 0 0 22px rgba(255,200,120,.5); }
@keyframes float-up {
  0%   { transform: translate(0, 0) scale(.5); opacity: 0; }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% { transform: translate(var(--drift, 0px), -110vh) scale(1.4); opacity: 0; }
}
.login-scanline {
  position: fixed; inset: 0; z-index: -1;
  pointer-events: none;
  background: linear-gradient(180deg, transparent 0%, rgba(0,240,208,.05) 50%, transparent 100%);
  background-size: 100% 6px;
  opacity: .35;
}
.login-wrap { max-width: 920px; margin: 60px auto; padding: 16px; position: relative; z-index: 1; }
.login-card {
  background: rgba(13, 17, 25, .8);
  border: 1px solid rgba(0,240,208,.25);
  padding: 36px 40px;
  backdrop-filter: blur(18px);
  -webkit-backdrop-filter: blur(18px);
  box-shadow: var(--shadow-neon), 0 40px 100px rgba(0,0,0,.5);
  clip-path: polygon(0 0, calc(100% - 24px) 0, 100% 24px, 100% 100%, 24px 100%, 0 calc(100% - 24px));
  position: relative;
}
.login-card::before {
  content: '> METRAVIA · 安全登录通道';
  position: absolute; top: -22px; left: 12px;
  font-family: var(--font-display);
  font-size: 10px; letter-spacing: .25em;
  color: var(--cyan); text-shadow: 0 0 8px var(--cyan);
}
.login-card::after {
  content: '';
  position: absolute; right: 18px; bottom: 12px;
  width: 60px; height: 1px;
  background: linear-gradient(to right, transparent, var(--purple));
}
.login-title {
  font-family: var(--font-display);
  font-size: 26px;
  font-weight: 900;
  letter-spacing: .15em;
  margin-bottom: 4px;
  background: linear-gradient(120deg, var(--cyan) 0%, var(--purple) 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.login-subtitle { color: var(--text-muted); font-size: 11px; letter-spacing: .2em; text-transform: uppercase; margin-bottom: 24px; }
.with-wallpaper .login-subtitle,
.with-wallpaper .login-server-status {
  color: #c4cee0;
  text-shadow: 0 1px 8px rgba(0,0,0,.8);
}
:root[data-theme=light] .login-card { background: rgba(255,255,255,.85); }
:root[data-theme=light] .with-wallpaper .login-subtitle,
:root[data-theme=light] .with-wallpaper .login-server-status {
  color: #28354b;
  text-shadow: 0 1px 2px rgba(255,255,255,.9), 0 0 10px rgba(255,255,255,.75);
}
.login-tabs { display: flex; gap: 0; margin-bottom: 22px; border-bottom: 1px solid var(--border-strong); }
.login-tabs button {
  flex: 1; background: transparent; border: none; clip-path: none;
  color: var(--text-muted);
  border-bottom: 2px solid transparent;
  padding: 12px 8px;
  font-family: var(--font-display);
  text-transform: uppercase;
  letter-spacing: .15em;
}
.login-tabs button:hover { color: var(--cyan); background: transparent; border-color: rgba(0,240,208,.25); box-shadow: none; }
.login-tabs button.active { color: var(--cyan); border-color: var(--cyan); box-shadow: 0 1px 0 var(--cyan), 0 6px 16px rgba(0,240,208,.18); }
.field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.field label { color: var(--text-muted); font-size: 10px; letter-spacing: .15em; text-transform: uppercase; }
.qq-preview { display: flex; gap: 12px; align-items: center; padding: 10px; background: var(--bg-soft); border: 1px solid var(--border-strong); }
.qq-preview img { width: 44px; height: 44px; border: 1px solid var(--cyan); box-shadow: 0 0 10px rgba(0,240,208,.3); }

/* 自定义文件上传按钮 */
.file-input-wrap { position: relative; display: flex; align-items: center; gap: 8px; }
.file-input-wrap input[type=file] {
  position: absolute; opacity: 0; pointer-events: none; width: 0; height: 0;
}
.file-input-btn {
  display: inline-flex; align-items: center; gap: 10px;
  cursor: pointer; flex: 1; min-width: 0;
  text-transform: none; letter-spacing: .03em;
  font-family: var(--font-body);
  padding: 0 14px;
}
.file-input-btn .ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px;
  background: linear-gradient(135deg, rgba(0,240,208,.18), rgba(157,107,255,.12));
  border: 1px solid var(--cyan);
  color: var(--cyan);
  font-size: 13px;
  flex: 0 0 22px;
}
.file-input-btn .file-label-text {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
  color: var(--text-muted);
  font-size: 13px;
}
.file-input-btn:hover .file-label-text { color: var(--text); }
.file-input-clear {
  height: var(--control-height); width: 36px; padding: 0; justify-content: center;
  font-size: 18px; font-family: var(--font-display); color: var(--red);
  flex: 0 0 36px;
}
.file-input-clear:hover { color: #fff; background: var(--red); border-color: var(--red); }

/* 内联复选框（带描述文字） */
.inline-check { display: flex; align-items: flex-start; gap: 8px; cursor: pointer; text-transform: none; letter-spacing: .02em; font-size: 12.5px; color: var(--text-muted); line-height: 1.5; padding: 6px 0; }
.inline-check input { margin-top: 3px; flex: 0 0 16px; }
.inline-check:hover span { color: var(--text); }

/* === Workbench grid === */
.workbench-grid { display: grid; grid-template-columns: 300px 1fr; gap: 20px; }
.workbench-grid > .col-l { background: var(--bg-card); border: 1px solid var(--border); padding: 16px; max-height: 78vh; overflow: auto; clip-path: var(--clip-card); }
.workbench-grid > .col-r { display: flex; flex-direction: column; gap: 14px; }
@media (max-width: 820px) { .workbench-grid { grid-template-columns: 1fr; } }

/* === Map === */
.map-grid { display: grid; gap: 1px; background: var(--border); border: 1px solid var(--border-strong); padding: 1px; }
.map-grid--viewport { --cell: 52px; border: 2px solid var(--cyan); box-shadow: 0 0 24px rgba(0,240,208,.25), inset 0 0 18px rgba(0,240,208,.08); }
.map-grid .cell.void { background: transparent; cursor: default; visibility: hidden; }
.map-grid .cell {
  width: var(--cell); height: var(--cell);
  padding: 0; margin: 0;
  background-image: var(--asset-ground);
  background-size: cover;
  border: none; border-radius: 0;
  position: relative; overflow: hidden;
  cursor: pointer; clip-path: none;
}
.map-grid .cell::after { display: none; }
.map-grid .cell.fog { background-image: var(--asset-fog); }
.map-grid .cell.poison {
  /* 毒圈单元：半透明紫红色雾气覆盖，保留下方地形轮廓 */
  background-blend-mode: multiply;
}
.map-grid .cell.poison::after {
  display: block; content: '';
  position: absolute; inset: 0;
  background-image: var(--asset-poison);
  background-size: cover;
  box-shadow: inset 0 0 12px rgba(255,80,200,.45);
  mix-blend-mode: normal;
  opacity: .82;
  pointer-events: none;
  animation: poisonPulse 3.6s ease-in-out infinite;
}
:root[data-theme="light"] .map-grid .cell.poison::after { opacity: .62; mix-blend-mode: multiply; }
.map-grid .cell.poison-edge {
  /* 毒圈边界警示 */
  outline: 2px solid rgba(255,120,200,.85);
  outline-offset: -2px;
  animation: poisonEdgeFlash 1.8s ease-in-out infinite;
}
.map-grid .cell.poison-edge::before {
  content: '';
  position: absolute; inset: 0;
  background: var(--asset-warning) center / cover no-repeat;
  opacity: .58;
  mix-blend-mode: screen;
  pointer-events: none;
}
:root[data-theme="light"] .map-grid .cell.poison-edge::before { opacity: .46; mix-blend-mode: multiply; }
.map-grid .cell.warning::after {
  display: block; content: '';
  position: absolute; inset: 0;
  background: var(--asset-warning) center / cover no-repeat;
  mix-blend-mode: screen;
  opacity: .75;
  pointer-events: none;
  animation: poisonPulse 2.4s ease-in-out infinite;
}
@keyframes poisonPulse {
  0%, 100% { opacity: .78; filter: hue-rotate(0deg); }
  50%      { opacity: .92; filter: hue-rotate(-12deg); }
}
@keyframes poisonEdgeFlash {
  0%, 100% { outline-color: rgba(255,120,200,.85); box-shadow: inset 0 0 8px rgba(255,120,200,.4); }
  50%      { outline-color: rgba(255,220,120,.95); box-shadow: inset 0 0 14px rgba(255,220,120,.6); }
}
.map-grid .cell.invalid { background: transparent; visibility: hidden; }
.map-grid .cell.boss-zone { box-shadow: inset 0 0 12px rgba(157,107,255,.7); }
.map-grid .cell.boss-trigger { outline: 2px solid var(--pink); outline-offset: -2px; }
.map-grid .cell .icon { position: absolute; inset: 4px; z-index: 2; background-size: contain; background-repeat: no-repeat; background-position: center; pointer-events: none; }
.map-grid .cell .icon.flag { background-image: var(--asset-flag); }
.map-grid .cell .icon.chest-normal { background-image: var(--asset-chest-normal); }
.map-grid .cell .icon.chest-rare { background-image: var(--asset-chest-rare); }
.map-grid .cell .icon.chest-boss { background-image: var(--asset-chest-boss); }
.map-grid .cell .icon.chest-airdrop {
  background: radial-gradient(circle at 30% 30%, #ffe07a, #ff9a3d 55%, #b45210 100%);
  border: 2px solid #fff2b3;
  border-radius: 4px;
  box-shadow: 0 0 12px rgba(255,180,80,.9), inset 0 -6px 8px rgba(0,0,0,.35);
}
.map-grid .cell.airdrop-beacon {
  background: radial-gradient(circle at center, rgba(255,204,102,.18), rgba(255,204,102,0) 70%), var(--bg-soft);
  animation: airdropBeaconPulse 1.6s ease-in-out infinite;
  box-shadow: inset 0 0 10px rgba(255,204,102,.6), 0 0 14px rgba(255,204,102,.4);
}
@keyframes airdropBeaconPulse {
  0%, 100% { box-shadow: inset 0 0 10px rgba(255,204,102,.5), 0 0 12px rgba(255,204,102,.35); }
  50%      { box-shadow: inset 0 0 16px rgba(255,204,102,.9), 0 0 22px rgba(255,204,102,.7); }
}

/* ============================================================
   METRAVIA · 空投演出 v2 · 补给箱降落
   ============================================================ */
.airdrop-cinematic {
  position: fixed; inset: 0;
  z-index: 5000;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 20%, rgba(20,26,42,.85) 0%, rgba(4,6,12,.98) 60%, #000 100%),
    #000;
  animation: adcRootFade 0.5s ease-out;
  color: var(--cyan);
  font-family: var(--font-display);
}
@keyframes adcRootFade { from { opacity: 0; } to { opacity: 1; } }
.airdrop-cinematic.shake { animation: adcShake 0.45s cubic-bezier(.36,.07,.19,.97); }
@keyframes adcShake {
  10%, 90% { transform: translate3d(-1px, 0, 0); }
  20%, 80% { transform: translate3d(2px, -1px, 0); }
  30%, 50%, 70% { transform: translate3d(-4px, 2px, 0); }
  40%, 60% { transform: translate3d(4px, -2px, 0); }
}

/* 全局迷雾：一层深色噪点 + 顶部一道扫描线暗光 */
.airdrop-cinematic .adc-fog {
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse at 30% 40%, rgba(120,60,255,.05), transparent 55%),
    radial-gradient(ellipse at 70% 60%, rgba(0,180,255,.04), transparent 60%);
  z-index: 1;
}
.airdrop-cinematic .adc-scan {
  position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: linear-gradient(90deg, transparent, rgba(0,240,208,.8), transparent);
  box-shadow: 0 0 22px 4px rgba(0,240,208,.55);
  z-index: 12;
  animation: adcScan 3.6s linear infinite;
}
@keyframes adcScan {
  0%   { transform: translateY(0); opacity: 0.85; }
  50%  { opacity: 0.4; }
  100% { transform: translateY(100vh); opacity: 0.85; }
}

/* 顶部 HUD */
.airdrop-cinematic .adc-hud {
  position: absolute; left: 50%; top: 4.5%;
  transform: translateX(-50%);
  display: flex; align-items: center; gap: 24px;
  padding: 10px 28px;
  background: linear-gradient(180deg, rgba(11,15,24,.94), rgba(6,9,15,.94));
  border: 1px solid var(--cyan);
  clip-path: polygon(14px 0, calc(100% - 14px) 0, 100% 50%, calc(100% - 14px) 100%, 14px 100%, 0 50%);
  box-shadow: 0 0 18px rgba(0,240,208,.55), inset 0 0 12px rgba(0,240,208,.2);
  z-index: 20;
  animation: adcHudPulse 1.4s ease-in-out infinite;
}
.airdrop-cinematic .adc-hud-title {
  font-weight: 900;
  letter-spacing: .28em;
  font-size: 16px;
  color: var(--cyan);
  text-shadow: 0 0 10px rgba(0,240,208,.9);
}
.airdrop-cinematic .adc-hud-left,
.airdrop-cinematic .adc-hud-right {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--font-body);
  font-size: 11px; letter-spacing: .18em;
  color: var(--text-muted);
}
.airdrop-cinematic .adc-hud-code {
  color: var(--gold);
  font-weight: 700;
  padding: 3px 8px;
  border: 1px solid rgba(255,204,102,.5);
  background: rgba(255,204,102,.08);
}
.airdrop-cinematic .adc-hud-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: #ff5577;
  box-shadow: 0 0 12px #ff5577;
  animation: adcDotBlink 0.8s ease-in-out infinite;
}
@keyframes adcDotBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }
@keyframes adcHudPulse {
  0%, 100% { box-shadow: 0 0 16px rgba(0,240,208,.45), inset 0 0 10px rgba(0,240,208,.2); }
  50%      { box-shadow: 0 0 32px rgba(0,240,208,.9), inset 0 0 20px rgba(0,240,208,.35); }
}

/* 四角钢架装饰 */
.airdrop-cinematic .adc-corner {
  position: absolute; width: 60px; height: 60px;
  border: 2px solid var(--cyan);
  filter: drop-shadow(0 0 8px rgba(0,240,208,.6));
  z-index: 15;
  pointer-events: none;
}
.airdrop-cinematic .adc-corner-tl { top: 20px; left: 20px; border-right: none; border-bottom: none; }
.airdrop-cinematic .adc-corner-tr { top: 20px; right: 20px; border-left: none; border-bottom: none; }
.airdrop-cinematic .adc-corner-bl { bottom: 20px; left: 20px; border-right: none; border-top: none; }
.airdrop-cinematic .adc-corner-br { bottom: 20px; right: 20px; border-left: none; border-top: none; }
.airdrop-cinematic .adc-corner::after {
  content: ''; position: absolute; width: 8px; height: 8px;
  background: var(--cyan);
  box-shadow: 0 0 10px var(--cyan);
}
.airdrop-cinematic .adc-corner-tl::after { top: -4px; left: -4px; }
.airdrop-cinematic .adc-corner-tr::after { top: -4px; right: -4px; }
.airdrop-cinematic .adc-corner-bl::after { bottom: -4px; left: -4px; }
.airdrop-cinematic .adc-corner-br::after { bottom: -4px; right: -4px; }

/* 舞台 + 相机 */
.airdrop-cinematic .adc-stage {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
  z-index: 5;
}
.airdrop-cinematic .adc-camera {
  --focus-x: 50%;
  --focus-y: 50%;
  --focus-scale: 1;
  position: absolute;
  left: 50%;
  top: 50%;
  /* 让地图内 (focus-x, focus-y) 的点始终位于 stage 中心：
     1. transform-origin = focus 点 → scale 以该点为不动点
     2. translate(-focus-x, -focus-y) → 把该点从相对于 camera 左上的位置搬到 (0,0)
     3. 因为 camera 本身 left/top=50%，(0,0) 恰好在 stage 中央 */
  transform-origin: var(--focus-x) var(--focus-y);
  transform: translate(calc(-1 * var(--focus-x)), calc(-1 * var(--focus-y)))
             scale(var(--focus-scale));
  transition: transform 1.3s cubic-bezier(.5,.05,.2,1);
  will-change: transform;
}

/* 地图本体 */
.airdrop-cinematic .adc-map {
  display: grid;
  gap: 1px;
  background: #05070c;
  border: 2px solid #12172a;
  padding: 1px;
  position: relative;
}
.airdrop-cinematic .adc-map::before {
  /* 雷达网格叠加 */
  content: ''; position: absolute; inset: 0;
  background-image:
    linear-gradient(rgba(0,240,208,.08) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,240,208,.08) 1px, transparent 1px);
  background-size: 90px 90px;
  pointer-events: none;
  z-index: 2;
}
.airdrop-cinematic .adc-map::after {
  /* 迷雾遮罩 */
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(ellipse at center, transparent 0%, rgba(4,6,12,.55) 55%, rgba(4,6,12,.85) 100%);
  pointer-events: none;
  z-index: 3;
}

/* 单元格 */
.airdrop-cinematic .adc-map .cell {
  width: 30px; height: 30px;
  background: #0a0d16;
  position: relative;
  overflow: visible;
  box-shadow: inset 0 0 20px rgba(0,0,0,.55);
}
/* 迷雾覆盖：整片深色，细颗粒 */
.airdrop-cinematic .adc-map .cell::before {
  content: ''; position: absolute; inset: 0;
  background:
    radial-gradient(circle at 30% 40%, rgba(30,20,60,.65), rgba(4,6,12,.9) 70%),
    linear-gradient(135deg, rgba(70,50,120,.15), transparent);
  opacity: 0.88;
  transition: opacity 0.6s ease;
  pointer-events: none;
}
.airdrop-cinematic .adc-map .cell.visible::before {
  opacity: 0.15;
}
.airdrop-cinematic .adc-map .cell.visible {
  background: linear-gradient(135deg, #1a2438, #0d1424);
  box-shadow: inset 0 0 10px rgba(0,240,208,.15);
}
.airdrop-cinematic .adc-map .cell.reveal::before {
  opacity: 0.15;
}
.airdrop-cinematic .adc-map .cell.reveal {
  background: linear-gradient(135deg, #2a1e15, #1a1108);
  box-shadow: inset 0 0 12px rgba(255,180,80,.25);
  animation: adcCellReveal 0.6s ease-out;
}
@keyframes adcCellReveal {
  from { box-shadow: inset 0 0 26px rgba(255,220,120,.9); }
  to   { box-shadow: inset 0 0 12px rgba(255,180,80,.25); }
}
.airdrop-cinematic .adc-map .cell.player {
  background: radial-gradient(circle at center, var(--cyan) 0%, #005f52 55%, #001a17 100%);
  box-shadow: 0 0 14px var(--cyan), inset 0 0 8px rgba(255,255,255,.5);
  z-index: 4;
}
.airdrop-cinematic .adc-map .cell.player::after {
  content: 'P'; position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-weight: 900; color: #001a17;
  font-family: var(--font-display); font-size: 14px;
  text-shadow: 0 0 4px rgba(255,255,255,.7);
}
.airdrop-cinematic .adc-map .cell.target-cell {
  background: radial-gradient(circle at center, rgba(255,180,80,.35), rgba(4,6,12,.55) 70%);
  outline: 2px dashed var(--gold);
  outline-offset: -3px;
  z-index: 4;
  animation: adcTargetBlink 0.7s ease-in-out infinite;
}
@keyframes adcTargetBlink {
  0%, 100% { outline-color: var(--gold); box-shadow: inset 0 0 10px rgba(255,180,80,.4); }
  50%      { outline-color: #fff; box-shadow: inset 0 0 20px rgba(255,255,255,.6); }
}

/* 毒圈遮罩：从中心内圈透明，越往外越浓的紫红雾；圈边一道亮环 */
.airdrop-cinematic .adc-poison {
  --pcx: 50%;
  --pcy: 50%;
  --pr: 30%;                /* 相对 100% 地图的百分比半径 */
  position: absolute; inset: 0;
  pointer-events: none;
  z-index: 5;
  background:
    /* 边缘亮环（细） */
    radial-gradient(
      circle at var(--pcx) var(--pcy),
      transparent calc(var(--pr) - 1.2%),
      rgba(255,120,200,.65) calc(var(--pr) - 0.4%),
      rgba(255,120,200,.9) var(--pr),
      transparent calc(var(--pr) + 0.6%)
    ),
    /* 圈外紫红雾 */
    radial-gradient(
      circle at var(--pcx) var(--pcy),
      transparent 0%,
      transparent var(--pr),
      rgba(140,30,150,.42) calc(var(--pr) + 2%),
      rgba(100,10,130,.7) calc(var(--pr) + 20%),
      rgba(60,0,90,.85) 100%
    );
  mix-blend-mode: normal;
  animation: adcPoisonPulse 3.2s ease-in-out infinite;
}
@keyframes adcPoisonPulse {
  0%, 100% { filter: hue-rotate(0deg); opacity: .92; }
  50%      { filter: hue-rotate(-12deg); opacity: 1; }
}

/* ================= 目标锁定十字准星 ================= */
.airdrop-cinematic .adc-reticle {
  position: absolute; inset: 0;
  pointer-events: none;
  z-index: 8;
  animation: adcReticleAppear 0.35s ease-out;
}
@keyframes adcReticleAppear {
  from { transform: scale(2.4); opacity: 0; }
  to   { transform: scale(1);   opacity: 1; }
}
.airdrop-cinematic .adc-reticle .adc-ret-h,
.airdrop-cinematic .adc-reticle .adc-ret-v {
  position: absolute; background: var(--gold);
  box-shadow: 0 0 6px var(--gold);
}
.airdrop-cinematic .adc-reticle .adc-ret-h { left: -60%; right: -60%; top: 50%; height: 1px; transform: translateY(-.5px); }
.airdrop-cinematic .adc-reticle .adc-ret-v { top: -60%; bottom: -60%; left: 50%; width: 1px; transform: translateX(-.5px); }
.airdrop-cinematic .adc-reticle > div:not(.adc-ret-h):not(.adc-ret-v) {
  position: absolute; width: 8px; height: 8px;
  border: 1.5px solid var(--gold);
  box-shadow: 0 0 6px var(--gold);
}
.airdrop-cinematic .adc-reticle .adc-ret-tl { top: -6px; left: -6px; border-right: none; border-bottom: none; }
.airdrop-cinematic .adc-reticle .adc-ret-tr { top: -6px; right: -6px; border-left: none; border-bottom: none; }
.airdrop-cinematic .adc-reticle .adc-ret-bl { bottom: -6px; left: -6px; border-right: none; border-top: none; }
.airdrop-cinematic .adc-reticle .adc-ret-br { bottom: -6px; right: -6px; border-left: none; border-top: none; }

/* ================= 空投箱 + 降落伞 ================= */
.airdrop-cinematic .adc-drop {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 50px; height: 50px;
  transform: translate(-50%, -50%);
  pointer-events: none;
  z-index: 10;
  filter: drop-shadow(0 6px 10px rgba(0,0,0,.6));
}
.airdrop-cinematic .adc-drop.is-falling {
  top: -1400px;                          /* 高空起始 */
}
.airdrop-cinematic .adc-drop.descend {
  top: 50%;                              /* 目标格中心 */
  transition: top 2.6s cubic-bezier(.5,.08,.65,.95);
  animation: adcDropSway 1.4s ease-in-out infinite;
}
@keyframes adcDropSway {
  0%, 100% { transform: translate(-50%, -50%) rotate(-3deg); }
  50%      { transform: translate(-50%, -50%) rotate(3deg);  }
}
.airdrop-cinematic .adc-drop.impact {
  animation: adcDropBounce 0.6s cubic-bezier(.5,.05,.3,1);
}
@keyframes adcDropBounce {
  0%   { transform: translate(-50%, -50%) scale(1, 1); }
  30%  { transform: translate(-50%, -60%) scale(1.1, 0.9); }
  55%  { transform: translate(-50%, -46%) scale(0.9, 1.15); }
  75%  { transform: translate(-50%, -52%) scale(1.05, 0.95); }
  100% { transform: translate(-50%, -50%) scale(1, 1); }
}
.airdrop-cinematic .adc-drop.landed {
  animation: adcDropIdle 2.4s ease-in-out infinite;
}
@keyframes adcDropIdle {
  0%, 100% { transform: translate(-50%, -50%) scale(1);    filter: drop-shadow(0 6px 10px rgba(0,0,0,.6)) drop-shadow(0 0 6px rgba(255,204,102,.6)); }
  50%      { transform: translate(-50%, -52%) scale(1.04); filter: drop-shadow(0 6px 10px rgba(0,0,0,.6)) drop-shadow(0 0 16px rgba(255,204,102,1)); }
}

/* 补给箱本体 */
.airdrop-cinematic .adc-crate {
  position: absolute; inset: 0;
  z-index: 3;
}
.airdrop-cinematic .adc-crate-face {
  position: absolute; inset: 4px;
  border-radius: 3px;
  background:
    linear-gradient(135deg, #8a4a12 0%, #b45f18 30%, #d47a26 55%, #a24d0e 100%);
  border: 2px solid #ffcc66;
  box-shadow:
    inset 0 -6px 10px rgba(0,0,0,.55),
    inset 0 6px 6px rgba(255,220,150,.35),
    0 0 14px rgba(255,180,80,.4);
  overflow: hidden;
}
/* 木板/金属条纹 */
.airdrop-cinematic .adc-crate-stripe {
  position: absolute; left: 0; right: 0; height: 4px;
  background:
    repeating-linear-gradient(90deg, rgba(30,15,0,.6) 0 4px, rgba(80,40,10,.4) 4px 8px);
  border-top: 1px solid rgba(0,0,0,.4);
  border-bottom: 1px solid rgba(255,220,150,.3);
}
.airdrop-cinematic .adc-crate-stripe:nth-child(1) { top: 20%; }
.airdrop-cinematic .adc-crate-stripe:nth-child(2) { top: 68%; }
/* 中央面板 */
.airdrop-cinematic .adc-crate-panel {
  position: absolute; left: 22%; right: 22%; top: 28%; bottom: 28%;
  background: linear-gradient(180deg, #2a1a0a, #0f0805);
  border: 1px solid #ffcc66;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 2px;
}
.airdrop-cinematic .adc-crate-star {
  color: #ffcc66;
  font-size: 12px;
  line-height: 1;
  text-shadow: 0 0 4px rgba(255,204,102,.9);
}
.airdrop-cinematic .adc-crate-code {
  color: #ffe19a;
  font-family: var(--font-body);
  font-size: 6px;
  letter-spacing: .1em;
  font-weight: 700;
}
.airdrop-cinematic .adc-crate-bolt {
  position: absolute; width: 4px; height: 4px; border-radius: 50%;
  background: radial-gradient(circle, #fff2b3, #a26a1a 70%);
  box-shadow: 0 0 3px rgba(255,220,150,.7);
}
.airdrop-cinematic .adc-crate-bolt-tl { top: 6px;  left: 6px;  }
.airdrop-cinematic .adc-crate-bolt-tr { top: 6px;  right: 6px; }
.airdrop-cinematic .adc-crate-bolt-bl { bottom: 6px; left: 6px;  }
.airdrop-cinematic .adc-crate-bolt-br { bottom: 6px; right: 6px; }
/* 顶部挂钩 */
.airdrop-cinematic .adc-crate-top {
  position: absolute; left: 50%; top: -6px;
  transform: translateX(-50%);
  width: 30%; height: 8px;
  background: linear-gradient(180deg, #7a4210, #4a2606);
  border: 1px solid rgba(255,220,150,.5);
  border-bottom: none;
}
.airdrop-cinematic .adc-crate-hook {
  position: absolute; left: 50%; top: -8px;
  transform: translateX(-50%);
  width: 8px; height: 10px;
  border: 2px solid #d0d0d0;
  border-bottom: none;
  border-radius: 6px 6px 0 0;
  background: transparent;
}
.airdrop-cinematic .adc-crate-glow {
  position: absolute; inset: -4px;
  border-radius: 8px;
  background: radial-gradient(circle at center, rgba(255,204,102,.35), transparent 70%);
  filter: blur(4px);
  z-index: -1;
}

/* 悬挂绳 */
.airdrop-cinematic .adc-ropes {
  position: absolute; left: 0; right: 0; top: -70px; height: 70px;
  z-index: 1;
}
.airdrop-cinematic .adc-rope {
  position: absolute; top: 0; bottom: 0;
  width: 2px;
  background: linear-gradient(180deg, rgba(255,255,255,.85), rgba(255,255,255,.35));
  transform-origin: top center;
}
.airdrop-cinematic .adc-rope-1 { left: 12%; transform: rotate(6deg); }
.airdrop-cinematic .adc-rope-2 { left: 34%; transform: rotate(2deg); }
.airdrop-cinematic .adc-rope-3 { right: 34%; transform: rotate(-2deg); }
.airdrop-cinematic .adc-rope-4 { right: 12%; transform: rotate(-6deg); }

/* 降落伞（5 瓣布） */
.airdrop-cinematic .adc-para {
  position: absolute; left: 50%; bottom: calc(100% + 60px);
  transform: translateX(-50%);
  width: 96px; height: 58px;
  z-index: 2;
  transform-origin: bottom center;
  animation: adcParaSway 1.6s ease-in-out infinite alternate;
}
@keyframes adcParaSway {
  from { transform: translateX(-50%) rotate(-4deg); }
  to   { transform: translateX(-50%) rotate(4deg);  }
}
.airdrop-cinematic .adc-para-panel {
  position: absolute;
  bottom: 0;
  width: 20%; height: 100%;
  border-radius: 100% 100% 0 0 / 200% 200% 0 0;
  border: 1px solid rgba(0,240,208,.5);
  filter: drop-shadow(0 -2px 4px rgba(0,240,208,.35));
}
.airdrop-cinematic .adc-p-1 { left:  0%; background: linear-gradient(180deg, #ff5cb4, #9d3a80); }
.airdrop-cinematic .adc-p-2 { left: 20%; background: linear-gradient(180deg, #ffcc66, #b47a1a); }
.airdrop-cinematic .adc-p-3 { left: 40%; background: linear-gradient(180deg, #00f0d0, #007a68); }
.airdrop-cinematic .adc-p-4 { left: 60%; background: linear-gradient(180deg, #ffcc66, #b47a1a); }
.airdrop-cinematic .adc-p-5 { left: 80%; background: linear-gradient(180deg, #9d6bff, #4a2ea8); }
.airdrop-cinematic .adc-para-shine {
  position: absolute; left: 10%; right: 10%; top: 6px; height: 10px;
  background: radial-gradient(ellipse, rgba(255,255,255,.7), transparent 70%);
  filter: blur(2px);
}
/* 落地瞬间：伞与吊绳直接消失 */
.airdrop-cinematic .adc-drop.landed .adc-para,
.airdrop-cinematic .adc-drop.landed .adc-ropes {
  display: none;
}

/* 阴影（地面 halo） */
.airdrop-cinematic .adc-shadow {
  position: absolute; left: 50%; bottom: -10px;
  transform: translateX(-50%);
  width: 36px; height: 10px;
  background: radial-gradient(ellipse, rgba(0,0,0,.7), transparent 70%);
  border-radius: 50%;
  z-index: 0;
  animation: adcShadowGrow 2.6s cubic-bezier(.5,.08,.65,.95) forwards;
}
@keyframes adcShadowGrow {
  from { width: 4px;  opacity: 0.3; }
  to   { width: 40px; opacity: 0.9; }
}

/* 落地冲击圈 */
.airdrop-cinematic .adc-impact {
  position: absolute; left: 50%; top: 100%;
  transform: translate(-50%, -50%) scale(0);
  width: 200px; height: 200px;
  border: 3px solid var(--gold);
  border-radius: 50%;
  box-shadow:
    0 0 40px rgba(255,204,102,.9),
    inset 0 0 30px rgba(255,204,102,.5);
  opacity: 0;
  z-index: 1;
}
.airdrop-cinematic .adc-drop.impact .adc-impact {
  animation: adcImpactRing 0.9s ease-out forwards;
}
@keyframes adcImpactRing {
  0%   { transform: translate(-50%, -50%) scale(0); opacity: 1; border-width: 5px; }
  100% { transform: translate(-50%, -50%) scale(3);   opacity: 0; border-width: 1px; }
}

/* 尘土 */
.airdrop-cinematic .adc-dust {
  position: absolute; left: 50%; top: 100%;
  transform: translate(-50%, -50%);
  width: 90px; height: 30px;
  background:
    radial-gradient(ellipse 30% 100% at 30% 60%, rgba(200,160,110,.55), transparent 80%),
    radial-gradient(ellipse 30% 100% at 70% 40%, rgba(230,190,140,.5),  transparent 80%),
    radial-gradient(ellipse 20% 80% at 50% 70%, rgba(255,220,160,.4),  transparent 80%);
  opacity: 0;
  z-index: 0;
  filter: blur(2px);
}
.airdrop-cinematic .adc-drop.impact .adc-dust {
  animation: adcDust 1.2s ease-out forwards;
}
@keyframes adcDust {
  0%   { transform: translate(-50%, -30%) scale(0.4); opacity: 0.9; }
  100% { transform: translate(-50%, -100%) scale(1.6); opacity: 0;    }
}

/* 底部字幕 */
.airdrop-cinematic .adc-caption {
  position: absolute; left: 50%; bottom: 6%;
  transform: translateX(-50%);
  padding: 6px 22px;
  background: rgba(6,9,15,.85);
  border-top: 1px solid rgba(255,204,102,.4);
  border-bottom: 1px solid rgba(255,204,102,.4);
  color: var(--text);
  letter-spacing: .18em;
  font-size: 12px;
  z-index: 18;
  opacity: 0;
  animation: adcCapFade 0.4s ease-out 0.5s forwards;
}
.airdrop-cinematic .adc-caption .adc-cap-k {
  color: var(--gold);
  font-weight: 800;
  letter-spacing: .3em;
  padding-right: 6px;
}
@keyframes adcCapFade {
  from { opacity: 0; transform: translate(-50%, 10px); }
  to   { opacity: 1; transform: translate(-50%, 0);    }
}
.map-grid .cell .icon.boss { background-image: var(--asset-boss-2); }
.map-grid .cell .icon.boss.boss-skin-1 { background-image: var(--asset-boss-1); }
.map-grid .cell .icon.boss.boss-skin-2 { background-image: var(--asset-boss-2); }
.map-grid .cell .token {
  position: absolute; inset: 4px;
  border-radius: 50%;
  background: var(--cyan);
  border: 2px solid #fff;
  display: flex; align-items: center; justify-content: center;
  color: #050810; font-size: 10px; font-weight: 800;
  font-family: var(--font-display);
  pointer-events: none;
  box-shadow: 0 0 8px rgba(0,0,0,.4);
}
.map-grid .cell .token.team-red { background: #ff5c5c; }
.map-grid .cell .token.team-blue { background: #5c9dff; }
.map-grid .cell .token.team-green { background: #51cf66; }
.map-grid .cell .token.team-purple { background: #b367ff; }
.map-grid .cell .token.team-yellow { background: #ffd166; color: #000; }
.map-grid .cell .token.team-cyan { background: #5cd6e6; color: #000; }
.map-grid .cell .token.team-orange { background: #ff9966; }
.map-grid .cell .token.team-pink { background: #ff8ec5; }
.map-grid .cell .token.team-lime { background: #b0ff5c; color: #000; }
.map-grid .cell .token.team-magenta { background: #ff5cd6; }
.map-grid .cell.has-chest-tip { overflow: visible; z-index: 3; }
.map-grid .cell.has-chest-tip:hover { z-index: 5; }
.chest-tooltip {
  position: absolute;
  left: 50%;
  bottom: calc(100% + 6px);
  transform: translateX(-50%);
  min-width: 120px;
  padding: 6px 9px 7px;
  background: linear-gradient(180deg, rgba(11,15,24,.96), rgba(6,9,15,.96));
  border: 1px solid var(--cyan);
  color: var(--text);
  font-family: var(--font-body);
  font-size: 10.5px;
  line-height: 1.35;
  letter-spacing: .02em;
  pointer-events: none;
  clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
  box-shadow: 0 4px 18px rgba(0,240,208,.35), inset 0 0 8px rgba(0,240,208,.15);
  white-space: nowrap;
  animation: chestTipPulse 2.2s ease-in-out infinite;
}
.chest-tooltip::after {
  content: '';
  position: absolute;
  left: 50%; bottom: -6px;
  width: 10px; height: 10px;
  transform: translateX(-50%) rotate(45deg);
  background: rgba(6,9,15,.96);
  border-right: 1px solid var(--cyan);
  border-bottom: 1px solid var(--cyan);
  box-shadow: 3px 3px 6px rgba(0,240,208,.25);
}
.chest-tooltip .ct-title {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 11px;
  letter-spacing: .1em;
  color: var(--cyan);
  text-transform: uppercase;
  margin-bottom: 3px;
}
.chest-tooltip .ct-row { display: flex; justify-content: space-between; gap: 10px; color: var(--text-muted); }
.chest-tooltip .ct-row .ct-v { color: var(--text); font-weight: 700; }
.chest-tooltip .ct-buff {
  margin-top: 4px;
  padding-top: 4px;
  border-top: 1px dashed rgba(255,204,102,.5);
  color: var(--gold);
  font-weight: 700;
  text-shadow: 0 0 6px rgba(255,204,102,.4);
}
@keyframes chestTipPulse {
  0%, 100% { box-shadow: 0 4px 18px rgba(0,240,208,.35), inset 0 0 8px rgba(0,240,208,.15); }
  50%      { box-shadow: 0 4px 22px rgba(0,240,208,.55), inset 0 0 12px rgba(0,240,208,.25); }
}
.map-grid .cell.me-here { box-shadow: inset 0 0 0 2px var(--cyan), 0 0 12px var(--cyan); }
.map-grid .cell.target {
  z-index: 3;
  outline: 3px solid var(--map-route-line, var(--cyan));
  outline-offset: -4px;
}
.map-grid .cell.next-step { box-shadow: none; }
.map-grid .cell .path-overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: var(--map-route-fill, rgba(0, 230, 200, .2));
}

.map-wrap { background: var(--bg-card); padding: 10px; border: 1px solid var(--border); overflow: auto; max-height: 78vh; clip-path: var(--clip-card); }

/* 9×9 视野窗口：暗角 + HUD */
.map-viewport {
  position: relative;
  display: inline-block;
  margin: 0 auto;
  padding: 12px;
  background: radial-gradient(circle at center, rgba(0,240,208,.05), transparent 70%);
}
.map-vignette {
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse at center, transparent 38%, rgba(7,9,15,.45) 62%, rgba(7,9,15,.92) 88%),
    radial-gradient(ellipse at center, transparent 50%, rgba(0,240,208,.06) 80%, transparent 100%);
  mix-blend-mode: normal;
}
.map-viewport::before, .map-viewport::after {
  content: ''; position: absolute; pointer-events: none;
  width: 22px; height: 22px;
  border: 2px solid var(--cyan);
}
.map-viewport::before { top: 4px; left: 4px; border-right: none; border-bottom: none; }
.map-viewport::after  { bottom: 4px; right: 4px; border-left: none; border-top: none; }
.map-hud {
  margin-top: 10px;
  font-family: var(--font-display);
  font-size: 11px;
  letter-spacing: .18em;
  color: var(--cyan);
  text-transform: uppercase;
  text-align: center;
  text-shadow: 0 0 8px rgba(0,240,208,.5);
}

/* === Game layout === */
.game-layout { display: grid; grid-template-columns: 260px 1fr 300px; gap: 14px; padding: 16px; min-height: calc(100vh - 60px); }
@media (max-width: 980px) { .game-layout { grid-template-columns: 1fr; min-height: auto; } }
.game-side { background: var(--bg-card); border: 1px solid var(--border); padding: 14px; overflow: auto; max-height: 92vh; clip-path: var(--clip-card); }

.player-card { display: flex; gap: 10px; align-items: center; padding: 8px; transition: background .15s; }
.movement-choice {
  width: 100%;
  padding: 9px 10px;
  background: var(--bg-soft);
  border: 1px solid var(--border);
  font-size: 11px;
  line-height: 1.5;
}
.player-card + .player-card { border-top: 1px dashed var(--border); }
.player-card.me { background: rgba(0,240,208,.07); box-shadow: inset 3px 0 0 var(--cyan); }
.player-card img { width: 36px; height: 36px; border: 1px solid var(--border-strong); }
.player-card img,
#me-avatar,
.users-table img {
  object-fit: cover;
  background: var(--bg-soft) var(--asset-avatar-placeholder) center / cover no-repeat;
}
.player-card .info { flex: 1; min-width: 0; }
.player-card .info .name { font-weight: 600; font-family: var(--font-display); font-size: 13px; letter-spacing: .05em; }
.player-card .stats { color: var(--text-muted); font-size: 11.5px; letter-spacing: .05em; }

.log-list { font-size: 12px; max-height: 280px; overflow: auto; line-height: 1.7; }
.log-list .item { padding: 4px 0; border-bottom: 1px dashed var(--border); color: var(--text-muted); }
.log-list .item:hover { color: var(--text); }

.modal-back { position: fixed; inset: 0; background: rgba(5,8,16,.7); display: flex; align-items: center; justify-content: center; z-index: 200; backdrop-filter: blur(6px); }
.modal { background: var(--bg-card); border: 1px solid var(--cyan); padding: 24px; max-width: 480px; width: 90%; max-height: 90vh; overflow: auto; clip-path: var(--clip-card); box-shadow: var(--shadow-neon); }
.modal h3 { margin-top: 0; color: var(--cyan); }

/* Stat metric */
.metric { display: flex; flex-direction: column; gap: 6px; padding: 18px 18px 20px; background: var(--bg-card); border: 1px solid var(--border); clip-path: var(--clip-card); position: relative; }
.metric .label { font-size: 12px; text-transform: uppercase; letter-spacing: .15em; color: var(--text-muted); font-family: var(--font-display); }
.metric .value { font-family: var(--font-display); font-size: 36px; font-weight: 900; line-height: 1.1; background: linear-gradient(120deg, var(--cyan), var(--purple)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.metric::after {
  content: '';
  position: absolute;
  left: 18px; right: 18px; bottom: 10px;
  height: 2px;
  background: linear-gradient(90deg, var(--cyan), var(--purple) 60%, transparent);
  opacity: .6;
}

/* Quick nav grid */
.quick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }

/* Cards management grid */
.cards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }

/* Config tabs */
.config-tabs {
  display: flex; gap: 0; flex-wrap: wrap;
  border-bottom: 1px solid var(--border-strong);
  margin-bottom: 14px;
}
.config-tabs button {
  background: transparent;
  border: none;
  clip-path: none;
  color: var(--text-muted);
  border-bottom: 2px solid transparent;
  padding: 10px 18px;
  font-family: var(--font-display);
  text-transform: uppercase;
  letter-spacing: .1em;
  font-size: 12px;
}
.config-tabs button:hover { color: var(--cyan); background: transparent; border-color: rgba(0,240,208,.3); box-shadow: none; }
.config-tabs button.active { color: var(--cyan); border-color: var(--cyan); }
.cfg-row {
  display: grid;
  grid-template-columns: 240px 200px 1fr;
  gap: 14px;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px dashed var(--border);
}
.cfg-row label { margin: 0; text-transform: none; letter-spacing: .03em; font-size: 13.5px; color: var(--text); }
.cfg-row input[type=number], .cfg-row input[type=text], .cfg-row select { width: 100%; }
.cfg-row input[type=checkbox] { justify-self: start; }
.cfg-row .muted { font-size: 12px; }
.cfg-section { padding: 10px 0; border-bottom: 1px dashed var(--border); }
.cfg-section-title { font-family: var(--font-display); font-size: 13px; letter-spacing: .12em; color: var(--cyan); margin-bottom: 6px; text-transform: uppercase; }
.card-item {
  position: relative;
  background: var(--bg-card);
  border: 1px solid var(--border-strong);
  padding: 14px 16px;
  clip-path: var(--clip-card);
  display: flex; flex-direction: column; gap: 8px;
  transition: border-color .15s, box-shadow .15s, transform .1s;
}
.card-item:hover { border-color: var(--cyan); box-shadow: 0 0 18px rgba(0,240,208,.15); }
.card-item.disabled { opacity: .45; filter: grayscale(.4); }
.card-item .ci-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.card-item .ci-cost { font-family: var(--font-display); font-size: 12px; letter-spacing: .1em; color: var(--gold); }
.card-item .ci-name { font-family: var(--font-display); font-size: 16px; font-weight: 700; letter-spacing: .06em; color: var(--text); }
.card-item .ci-effect { font-size: 12.5px; color: var(--text-muted); line-height: 1.55; min-height: 3em; }
.card-item .ci-tags { display: flex; gap: 4px; flex-wrap: wrap; min-height: 22px; }
.card-item .ci-tags .tag { font-size: 10px; padding: 2px 7px; }
.card-item .ci-actions { display: flex; gap: 6px; margin-top: 4px; }
.card-item .ci-actions button { flex: 1; height: 30px; padding: 0 8px; font-size: 11px; }
.quick-item {
  display: flex; gap: 14px; align-items: center;
  padding: 16px;
  background: var(--bg-soft);
  border: 1px solid var(--border-strong);
  clip-path: var(--clip-card);
  color: var(--text);
  transition: transform .15s, border-color .15s, box-shadow .15s, background .15s;
  position: relative;
  overflow: hidden;
}
.quick-item:hover {
  text-decoration: none;
  background: var(--bg-elev);
  border-color: var(--cyan);
  box-shadow: 0 0 20px rgba(0,240,208,.18);
  transform: translateY(-2px);
}
.quick-item .qi-icon {
  width: 42px; height: 42px;
  display: flex; align-items: center; justify-content: center;
  font-size: 22px;
  color: var(--cyan);
  background: linear-gradient(135deg, rgba(0,240,208,.15), rgba(157,107,255,.12));
  border: 1px solid var(--cyan);
  text-shadow: 0 0 10px var(--cyan);
  flex: 0 0 42px;
}
.quick-item .qi-body { min-width: 0; }
.quick-item .qi-title { font-family: var(--font-display); font-weight: 700; letter-spacing: .06em; font-size: 14px; }
.quick-item .qi-desc { font-size: 11.5px; color: var(--text-muted); letter-spacing: .03em; margin-top: 2px; }

/* Theme button */
.theme-btn { width: 42px; min-width: 42px; height: 42px; padding: 0; justify-content: center; font-family: var(--font-display); font-size: 18px; flex: 0 0 auto; }
.theme-btn:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.theme-btn--floating {
  position: fixed;
  top: max(14px, env(safe-area-inset-top));
  right: max(14px, env(safe-area-inset-right));
  z-index: 90;
}

/* Responsive */
@media (max-width: 720px) {
  .layout { padding: 0 12px; margin: 12px auto; }
  .app-shell { grid-template-columns: 1fr; }
  .sidebar { position: relative; height: auto; flex-direction: row; overflow-x: auto; padding: 10px; }
  .sidebar .brand { padding: 0 14px; border: none; margin: 0; border-right: 1px solid var(--border); white-space: nowrap; }
  .sidebar .nav-item { padding: 8px 12px; white-space: nowrap; }
  .sidebar .nav-item::before { display: none; }
  .sidebar .sidebar-bottom { display: none; }
  .main { padding: 16px; }
  .topbar { padding: 10px 14px; gap: 8px; }
  .map-wrap { padding: 4px; }
  :root { --cell: 24px; }
  .map-grid--viewport { --cell: 34px; }
}

/* === UI reliability pass: responsive containment and readability === */
input[type=text], input[type=password], input[type=number], input[type=email], select, textarea {
  min-width: 0;
  max-width: 100%;
}
button, .btn, .tag { white-space: nowrap; }
.row > .grow { min-width: 0; }
.main, .layout, .card { max-width: 100%; }
.file-input-wrap { min-width: 0; width: 100%; max-width: 100%; }
.cfg-row > .file-input-wrap {
  grid-column: 2 / -1;
  width: min(100%, 360px);
}
.game-layout > main { min-width: 0; }
.game-toolbar { align-items: flex-start; }
.game-toolbar #status-line { min-width: 260px; line-height: 1.55; }
.score-entry-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  align-items: center;
  padding: 8px 0;
  border-bottom: 1px dashed var(--border);
}
.score-entry-row input,
.score-entry-row select { width: 100% !important; }
.score-entry-row .score-player {
  grid-column: 1 / -1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.score-entry-row .score-skip { margin: 0; white-space: nowrap; justify-self: start; }
#score-entry > button.primary { width: 100%; justify-content: center; margin-top: 8px; }
.status-cell { white-space: nowrap; }
.table-actions { min-width: 360px; }
.table-actions button { margin: 3px 2px; }

@media (max-width: 720px) {
  html, body { width: 100%; max-width: 100%; overflow-x: hidden; }
  .app-shell {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto minmax(0, 1fr);
    align-content: start;
    width: 100%;
    max-width: 100vw;
    overflow-x: hidden;
  }
  .sidebar {
    position: relative;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    flex-direction: row;
    overflow-x: auto;
    overflow-y: hidden;
    padding: 10px;
    align-self: start;
  }
  .sidebar .brand { order: 0; flex: 0 0 auto; }
  .sidebar .sidebar-bottom {
    order: 1;
    display: flex;
    flex: 0 0 auto;
    flex-direction: row;
    align-items: center;
    margin-top: 0;
    padding: 0 8px;
    border-top: 0;
  }
  .sidebar .sidebar-bottom .me { display: none; }
  .sidebar .sidebar-bottom .row { flex-wrap: nowrap; gap: 8px !important; }
  .sidebar .sidebar-bottom .theme-btn {
    width: 44px;
    min-width: 44px;
    height: 44px;
  }
  .sidebar .sidebar-bottom .grow { min-height: 44px; padding-inline: 12px; }
  .sidebar .nav-item { order: 2; }
  .main {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    overflow-x: hidden;
  }
  .page-head { align-items: flex-start; flex-wrap: wrap; }
  .page-head h1 { font-size: 18px; }
  .page-head .status-pill { margin-left: 0; }
  .topbar {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    width: 100%;
    max-width: 100vw;
    padding: 10px 14px 0;
    gap: 8px 10px;
  }
  .topbar .brand { white-space: nowrap; }
  .topbar .right {
    grid-column: 2 / 4;
    min-width: 0;
    justify-self: end;
  }
  .topbar .right .muted {
    max-width: 112px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .topbar .right button { height: 34px; padding: 0 12px; }
  .topbar .nav {
    grid-column: 1 / -1;
    grid-row: 2;
    flex-wrap: nowrap;
    width: calc(100% + 28px);
    margin-left: -14px;
    padding: 7px 14px;
    overflow-x: auto;
    border-top: 1px solid var(--border);
  }
  .topbar .nav a { flex: 0 0 auto; }
  .card { min-width: 0; padding: 16px; }
  table {
    display: block;
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
  }
  table > thead, table > tbody {
    display: table;
    min-width: 640px;
    width: 100%;
  }
  .users-table > thead, .users-table > tbody { min-width: 1120px; }
  .table-actions { white-space: nowrap; min-width: 390px; }
  .cfg-row {
    grid-template-columns: minmax(0, 1fr);
    gap: 7px;
    align-items: stretch;
  }
  .cfg-row > * { min-width: 0; max-width: 100%; }
  .cfg-row > .file-input-wrap { grid-column: 1; width: 100%; }
  .cfg-row label { margin: 0; }
  .config-tabs { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; }
  .config-tabs button { flex: 0 0 auto; padding: 10px 14px; }
  .dashboard-metrics {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px !important;
  }
  .dashboard-metrics .metric { min-width: 0; padding: 14px; }
  .dashboard-metrics .metric .value { font-size: 28px; }
  .quick-grid { grid-template-columns: minmax(0, 1fr); }
  .game-layout { padding: 12px; gap: 12px; }
  .game-side { max-height: none; }
  .game-toolbar {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }
  .game-toolbar #status-line {
    grid-column: 1 / -1;
    min-width: 0;
    width: 100%;
  }
  .game-toolbar button { width: 100%; justify-content: center; }
  .score-entry-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .file-input-btn { width: 100%; max-width: 100%; }
  .file-input-btn .file-label-text { font-size: 12px; }
  .modal { width: calc(100% - 24px); padding: 18px; }
  .modal .row > button { min-height: 44px; }
}

@media (max-width: 420px) {
  .topbar .right .muted { display: none; }
  .metric .label { font-size: 10px; }
  .metric .value { overflow-wrap: anywhere; }
}

/* === Airdrop cinematic v3: screen-space cargo and adaptive camera === */
.airdrop-cinematic.adc-v3 {
  --cyan: #00f0d0;
  --gold: #ffcc66;
  --text: #e4eaf5;
  --text-muted: #91a0bc;
  isolation: isolate;
  background: #080d11;
}
.airdrop-cinematic.adc-v3::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background:
    linear-gradient(90deg, transparent 49.85%, rgba(0,240,208,.12) 50%, transparent 50.15%),
    linear-gradient(transparent 49.85%, rgba(0,240,208,.1) 50%, transparent 50.15%);
  opacity: 0;
  transition: opacity .35s ease-out;
}
.airdrop-cinematic.adc-v3.is-locking::before { opacity: 1; }

.adc-v3 .adc-hud {
  top: max(18px, env(safe-area-inset-top));
  width: min(760px, calc(100% - 48px));
  min-height: 64px;
  display: grid;
  grid-template-columns: minmax(120px, 1fr) auto minmax(120px, 1fr);
  gap: 18px;
  padding: 10px 24px;
  animation: none;
  opacity: 0;
  transform: translate(-50%, -18px);
  transition: opacity .3s ease-out, transform .45s cubic-bezier(.16,1,.3,1), box-shadow .2s;
}
.adc-v3.is-online .adc-hud {
  opacity: 1;
  transform: translate(-50%, 0);
  box-shadow: 0 0 24px rgba(0,240,208,.42), inset 0 0 14px rgba(0,240,208,.12);
}
.adc-v3 .adc-hud-center { min-width: 0; text-align: center; }
.adc-v3 .adc-hud-title {
  font-size: 17px;
  line-height: 1.2;
  letter-spacing: .18em;
  white-space: nowrap;
}
.adc-v3 .adc-hud-state {
  margin-top: 4px;
  color: #c6d0e1;
  font-family: var(--font-body);
  font-size: 10px;
  letter-spacing: .12em;
}
.adc-v3 .adc-hud-side { min-width: 0; }
.adc-v3 .adc-hud-right { justify-content: flex-end; }
.adc-v3 .adc-hud-code { white-space: nowrap; }

.adc-v3 .adc-stage {
  inset: 86px 0 70px;
  perspective: 900px;
}
.adc-v3 .adc-camera {
  filter: saturate(.82) brightness(.7);
  transition-property: transform, filter;
  transition-timing-function: cubic-bezier(.16, 1, .3, 1);
}
.adc-v3.is-routing .adc-camera { filter: saturate(.88) brightness(.78); }
.adc-v3.is-locking .adc-camera,
.adc-v3.is-dropping .adc-camera { filter: saturate(.94) brightness(.86); }
.adc-v3.is-landed .adc-camera { filter: saturate(1) brightness(.92); }
.adc-v3.is-impact .adc-stage { animation: adcV3CameraHit .38s cubic-bezier(.36,.07,.19,.97); }
@keyframes adcV3CameraHit {
  0%, 100% { transform: translate3d(0,0,0); }
  30% { transform: translate3d(-1px,1px,0); }
  60% { transform: translate3d(2px,-1px,0); }
}

.adc-v3 .adc-reticle {
  inset: -7px;
  border: 1px solid rgba(255,204,102,.8);
  animation: adcV3ReticleIn .45s cubic-bezier(.16,1,.3,1), adcV3ReticlePulse 1s ease-in-out .45s infinite;
}
.adc-v3 .adc-reticle::before,
.adc-v3 .adc-reticle::after {
  content: '';
  position: absolute;
  background: rgba(255,204,102,.8);
  box-shadow: 0 0 8px rgba(255,204,102,.7);
}
.adc-v3 .adc-reticle::before { left: -80%; right: -80%; top: 50%; height: 1px; }
.adc-v3 .adc-reticle::after { top: -80%; bottom: -80%; left: 50%; width: 1px; }
.adc-v3 .adc-reticle > i {
  position: absolute;
  width: 9px;
  height: 9px;
  border-color: #fff0b8;
  border-style: solid;
}
.adc-v3 .adc-reticle > i:nth-child(1) { left: -5px; top: -5px; border-width: 2px 0 0 2px; }
.adc-v3 .adc-reticle > i:nth-child(2) { right: -5px; top: -5px; border-width: 2px 2px 0 0; }
.adc-v3 .adc-reticle > i:nth-child(3) { left: -5px; bottom: -5px; border-width: 0 0 2px 2px; }
.adc-v3 .adc-reticle > i:nth-child(4) { right: -5px; bottom: -5px; border-width: 0 2px 2px 0; }
@keyframes adcV3ReticleIn {
  from { opacity: 0; transform: scale(3) rotate(12deg); }
  to { opacity: 1; transform: scale(1) rotate(0); }
}
@keyframes adcV3ReticlePulse { 50% { opacity: .5; transform: scale(.88); } }

.adc-v3 .adc-drop-layer {
  position: absolute;
  inset: 86px 0 70px;
  z-index: 11;
  overflow: hidden;
  pointer-events: none;
}
.adc-v3 .adc-landing-pad {
  position: absolute;
  left: 50%;
  top: 50%;
  width: clamp(126px, 18vw, 210px);
  aspect-ratio: 2.25 / 1;
  transform: translate(-50%, -4%);
  border: 1px solid rgba(255,204,102,.6);
  border-radius: 50%;
  opacity: 0;
  box-shadow: 0 0 28px rgba(255,204,102,.18), inset 0 0 24px rgba(255,204,102,.1);
  transition: opacity .3s ease-out;
}
.adc-v3.is-locking .adc-landing-pad { opacity: .85; animation: adcV3PadPulse 1s ease-in-out infinite; }
.adc-v3.is-landed .adc-landing-pad { border-color: rgba(0,240,208,.8); box-shadow: 0 0 34px rgba(0,240,208,.4); }
.adc-v3 .adc-landing-pad span {
  position: absolute;
  left: 50%; top: 50%;
  border: 1px solid rgba(255,204,102,.55);
  border-radius: 50%;
  transform: translate(-50%, -50%);
}
.adc-v3 .adc-landing-pad span:nth-child(1) { width: 72%; height: 72%; }
.adc-v3 .adc-landing-pad span:nth-child(2) { width: 42%; height: 42%; }
.adc-v3 .adc-landing-pad span:nth-child(3) { width: 7px; height: 7px; background: var(--gold); box-shadow: 0 0 12px var(--gold); }
@keyframes adcV3PadPulse { 50% { opacity: .45; transform: translate(-50%, -4%) scale(.92); } }

.adc-v3 .adc-drop {
  --land-offset: -58px;
  position: absolute;
  left: 50%;
  top: 50%;
  width: clamp(160px, 18vw, 240px);
  height: clamp(250px, 30vw, 360px);
  opacity: 0;
  transform: translate(-50%, -50%) translateY(-62vh) scale(.82);
  filter: drop-shadow(0 18px 18px rgba(0,0,0,.65));
  z-index: 4;
}
.adc-v3.is-dropping .adc-drop { animation: adcV3Descent 2.3s cubic-bezier(.22,.72,.18,1) forwards; }
@keyframes adcV3Descent {
  0% { opacity: .25; transform: translate(-50%, -50%) translateY(-62vh) rotate(-4deg) scale(.82); }
  18% { opacity: 1; }
  70% { transform: translate(-50%, -50%) translateY(calc(var(--land-offset) - 76px)) rotate(2.5deg) scale(.96); }
  90% { transform: translate(-50%, -50%) translateY(calc(var(--land-offset) - 20px)) rotate(-1deg) scale(1); }
  100% { opacity: 1; transform: translate(-50%, -50%) translateY(var(--land-offset)) rotate(0) scale(1); }
}
.adc-v3.is-impact .adc-drop { animation: adcV3CargoImpact .42s cubic-bezier(.2,.75,.3,1) forwards; }
@keyframes adcV3CargoImpact {
  0% { opacity: 1; transform: translate(-50%, -50%) translateY(var(--land-offset)) scale(1); }
  36% { transform: translate(-50%, -50%) translateY(calc(var(--land-offset) + 9px)) scale(1.06,.9); }
  70% { transform: translate(-50%, -50%) translateY(calc(var(--land-offset) - 7px)) scale(.96,1.06); }
  100% { opacity: 1; transform: translate(-50%, -50%) translateY(var(--land-offset)) scale(1); }
}
.adc-v3.is-landed .adc-drop { opacity: 1; animation: adcV3CargoIdle 1.8s ease-in-out infinite; }
.adc-v3.is-confirmed .adc-drop { opacity: 0; transition: opacity .35s ease-out; }
@keyframes adcV3CargoIdle {
  0%,100% { transform: translate(-50%, -50%) translateY(var(--land-offset)); filter: drop-shadow(0 18px 18px rgba(0,0,0,.65)) drop-shadow(0 0 8px rgba(255,204,102,.45)); }
  50% { transform: translate(-50%, -50%) translateY(calc(var(--land-offset) - 3px)); filter: drop-shadow(0 18px 18px rgba(0,0,0,.65)) drop-shadow(0 0 18px rgba(0,240,208,.65)); }
}

.adc-v3 .adc-canopy {
  position: absolute;
  left: 50%;
  top: 0;
  width: 94%;
  height: 32%;
  transform: translateX(-50%);
  transform-origin: 50% 100%;
  z-index: 3;
  animation: adcV3CanopyDrift 1.2s ease-in-out infinite alternate;
  transition: opacity .28s ease-out, transform .4s ease-in;
}
.adc-v3 .adc-canopy-shell {
  position: absolute;
  inset: 0;
  clip-path: polygon(50% 0, 73% 7%, 92% 23%, 100% 55%, 87% 81%, 68% 70%, 50% 91%, 32% 70%, 13% 81%, 0 55%, 8% 23%, 27% 7%);
  background:
    linear-gradient(90deg, transparent 48%, rgba(255,255,255,.28) 50%, transparent 52%),
    linear-gradient(115deg, #b92e69 0 20%, #5a2bc2 20% 40%, #00bca5 40% 60%, #d49a35 60% 80%, #b92e69 80%);
  border: 1px solid rgba(255,255,255,.45);
  box-shadow: inset 0 -12px 22px rgba(0,0,0,.36), 0 0 22px rgba(157,107,255,.32);
}
.adc-v3 .adc-canopy-rib {
  position: absolute;
  left: 50%; bottom: 7%;
  width: 1px;
  height: 86%;
  background: rgba(230,245,255,.45);
  transform-origin: bottom;
}
.adc-v3 .adc-rib-1 { transform: rotate(-52deg); }
.adc-v3 .adc-rib-2 { transform: rotate(-25deg); }
.adc-v3 .adc-rib-3 { transform: rotate(25deg); }
.adc-v3 .adc-rib-4 { transform: rotate(52deg); }
@keyframes adcV3CanopyDrift { from { transform: translateX(-50%) rotate(-2.5deg); } to { transform: translateX(-50%) rotate(2.5deg); } }

.adc-v3 .adc-ropes {
  position: absolute;
  left: 17%; right: 17%; top: 27%; height: 38%;
  z-index: 1;
  transition: opacity .24s ease-out;
}
.adc-v3 .adc-ropes i {
  position: absolute;
  top: 0;
  height: 100%;
  width: 1px;
  background: linear-gradient(rgba(230,245,255,.8), rgba(230,245,255,.25));
  transform-origin: top;
}
.adc-v3 .adc-ropes i:nth-child(1) { left: 0; transform: rotate(-10deg); }
.adc-v3 .adc-ropes i:nth-child(2) { left: 30%; transform: rotate(-3deg); }
.adc-v3 .adc-ropes i:nth-child(3) { right: 30%; transform: rotate(3deg); }
.adc-v3 .adc-ropes i:nth-child(4) { right: 0; transform: rotate(10deg); }
.adc-v3.is-landed .adc-canopy { opacity: 0; transform: translateX(-50%) translateY(32px) scale(.35,.1); animation: none; }
.adc-v3.is-landed .adc-ropes { opacity: 0; }

.adc-v3 .adc-cargo {
  position: absolute;
  left: 50%;
  top: 60%;
  width: 58%;
  aspect-ratio: 1.12 / 1;
  transform: translateX(-50%);
  z-index: 4;
}
.adc-v3 .adc-cargo-front {
  position: absolute;
  inset: 9% 9% 0 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background:
    linear-gradient(90deg, transparent 46%, rgba(255,236,175,.16) 50%, transparent 54%),
    linear-gradient(145deg, #bf681a, #744019 48%, #2a1b17 100%);
  border: 2px solid #f5c15e;
  box-shadow: inset 0 0 0 4px rgba(25,13,8,.36), inset 0 -14px 20px rgba(0,0,0,.45), 0 0 22px rgba(255,190,80,.38);
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}
.adc-v3 .adc-cargo-front::before,
.adc-v3 .adc-cargo-front::after {
  content: '';
  position: absolute;
  left: 0; right: 0;
  height: 7px;
  background: linear-gradient(90deg, #181316, #e0aa4e 16%, #6e3b17 50%, #e0aa4e 84%, #181316);
  border-block: 1px solid rgba(255,232,170,.35);
}
.adc-v3 .adc-cargo-front::before { top: 18%; }
.adc-v3 .adc-cargo-front::after { bottom: 17%; }
.adc-v3 .adc-cargo-side {
  position: absolute;
  top: 14%; right: 0; bottom: 4%; width: 10%;
  background: linear-gradient(90deg, #57311a, #211719);
  border: 1px solid #ad762f;
  clip-path: polygon(0 0, 100% 8%, 100% 92%, 0 100%);
}
.adc-v3 .adc-cargo-top {
  position: absolute;
  left: 7%; right: 7%; top: 0; height: 12%;
  background: linear-gradient(#9d5a20, #3c281d);
  border: 1px solid #dba84d;
  clip-path: polygon(8% 0, 92% 0, 100% 100%, 0 100%);
}
.adc-v3 .adc-cargo-handle {
  position: absolute;
  left: 50%; bottom: 55%;
  width: 28%; height: 90%;
  transform: translateX(-50%);
  border: 3px solid #b9c4d3;
  border-bottom: 0;
  border-radius: 8px 8px 0 0;
}
.adc-v3 .adc-cargo-beacon {
  position: absolute;
  top: 28%;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: #00f0d0;
  box-shadow: 0 0 12px #00f0d0;
  animation: adcDotBlink .7s ease-in-out infinite;
}
.adc-v3 .adc-cargo-mark { max-width: 82%; overflow: hidden; color: #fff1bd; font-size: clamp(10px, 1.5vw, 17px); font-weight: 900; letter-spacing: .03em; line-height: 1; text-shadow: 0 2px 4px #000; white-space: nowrap; }
.adc-v3 .adc-cargo-code { margin-top: 5px; color: #ffe19a; font-family: var(--font-body); font-size: clamp(6px, .8vw, 9px); letter-spacing: .1em; }
.adc-v3 .adc-cargo-band { position: absolute; top: 0; bottom: 0; width: 7px; background: rgba(24,18,22,.72); border-inline: 1px solid rgba(255,225,155,.28); }

.adc-v3 .adc-shadow {
  left: 50%; bottom: 1%;
  width: 62%; height: 7%;
  opacity: .2;
  animation: adcV3ShadowGrow 2.3s cubic-bezier(.22,.72,.18,1) forwards;
}
@keyframes adcV3ShadowGrow { from { width: 8%; opacity: .05; } to { width: 62%; opacity: .8; } }
.adc-v3 .adc-impact { left: 50%; top: 88%; width: clamp(90px, 22vw, 240px); height: clamp(46px, 10vw, 100px); border-width: 2px; }
.adc-v3.is-impact .adc-impact { animation: adcV3ImpactRing .75s ease-out forwards; }
@keyframes adcV3ImpactRing { from { opacity: 1; transform: translate(-50%,-50%) scale(.2); } to { opacity: 0; transform: translate(-50%,-50%) scale(2.2); } }
.adc-v3 .adc-dust { left: 50%; top: 86%; width: 100%; height: 16%; background: none; filter: none; }
.adc-v3 .adc-dust i { position: absolute; bottom: 0; width: 32%; height: 100%; border-radius: 50%; background: radial-gradient(ellipse, rgba(228,183,112,.5), transparent 70%); opacity: 0; }
.adc-v3 .adc-dust i:nth-child(1) { left: 5%; }
.adc-v3 .adc-dust i:nth-child(2) { left: 34%; }
.adc-v3 .adc-dust i:nth-child(3) { right: 5%; }
.adc-v3.is-impact .adc-dust i { animation: adcV3Dust .8s ease-out forwards; }
.adc-v3.is-impact .adc-dust i:nth-child(2) { animation-delay: .06s; }
.adc-v3.is-impact .adc-dust i:nth-child(3) { animation-delay: .12s; }
@keyframes adcV3Dust { from { opacity: .8; transform: translateY(0) scale(.5); } to { opacity: 0; transform: translateY(-50px) scale(1.5); } }

.adc-v3 .adc-map-crate {
  position: absolute;
  inset: 16%;
  z-index: 12;
  display: grid;
  place-items: center;
  color: #160d05;
  font-size: 9px;
  font-weight: 900;
  background: linear-gradient(135deg, #ffd875, #a95a18);
  border: 1px solid #fff0b3;
  box-shadow: 0 0 10px rgba(255,204,102,.9);
  animation: adcV3Beacon 1.2s ease-in-out infinite;
}
@keyframes adcV3Beacon { 50% { box-shadow: 0 0 20px #00f0d0; border-color: #00f0d0; } }

.adc-v3 .adc-altimeter {
  position: absolute;
  right: max(26px, env(safe-area-inset-right));
  top: 50%;
  z-index: 16;
  display: grid;
  justify-items: center;
  gap: 6px;
  transform: translateY(-50%);
  color: #9ba9bf;
  font-family: var(--font-body);
  font-size: 9px;
  letter-spacing: .12em;
  opacity: 0;
  transition: opacity .25s;
}
.adc-v3.is-dropping .adc-altimeter { opacity: 1; }
.adc-v3.is-landed .adc-altimeter { opacity: 0; }
.adc-v3 .adc-alt-track { width: 3px; height: min(34vh, 230px); background: rgba(145,160,188,.18); position: relative; overflow: hidden; }
.adc-v3 .adc-alt-track i { position: absolute; left: 0; right: 0; top: 0; height: 0; background: linear-gradient(#00f0d0, #ffcc66); box-shadow: 0 0 8px #00f0d0; }
.adc-v3.is-dropping .adc-alt-track i { animation: adcV3Altitude 2.3s linear forwards; }
@keyframes adcV3Altitude { to { height: 100%; } }

.adc-v3 .adc-caption {
  bottom: max(18px, env(safe-area-inset-bottom));
  width: min(620px, calc(100% - 56px));
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 14px;
  align-items: center;
  padding: 9px 16px;
  line-height: 1.35;
  letter-spacing: .06em;
  text-align: center;
  opacity: 0;
  animation: none;
  transition: opacity .3s ease-out, transform .4s cubic-bezier(.16,1,.3,1);
}
.adc-v3.is-online .adc-caption { opacity: 1; transform: translateX(-50%); }
.adc-v3 .adc-cap-copy { color: #e4eaf5; font-family: var(--font-body); }
.adc-v3 .adc-cap-coord { color: #9ba9bf; font-family: var(--font-body); font-size: 10px; white-space: nowrap; }
.adc-v3.is-closing { opacity: 0; transition: opacity .5s ease-out; }

@media (max-width: 600px) {
  .adc-v3 .adc-hud {
    top: max(10px, env(safe-area-inset-top));
    width: calc(100% - 24px);
    min-height: 78px;
    grid-template-columns: 1fr 1fr;
    gap: 7px 10px;
    padding: 9px 14px;
    clip-path: polygon(8px 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
  }
  .adc-v3 .adc-hud-center { grid-column: 1 / -1; grid-row: 1; }
  .adc-v3 .adc-hud-left { grid-column: 1; grid-row: 2; justify-content: flex-start; }
  .adc-v3 .adc-hud-right { grid-column: 2; grid-row: 2; }
  .adc-v3 .adc-hud-title { font-size: 14px; letter-spacing: .14em; }
  .adc-v3 .adc-hud-state { margin-top: 2px; font-size: 9px; }
  .adc-v3 .adc-hud-code { padding: 2px 6px; font-size: 9px; }
  .adc-v3 .adc-stage,
  .adc-v3 .adc-drop-layer { inset: 90px 0 76px; }
  .adc-v3 .adc-drop { --land-offset: -38px; width: min(42vw, 154px); height: min(66vw, 242px); }
  .adc-v3 .adc-cargo-mark { font-size: 12px; }
  .adc-v3 .adc-cargo-code { font-size: 6px; }
  .adc-v3 .adc-altimeter { right: 10px; }
  .adc-v3 .adc-alt-track { height: 160px; }
  .adc-v3 .adc-caption {
    bottom: max(10px, env(safe-area-inset-bottom));
    width: calc(100% - 24px);
    min-height: 52px;
    grid-template-columns: auto 1fr;
    gap: 3px 10px;
    padding: 7px 12px;
    text-align: left;
    font-size: 10px;
  }
  .adc-v3 .adc-cap-copy { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .adc-v3 .adc-cap-coord { grid-column: 1 / -1; font-size: 9px; }
  .adc-v3 .adc-corner { width: 34px; height: 34px; }
  .adc-v3 .adc-corner-tl { top: 8px; left: 8px; }
  .adc-v3 .adc-corner-tr { top: 8px; right: 8px; }
  .adc-v3 .adc-corner-bl { bottom: 8px; left: 8px; }
  .adc-v3 .adc-corner-br { bottom: 8px; right: 8px; }
}

@media (prefers-reduced-motion: reduce) {
  .adc-v3 *, .adc-v3::before { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
  .adc-v3.is-dropping .adc-drop,
  .adc-v3.is-impact .adc-drop,
  .adc-v3.is-landed .adc-drop { opacity: 1; transform: translate(-50%, -50%) translateY(var(--land-offset)); }
}

/* v3.2: restrained tactical beam delivery */
.adc-v3 .adc-fog {
  background: radial-gradient(ellipse at 50% 48%, transparent 30%, rgba(3,7,10,.3) 78%, rgba(2,5,8,.62));
}
.adc-v3 .adc-scan {
  height: 1px;
  opacity: .34;
  box-shadow: 0 0 8px 1px rgba(0,240,208,.28);
  animation-duration: 4.8s;
}
.adc-v3 .adc-map {
  background: #10171c;
  border-color: rgba(0,240,208,.35);
  box-shadow: 0 0 14px rgba(0,240,208,.12);
}
.adc-v3 .adc-map::before {
  background-image:
    linear-gradient(rgba(0,240,208,.035) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,240,208,.035) 1px, transparent 1px);
  opacity: .55;
}
.adc-v3 .adc-map::after {
  background: radial-gradient(ellipse at center, transparent 22%, rgba(3,7,10,.2) 66%, rgba(2,5,8,.58) 100%);
}
.adc-v3 .adc-map .cell,
.adc-v3 .adc-map .cell.visible {
  background-color: #202b32;
  background-image: var(--asset-ground);
  background-size: cover;
  box-shadow: inset 0 0 7px rgba(2,7,10,.38);
}
.adc-v3 .adc-map .cell::before {
  background: rgba(2,6,9,.72) var(--asset-fog) center / cover;
  background-blend-mode: multiply;
  opacity: .88;
}
.adc-v3 .adc-map .cell.visible::before { opacity: .28; }
.adc-v3 .adc-map .cell.reveal {
  background-image:
    radial-gradient(circle, rgba(255,204,102,.12), transparent 66%),
    var(--asset-ground);
  background-size: cover;
  box-shadow: inset 0 0 8px rgba(255,204,102,.18);
}
.adc-v3 .adc-map .cell.reveal::before { opacity: .2; }
.adc-v3 .adc-map .cell.target-cell {
  background-image:
    radial-gradient(circle, rgba(255,204,102,.18), transparent 64%),
    var(--asset-ground);
  outline: 1px solid rgba(255,204,102,.72);
  outline-offset: -2px;
  animation: adcV3TargetPulse 1.1s ease-in-out infinite;
}
@keyframes adcV3TargetPulse {
  50% { outline-color: rgba(255,226,154,.9); box-shadow: inset 0 0 9px rgba(255,204,102,.26); }
}
.adc-v3 .adc-poison {
  background:
    radial-gradient(circle at var(--pcx) var(--pcy), transparent calc(var(--pr) - .7%), rgba(255,92,180,.42) var(--pr), transparent calc(var(--pr) + .65%)),
    radial-gradient(circle at var(--pcx) var(--pcy), transparent var(--pr), rgba(116,28,128,.25) calc(var(--pr) + 8%), rgba(72,14,86,.46) 100%);
  opacity: .74;
  animation: adcV3PoisonBreathe 4.2s ease-in-out infinite;
}
@keyframes adcV3PoisonBreathe { 50% { opacity: .62; } }

.adc-v3 .adc-hud {
  background: rgba(6,12,16,.94);
  border-color: rgba(0,240,208,.58);
}
.adc-v3.is-online .adc-hud {
  box-shadow: 0 0 10px rgba(0,240,208,.2), inset 0 0 8px rgba(0,240,208,.06);
}
.adc-v3 .adc-hud-title { text-shadow: 0 0 6px rgba(0,240,208,.42); }
.adc-v3 .adc-corner { opacity: .55; filter: none; }

.adc-v3 .adc-landing-pad {
  width: clamp(88px, 9vw, 112px);
  border-color: rgba(255,204,102,.42);
  box-shadow: 0 0 9px rgba(255,204,102,.1), inset 0 0 8px rgba(255,204,102,.08);
}
.adc-v3.is-locking .adc-landing-pad { opacity: .62; animation: adcV3PadPulse 1.25s ease-in-out infinite; }
.adc-v3.is-landed .adc-landing-pad {
  border-color: rgba(255,204,102,.45);
  box-shadow: 0 0 10px rgba(255,204,102,.14);
}
.adc-v3 .adc-landing-pad span { border-color: rgba(255,204,102,.38); }
.adc-v3 .adc-landing-pad span:nth-child(3) { width: 4px; height: 4px; box-shadow: 0 0 7px rgba(255,204,102,.7); }

.adc-v3 .adc-ground-flare {
  position: absolute;
  left: 50%;
  top: 50%;
  width: clamp(92px, 10vw, 122px);
  aspect-ratio: 2.4 / 1;
  transform: translate(-50%, 2%) scale(.5);
  z-index: 3;
  opacity: 0;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(255,232,166,.72) 0 4%, rgba(255,204,102,.26) 18%, rgba(196,132,44,.1) 46%, transparent 72%);
  transition: opacity .18s ease-out, transform .42s cubic-bezier(.16,1,.3,1);
}
.adc-v3.is-charging .adc-ground-flare,
.adc-v3.is-beaming .adc-ground-flare,
.adc-v3.is-materializing .adc-ground-flare,
.adc-v3.is-impact .adc-ground-flare,
.adc-v3.is-landed .adc-ground-flare {
  opacity: .78;
  transform: translate(-50%, 2%) scale(1);
}
.adc-v3.is-landed .adc-ground-flare { opacity: .34; }
.adc-v3.is-confirmed .adc-ground-flare {
  opacity: 0;
  transform: translate(-50%, 2%) scale(.82);
  transition: opacity .24s ease-out, transform .32s cubic-bezier(.25,1,.5,1);
}
.adc-v3 .adc-ground-flare::before,
.adc-v3 .adc-ground-flare::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  border-radius: 50%;
  transform: translate(-50%, -50%);
}
.adc-v3 .adc-ground-flare::before {
  width: 68%; height: 68%;
  border: 1px solid rgba(255,215,126,.56);
  box-shadow: 0 0 7px rgba(255,190,70,.24);
  animation: adcV3GoldRing 1.2s ease-out infinite;
}
.adc-v3 .adc-ground-flare::after {
  width: 34%; height: 34%;
  border: 1px solid rgba(255,234,180,.5);
}
.adc-v3 .adc-ground-flare i { display: none; }
@keyframes adcV3GoldRing {
  50% { transform: translate(-50%,-50%) scale(1.08); opacity: .5; }
}

.adc-v3 .adc-sky-beam {
  position: absolute;
  left: 50%;
  top: -7%;
  bottom: 48%;
  width: clamp(24px, 2.4vw, 32px);
  transform: translateX(-50%) scaleX(.18);
  transform-origin: 50% 100%;
  z-index: 2;
  opacity: 0;
  transition: opacity .1s ease-out, transform .22s cubic-bezier(.16,1,.3,1);
}
.adc-v3.is-beaming:not(.is-materializing) .adc-sky-beam {
  opacity: .92;
  transform: translateX(-50%) scaleX(1);
}
.adc-v3.is-materializing .adc-sky-beam {
  opacity: .46;
  transform: translateX(-50%) scaleX(.74);
}
.adc-v3.is-impact .adc-sky-beam { opacity: .16; transform: translateX(-50%) scaleX(.45); }
.adc-v3.is-landed .adc-sky-beam { opacity: 0; transition-duration: .16s; }
.adc-v3 .adc-beam-halo,
.adc-v3 .adc-beam-core { position: absolute; inset: 0; display: block; }
.adc-v3 .adc-beam-halo {
  background: linear-gradient(90deg, transparent, rgba(51,133,202,.18) 22%, rgba(101,194,235,.46) 50%, rgba(51,133,202,.18) 78%, transparent);
  filter: blur(5px);
  box-shadow: 0 0 12px rgba(66,154,216,.38);
  animation: adcV3BeamFlicker .18s linear infinite alternate;
}
.adc-v3 .adc-beam-core {
  left: 45%; right: 45%;
  background: #b9eaff;
  box-shadow: 0 0 5px rgba(184,235,255,.9), 0 0 9px rgba(74,160,218,.65);
}
.adc-v3 .adc-beam-impact {
  position: absolute;
  left: 50%; bottom: -5px;
  width: 120%;
  aspect-ratio: 2.5 / 1;
  transform: translateX(-50%);
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(220,247,255,.82) 0 5%, rgba(76,165,222,.38) 24%, transparent 68%);
}
@keyframes adcV3BeamFlicker { from { opacity: .78; } to { opacity: 1; } }

.adc-v3 .adc-drop {
  --land-offset: -12px;
  width: clamp(104px, 9vw, 120px);
  height: clamp(86px, 7.5vw, 100px);
  opacity: 0;
  transform: translate(-50%, -50%) translateY(var(--land-offset)) scale(.18,.9);
  filter: brightness(1.5) saturate(.55) drop-shadow(0 0 10px rgba(91,181,233,.45));
}
.adc-v3.is-materializing .adc-drop { animation: adcV3Materialize .3s cubic-bezier(.16,1,.3,1) forwards; }
@keyframes adcV3Materialize {
  0% { opacity: 0; transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(.12,.9); filter: brightness(2.2) saturate(.25) drop-shadow(0 0 14px rgba(174,230,255,.72)); }
  55% { opacity: 1; transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(.82,1.02); }
  100% { opacity: 1; transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(1); filter: drop-shadow(0 8px 7px rgba(0,0,0,.58)); }
}
.adc-v3.is-impact .adc-drop { animation: adcV3OrbitalImpact .2s cubic-bezier(.25,1,.5,1) forwards; }
@keyframes adcV3OrbitalImpact {
  0% { opacity: 1; transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(1); }
  48% { transform: translate(-50%,-50%) translateY(calc(var(--land-offset) + 2px)) scale(1.02,.97); }
  100% { opacity: 1; transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(1); }
}
.adc-v3.is-landed .adc-drop {
  opacity: 1;
  transform: translate(-50%,-50%) translateY(var(--land-offset));
  filter: drop-shadow(0 8px 7px rgba(0,0,0,.58)) drop-shadow(0 0 4px rgba(255,204,102,.18));
  animation: none;
}
.adc-v3.is-confirmed .adc-drop {
  opacity: 0;
  transform: translate(-50%,-50%) translateY(var(--land-offset)) scale(.92);
  filter: drop-shadow(0 4px 3px rgba(0,0,0,0));
  transition: opacity .24s ease-out, transform .32s cubic-bezier(.25,1,.5,1), filter .24s ease-out;
}
.adc-v3.is-confirmed .adc-landing-pad {
  opacity: 0;
  transform: translate(-50%, -4%) scale(.88);
  animation: none;
  transition: opacity .24s ease-out, transform .32s cubic-bezier(.25,1,.5,1);
}
.adc-v3 .adc-cargo { left: 50%; top: 7%; width: 84%; }
.adc-v3 .adc-cargo-front {
  background:
    linear-gradient(90deg, transparent 47%, rgba(181,213,226,.08) 50%, transparent 53%),
    linear-gradient(180deg, #354852 0 18%, #26363f 19% 54%, #19252c 100%);
  border: 1px solid #607681;
  box-shadow: inset 0 0 0 2px rgba(8,14,18,.62), inset 0 -7px 9px rgba(0,0,0,.34);
}
.adc-v3 .adc-cargo-front::before,
.adc-v3 .adc-cargo-front::after {
  height: 4px;
  background: linear-gradient(90deg, #11191e, #9c7136 16%, #c0944d 50%, #9c7136 84%, #11191e);
  border-block-color: rgba(238,204,136,.2);
}
.adc-v3 .adc-cargo-side {
  background: linear-gradient(90deg, #24333b, #10181d);
  border-color: #4c606a;
}
.adc-v3 .adc-cargo-top {
  background: linear-gradient(#465c67, #202d34);
  border-color: #657b85;
}
.adc-v3 .adc-cargo-handle { border-width: 2px; border-color: #8999a0; }
.adc-v3 .adc-cargo-beacon {
  top: 25%;
  width: 5px; height: 5px;
  box-shadow: 0 0 6px rgba(0,240,208,.75);
}
.adc-v3 .adc-cargo-mark {
  color: #f1d08a;
  font-size: 11px;
  letter-spacing: .02em;
  text-shadow: 0 1px 2px #000;
}
.adc-v3 .adc-cargo-code { margin-top: 3px; color: #b7c3c8; font-size: 5px; letter-spacing: .08em; }
.adc-v3 .adc-cargo-band { width: 4px; background: rgba(11,17,20,.72); border-inline-color: rgba(204,166,91,.18); }
.adc-v3 .adc-shadow {
  bottom: 2%;
  width: 58%; height: 6%;
  opacity: .7;
  animation: none;
  filter: blur(2px);
}
.adc-v3 .adc-impact { top: 82%; width: 76px; height: 30px; border-width: 1px; }
.adc-v3.is-impact .adc-impact { animation: adcV3ImpactRing .42s ease-out forwards; }
.adc-v3 .adc-dust { top: 79%; height: 11%; }
.adc-v3 .adc-dust i { background: radial-gradient(ellipse, rgba(128,145,151,.24), transparent 70%); }
.adc-v3.is-impact .adc-dust i { animation-duration: .42s; }

@media (max-width: 600px) {
  .adc-v3 .adc-hud { min-height: 64px; padding: 7px 12px; }
  .adc-v3 .adc-hud-title { font-size: 12px; }
  .adc-v3 .adc-stage,
  .adc-v3 .adc-drop-layer { inset: 76px 0 62px; }
  .adc-v3 .adc-drop { --land-offset: -10px; width: 94px; height: 80px; }
  .adc-v3 .adc-ground-flare { width: 96px; }
  .adc-v3 .adc-landing-pad { width: 90px; }
  .adc-v3 .adc-sky-beam { width: 22px; bottom: 48%; }
  .adc-v3 .adc-cargo-mark { font-size: 10px; }
  .adc-v3 .adc-caption { min-height: 44px; padding-block: 5px; }
}

@media (prefers-reduced-motion: reduce) {
  .adc-v3.is-materializing .adc-drop,
  .adc-v3.is-impact .adc-drop,
  .adc-v3.is-landed .adc-drop {
    opacity: 1;
    transform: translate(-50%,-50%) translateY(var(--land-offset));
    filter: drop-shadow(0 8px 7px rgba(0,0,0,.58));
  }
}

/* === Match workspace v3: adaptive map, synchronized actions and broadcast view === */
.game-layout.match-workspace {
  grid-template-columns: minmax(220px, 260px) minmax(0, 1fr) minmax(250px, 310px);
  min-height: calc(100dvh - 62px);
  padding: 12px;
  gap: 12px;
}
.match-workspace > main {
  min-width: 0;
  display: grid;
  grid-template-rows: auto auto minmax(460px, 1fr);
  gap: 8px;
}
.match-workspace .game-side {
  max-height: calc(100dvh - 86px);
  padding: 12px;
}
.match-workspace .map-wrap,
.live-map-wrap {
  position: relative;
  min-width: 0;
  min-height: 460px;
  height: 100%;
  max-height: none;
  padding: 0;
  overflow: hidden;
  border: 1px solid rgba(99, 125, 146, .34);
  background: #080d11;
  clip-path: none;
}
.match-workspace #map-host,
.live-map-wrap #map-host { width: 100%; height: 100%; min-height: inherit; }
.full-map-wrap { height: min(72dvh, 820px); min-height: 520px; max-height: none; padding: 0; overflow: hidden; clip-path: none; }
.full-map-wrap #map-host { width: 100%; height: 100%; }
.map-camera {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: inherit;
  overflow: hidden;
  touch-action: none;
  user-select: none;
  background: #11171c;
  outline: none;
  cursor: grab;
  isolation: isolate;
}
.map-camera:active { cursor: grabbing; }
.map-camera:focus-visible { box-shadow: inset 0 0 0 2px var(--cyan); }
.map-world.map-grid {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  padding: 0;
  border: 0;
  background: #1a2329;
  transform-origin: 0 0;
  will-change: transform;
  box-shadow: 0 0 0 1px rgba(136, 160, 176, .24);
}
.map-camera.is-refocusing .map-world { transition: transform .28s cubic-bezier(.23, 1, .32, 1); }
.map-cell-layer,
.map-effect-layer,
.map-entity-layer { position: absolute; inset: 0; pointer-events: none; }
.map-cell-layer { z-index: 1; }
.map-effect-layer { z-index: 4; }
.map-entity-layer { z-index: 5; }
.map-world .cell {
  position: absolute;
  left: 0;
  top: 0;
  width: var(--cell);
  height: var(--cell);
  pointer-events: auto;
  will-change: transform;
}
.map-world .cell.invalid-boundary {
  visibility: visible;
  opacity: 1;
  cursor: not-allowed;
  background: #0d1216;
  background-image: none;
  box-shadow: inset 0 0 0 1px rgba(105, 121, 132, .08);
}
.map-world .cell.invalid-boundary.unexplored-boundary {
  cursor: default;
  background-color: #070b0e;
  background-image: var(--asset-fog);
  background-size: cover;
  box-shadow: none;
  filter: none;
}
.map-world .cell.fog {
  background-color: #070b0e;
  background-blend-mode: multiply;
  filter: none;
}
.map-world .cell.battle-wall {
  box-shadow: inset 0 0 0 3px rgba(255, 85, 119, .82), inset 0 0 18px rgba(255, 85, 119, .32);
}
.map-world .cell.battle-wall::before {
  content: '';
  position: absolute;
  inset: 7px;
  z-index: 3;
  border: 1px solid rgba(255, 218, 224, .78);
  transform: rotate(45deg);
  pointer-events: none;
}
.map-controls {
  position: absolute;
  z-index: 20;
  right: 12px;
  top: 12px;
  display: grid;
  grid-template-columns: repeat(4, 42px);
  gap: 6px;
  padding: 5px;
  background: rgba(7, 12, 16, .9);
  border: 1px solid rgba(99, 125, 146, .44);
}
.map-controls button {
  width: 42px;
  height: 42px;
  padding: 0;
  justify-content: center;
  clip-path: none;
  font-size: 20px;
  line-height: 1;
  text-transform: none;
}
.map-controls .map-quality-trigger {
  font-size: 11px;
  font-weight: 800;
}
.map-quality-panel,
.map-quality-notice {
  position: absolute;
  z-index: 22;
  right: 12px;
  top: 66px;
  width: min(310px, calc(100% - 24px));
  padding: 12px;
  color: #edf4f5;
  background: rgba(7, 12, 16, .96);
  border: 1px solid rgba(99, 125, 146, .58);
  user-select: none;
}
.map-quality-panel[hidden],
.map-quality-notice[hidden] { display: none !important; }
.map-quality-panel__title,
.map-quality-notice__title {
  margin-bottom: 9px;
  color: #edf4f5;
  font-size: 12px;
  font-weight: 800;
}
.map-quality-options {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  padding: 1px;
  background: rgba(99, 125, 146, .5);
}
.map-quality-options button {
  width: auto;
  min-width: 0;
  min-height: 36px;
  padding: 7px 8px;
  color: #cad5da;
  background: #111a20;
  border: 0;
  clip-path: none;
  font-size: 11px;
}
.map-quality-options button.is-selected {
  color: #04110f;
  background: #35c7bc;
}
.map-quality-auto,
.map-quality-notice label {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 36px;
  margin-top: 8px;
  color: #c3d0d5;
  font-size: 11px;
}
.map-quality-auto input,
.map-quality-notice input { accent-color: #35c7bc; }
.map-quality-notice p {
  margin: 0;
  color: #c3d0d5;
  font-size: 11px;
  line-height: 1.6;
}
.map-quality-notice > button {
  width: 100%;
  min-height: 38px;
  margin-top: 8px;
  color: #04110f;
  background: #35c7bc;
  border: 0;
  clip-path: none;
}
.map-readout {
  position: absolute;
  z-index: 20;
  left: 12px;
  bottom: 10px;
  max-width: calc(100% - 24px);
  padding: 5px 9px;
  color: #aab8c2;
  background: rgba(7, 12, 16, .86);
  border: 1px solid rgba(99, 125, 146, .34);
  font-size: 10px;
  font-variant-numeric: tabular-nums;
  pointer-events: none;
}
.map-entity {
  position: absolute;
  left: 0;
  top: 0;
  width: var(--cell);
  height: var(--cell);
  display: grid;
  place-items: center;
  pointer-events: none;
  transition-property: transform;
  will-change: transform;
}
.map-entity .entity-ring {
  position: relative;
  width: 78%;
  height: 78%;
  display: block;
  border-radius: 50%;
  border: 3px solid var(--team-color, #35c7bc);
  background: #10171c;
  box-shadow: 0 0 0 2px rgba(4, 8, 11, .9), 0 3px 10px rgba(0, 0, 0, .58);
  overflow: visible;
}
.map-entity img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  border-radius: 50%;
  background: #1c272e;
}
.map-entity i {
  position: absolute;
  right: -5px;
  bottom: -4px;
  min-width: 15px;
  height: 15px;
  padding: 0 3px;
  display: grid;
  place-items: center;
  border-radius: 8px;
  color: #f4f7f9;
  background: #11191e;
  border: 1px solid var(--team-color, #35c7bc);
  font: 700 8px/1 var(--font-body);
  font-style: normal;
}
.map-entity.is-me .entity-ring { box-shadow: 0 0 0 2px #ecf7f5, 0 0 14px var(--team-color, #35c7bc); }
.map-entity.is-fighting .entity-ring { animation: fightingSignal 1s steps(2, end) infinite; }
.map-entity.is-dead { opacity: .34; filter: grayscale(1); }
.map-entity.is-knockback { z-index: 8; }
@keyframes fightingSignal { 50% { border-color: #ff5577; box-shadow: 0 0 12px rgba(255,85,119,.72); } }
.entity-damage {
  position: absolute;
  left: 50%;
  top: -8px;
  z-index: 12;
  color: #ff7a91;
  font: 800 13px/1 var(--font-display);
  text-shadow: 0 2px 6px #000;
  animation: entityDamage .72s cubic-bezier(.23, 1, .32, 1) forwards;
}
@keyframes entityDamage {
  from { opacity: 0; transform: translate(-50%, 8px) scale(.9); }
  22% { opacity: 1; }
  to { opacity: 0; transform: translate(-50%, -22px) scale(1.08); }
}
.map-impact {
  position: absolute;
  left: 0;
  top: 0;
  width: var(--cell);
  height: var(--cell);
  border: 3px solid rgba(255, 112, 136, .95);
  box-shadow: 0 0 20px rgba(255, 85, 119, .72), inset 0 0 14px rgba(255, 85, 119, .5);
  animation: mapImpact .5s cubic-bezier(.2,.8,.2,1) forwards;
}
.map-impact.is-surprise { border-color: #ffcc66; box-shadow: 0 0 20px rgba(255,204,102,.72); }
@keyframes mapImpact {
  from { opacity: 1; scale: .35; rotate: 0deg; }
  to { opacity: 0; scale: 1.7; rotate: 45deg; }
}
.map-camera.has-impact { animation: mapCameraImpact .24s linear; }
@keyframes mapCameraImpact {
  25% { translate: -2px 1px; }
  50% { translate: 2px -1px; }
  75% { translate: -1px 0; }
}

.player-vitals {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
}
.vital-slot {
  min-width: 0;
  min-height: 58px;
  padding: 8px 10px;
  background: var(--bg-card);
  border: 1px solid var(--border);
}
.vital-slot .label {
  display: block;
  color: var(--text-muted);
  font-size: 10px;
  line-height: 1.2;
}
.vital-slot .value {
  display: block;
  margin-top: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--text);
  font: 700 17px/1.2 var(--font-display);
  font-variant-numeric: tabular-nums;
}
.vital-slot.is-hp .value { color: #ff8297; }
.vital-slot.is-coin .value { color: #f0c768; }
.inventory-slot { grid-column: span 2; }
.inventory-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 5px; }
.inventory-tags .tag { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.inventory-actions {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(152px, 100%), 1fr));
  gap: 6px;
  margin-top: 8px;
}
.inventory-card-action {
  width: 100%;
  min-width: 0;
  min-height: 44px;
  height: auto;
  padding: 7px 10px;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: 1px;
  color: var(--text);
  background: color-mix(in srgb, var(--cyan) 7%, var(--bg-soft));
  border-color: color-mix(in srgb, var(--cyan) 42%, var(--border));
  clip-path: none;
  text-align: left;
  text-transform: none;
  letter-spacing: 0;
}
.inventory-card-action.is-battle {
  background: color-mix(in srgb, var(--pink) 8%, var(--bg-soft));
  border-color: color-mix(in srgb, var(--pink) 48%, var(--border));
}
.inventory-card-action:focus-visible {
  outline: 2px solid var(--cyan);
  outline-offset: 2px;
}
.inventory-card-action__label {
  max-width: 100%;
  overflow-wrap: anywhere;
  font-size: 12px;
  font-weight: 700;
  line-height: 1.3;
}
.inventory-card-action__meta {
  max-width: 100%;
  overflow: hidden;
  color: var(--text-muted);
  font-size: 10px;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.inventory-card-action:hover .inventory-card-action__meta { color: var(--text); }
.player-effect-strip {
  grid-column: span 2;
  display: flex;
  align-items: stretch;
  flex-wrap: wrap;
  gap: 6px 12px;
  min-width: 0;
  min-height: 58px;
  padding: 8px 10px;
  background: var(--bg-card);
  border: 1px solid var(--border);
}
.player-effect {
  flex: 1 1 132px;
  display: flex;
  align-items: center;
  min-width: 0;
  gap: 7px;
}
.player-effect__signal {
  flex: 0 0 auto;
  width: 8px;
  height: 8px;
  background: var(--cyan);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--cyan) 16%, transparent);
}
.player-effect.is-regen .player-effect__signal { background: var(--green); box-shadow: 0 0 0 3px color-mix(in srgb, var(--green) 16%, transparent); }
.player-effect.is-immune .player-effect__signal { background: var(--gold); box-shadow: 0 0 0 3px color-mix(in srgb, var(--gold) 16%, transparent); }
.player-effect.is-locked .player-effect__signal { background: var(--pink); box-shadow: 0 0 0 3px color-mix(in srgb, var(--pink) 16%, transparent); }
.player-effect__copy { display: grid; min-width: 0; line-height: 1.25; letter-spacing: 0; }
.player-effect__copy b { overflow-wrap: anywhere; color: var(--text); font-size: 11px; }
.player-effect__copy small { color: var(--text-muted); font-size: 10px; font-variant-numeric: tabular-nums; }

.card-rescue-modal {
  width: min(460px, calc(100% - 24px));
  padding: 20px;
  border-color: color-mix(in srgb, var(--gold) 70%, var(--border));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--gold) 18%, transparent), 0 6px 8px rgba(0,0,0,.24);
  animation: cardRescueEnter .18s cubic-bezier(.23, 1, .32, 1);
}
@keyframes cardRescueEnter {
  from { opacity: 0; transform: translateY(8px) scale(.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
.card-rescue-kicker {
  margin-bottom: 12px;
  color: var(--gold);
  font: 700 11px/1.2 var(--font-display);
  letter-spacing: 0;
}
.card-rescue-player {
  display: grid;
  grid-template-columns: 58px minmax(0, 1fr);
  align-items: center;
  gap: 12px;
}
.card-rescue-player img {
  width: 58px;
  height: 58px;
  object-fit: cover;
  background: var(--bg-soft) var(--asset-avatar-placeholder) center / cover no-repeat;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text) 12%, transparent);
}
.card-rescue-player span { color: var(--text-muted); font-size: 11px; letter-spacing: 0; }
.card-rescue-player h3 {
  margin: 3px 0 0;
  overflow-wrap: anywhere;
  color: var(--text);
  font-size: 18px;
  line-height: 1.3;
  letter-spacing: 0;
  text-wrap: balance;
}
.card-rescue-modal p {
  margin: 16px 0 12px;
  color: var(--text-muted);
  line-height: 1.65;
  letter-spacing: 0;
  text-wrap: pretty;
}
.card-rescue-modal p b { color: var(--text); }
.card-rescue-cost {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  color: var(--gold);
  background: color-mix(in srgb, var(--gold) 9%, var(--bg-soft));
  border: 1px solid color-mix(in srgb, var(--gold) 38%, var(--border));
  font-size: 12px;
  letter-spacing: 0;
}
.card-rescue-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 16px;
}
.card-rescue-actions button {
  width: 100%;
  min-width: 0;
  min-height: 44px;
  height: auto;
  padding: 8px 10px;
  justify-content: center;
  text-transform: none;
  letter-spacing: 0;
  line-height: 1.3;
}
.card-rescue-actions button:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.card-rescue-feedback { min-height: 20px; margin-top: 6px; text-align: center; letter-spacing: 0; }

@media (max-width: 420px) {
  .inventory-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .inventory-card-action { padding-inline: 8px; }
  .player-effect { flex-basis: 100%; }
  .card-rescue-modal { padding: 16px; }
  .card-rescue-player { grid-template-columns: 50px minmax(0, 1fr); gap: 10px; }
  .card-rescue-player img { width: 50px; height: 50px; }
  .card-rescue-player h3 { font-size: 16px; }
}

@media (max-width: 340px) {
  .inventory-actions,
  .card-rescue-actions { grid-template-columns: minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  .card-rescue-modal { animation: none; }
  .inventory-card-action,
  .card-rescue-actions button { transition-duration: .01ms !important; }
  .inventory-card-action::after,
  .card-rescue-actions button::after { display: none; }
}

.turn-shade,
.actor-switch {
  position: absolute;
  inset: 0;
  z-index: 30;
  display: grid;
  place-items: center;
  padding: 24px;
  text-align: center;
  pointer-events: none;
}
.turn-shade {
  background: rgba(5, 9, 12, .56);
  animation: turnShadePulse 2.2s ease-in-out infinite;
}
@keyframes turnShadePulse {
  0%, 100% { opacity: .9; }
  50% { opacity: .34; }
}
.turn-shade__content,
.actor-switch__content {
  max-width: min(420px, 90%);
  padding: 18px 22px;
  color: #edf4f5;
  background: rgba(7, 12, 16, .9);
  border: 1px solid rgba(87, 196, 186, .52);
  box-shadow: 0 12px 34px rgba(0,0,0,.4);
}
.turn-shade__logo,
.actor-switch__logo {
  color: var(--cyan);
  font: 800 18px/1 var(--font-display);
}
.turn-shade__title,
.actor-switch__title { margin-top: 10px; font-weight: 700; }
.turn-shade__meta,
.actor-switch__meta { margin-top: 5px; color: #b8c2c7; font-size: 12px; }
.actor-switch { background: rgba(5, 9, 12, .88); }
.actor-switch__content { animation: actorSwitchIn .42s cubic-bezier(.23,1,.32,1); }
@keyframes actorSwitchIn {
  from { opacity: 0; transform: translateY(12px) scale(.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

.admin-action-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.admin-action-bar button,
.admin-action-bar .btn { min-width: 42px; justify-content: center; }
.score-correction { display: grid; gap: 8px; }
.score-correction .field { margin: 0; }
.score-correction select,
.score-correction input { width: 100%; }
.score-modal-open { overflow: hidden; }
.score-entry-launcher {
  display: grid;
  gap: 8px;
  padding: 12px;
  background: var(--bg-soft);
  border: 1px solid var(--border);
}
.score-entry-launcher__summary {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}
.score-entry-launcher__summary span { color: var(--text-muted); font-size: 11px; }
.score-entry-launcher__summary strong {
  color: var(--cyan);
  font: 700 17px/1 var(--font-display);
  font-variant-numeric: tabular-nums;
}
.score-entry-launcher p { margin: 0; color: var(--text-muted); font-size: 11px; line-height: 1.55; }
.score-entry-launcher button { width: 100%; justify-content: center; }

.score-batch-backdrop {
  padding: 24px;
  animation: scoreBackdropIn .18s cubic-bezier(.23, 1, .32, 1);
}
.score-batch-modal {
  display: grid;
  grid-template-areas:
    "header"
    "progress"
    "error"
    "players"
    "footer";
  grid-template-rows: auto auto auto minmax(0, 1fr) auto;
  grid-template-columns: minmax(0, 1fr);
  width: min(1120px, calc(100vw - 48px));
  max-width: 1120px;
  height: min(88dvh, 840px);
  max-height: calc(100dvh - 48px);
  padding: 0;
  overflow: hidden;
  border-color: var(--border-strong);
  box-shadow: none;
  animation: scoreModalIn .2s cubic-bezier(.23, 1, .32, 1);
}
.score-batch-header {
  grid-area: header;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 20px 24px 16px;
  background: var(--bg-card);
  border-bottom: 1px solid var(--border);
}
.score-batch-header > div { min-width: 0; }
.score-batch-header h2 {
  margin: 0;
  color: var(--text);
  font-size: 18px;
  letter-spacing: 0;
  text-wrap: balance;
}
.score-batch-header p {
  max-width: 68ch;
  margin: 4px 0 0;
  color: var(--text-muted);
  font-size: 12px;
  line-height: 1.5;
  text-wrap: pretty;
}
.score-batch-header button { flex: 0 0 auto; }
.score-batch-progress {
  grid-area: progress;
  display: grid;
  grid-template-columns: auto minmax(180px, 1fr);
  align-items: center;
  gap: 16px;
  padding: 12px 24px;
  background: var(--bg-soft);
  border-bottom: 1px solid var(--border);
}
.score-batch-progress strong {
  min-width: 132px;
  color: var(--cyan);
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.score-progress-track {
  height: 6px;
  overflow: hidden;
  background: var(--border);
}
.score-progress-track span {
  display: block;
  width: 0;
  height: 100%;
  background: var(--cyan);
}
.score-batch-error {
  grid-area: error;
  margin: 12px 24px 0;
  padding: 10px 12px;
  color: var(--red);
  background: color-mix(in srgb, var(--red) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--red) 38%, transparent);
  font-size: 12px;
  line-height: 1.5;
}
.score-batch-error:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }
.score-batch-scroll {
  grid-area: players;
  min-width: 0;
  min-height: 0;
  margin: 12px 24px 14px;
  padding: 0 0 12px;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
  background: var(--bg-card);
  border: 1px solid var(--border);
}
.score-batch-scroll:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
.score-team-group { min-width: 0; }
.score-team-group + .score-team-group { border-top: 1px solid var(--border-strong); }
.score-team-heading {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 0 8px;
}
.score-team-heading h3 {
  margin: 0;
  color: var(--cyan);
  font-size: 14px;
  letter-spacing: 0;
}
.score-team-heading span { color: var(--text-muted); font-size: 11px; }
.score-batch-columns,
.score-batch-row {
  display: grid;
  grid-template-columns: minmax(210px, 1.75fr) minmax(96px, .8fr) minmax(116px, .9fr) minmax(104px, .8fr) minmax(88px, .6fr);
  gap: 12px;
  align-items: center;
}
.score-batch-columns {
  min-height: 28px;
  padding: 0 12px;
  color: var(--text-muted);
  background: var(--bg-soft);
  font-size: 10px;
}
.score-batch-row {
  min-width: 0;
  min-height: 68px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
}
.score-batch-row:last-child { border-bottom: 0; }
.score-batch-row.is-complete { background: color-mix(in srgb, var(--green) 6%, transparent); }
.score-batch-row.is-invalid { background: color-mix(in srgb, var(--red) 9%, transparent); }
.score-batch-row.is-dead { opacity: .58; }
.score-batch-row.is-skipped .score-batch-field { opacity: .56; }
.score-player-identity {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.score-player-identity img {
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  object-fit: cover;
  background: var(--bg-soft);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.1);
}
:root[data-theme="light"] .score-player-identity img { box-shadow: inset 0 0 0 1px rgba(0,0,0,.1); }
.score-player-copy { display: grid; min-width: 0; line-height: 1.35; }
.score-player-copy strong {
  overflow: hidden;
  color: var(--text);
  font-size: 13px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.score-player-copy span { color: var(--text-muted); font-size: 10.5px; }
.score-player-copy .score-player-state { color: var(--text-dim); }
.score-batch-row.is-complete .score-player-state { color: var(--green); }
.score-batch-row.is-invalid .score-player-state { color: var(--red); }
.score-batch-field {
  display: block;
  min-width: 0;
  margin: 0;
}
.score-batch-field__label {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}
.score-batch-field input,
.score-batch-field select { width: 100%; }
.score-batch-field [aria-invalid="true"] {
  border-color: var(--red);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--red) 18%, transparent);
}
.score-skip-cell { min-width: 0; }
.score-skip-toggle {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin: 0;
  color: var(--text-muted);
  cursor: pointer;
  font-size: 12px;
  letter-spacing: 0;
  text-transform: none;
}
.score-skip-toggle:hover { color: var(--text); }
.score-skip-toggle input { flex: 0 0 16px; }
.score-dead-label {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  color: var(--text-muted);
  font-size: 11px;
}
.score-batch-footer {
  grid-area: footer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 14px 24px;
  background: var(--bg-card);
  border-top: 1px solid var(--border-strong);
}
.score-batch-footer p { margin: 0; color: var(--text-muted); font-size: 11px; }
.score-batch-footer button { min-width: 240px; justify-content: center; }
.score-batch-modal button:focus-visible,
.score-batch-modal input:focus-visible,
.score-batch-modal select:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
@keyframes scoreBackdropIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes scoreModalIn {
  from { opacity: 0; transform: translateY(8px) scale(.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
/* Stack the score form before its five desktop columns reach their minimum width. */
@media (max-width: 800px) {
  .score-batch-backdrop { align-items: stretch; padding: 8px; }
  .score-batch-modal {
    width: 100%;
    height: calc(100dvh - 16px);
    max-height: calc(100dvh - 16px);
  }
  .score-batch-header { align-items: flex-start; gap: 12px; padding: 16px 14px 12px; }
  .score-batch-header h2 { font-size: 16px; }
  .score-batch-header p { font-size: 11px; }
  .score-batch-header button { min-height: 44px; padding-inline: 12px; }
  .score-batch-progress {
    grid-template-columns: minmax(0, 1fr);
    gap: 8px;
    padding: 10px 14px;
  }
  .score-batch-progress strong { min-width: 0; }
  .score-batch-error { margin: 10px 14px 0; }
  .score-batch-scroll { margin: 8px 14px 10px; padding: 0 0 10px; }
  .score-team-heading { align-items: flex-start; padding-top: 16px; }
  .score-team-heading span { text-align: right; }
  .score-batch-columns { display: none; }
  .score-batch-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px 8px;
    padding: 12px 0;
  }
  .score-player-identity { grid-column: 1 / -1; }
  .score-batch-field__label {
    position: static;
    display: block;
    width: auto;
    height: auto;
    margin-bottom: 4px;
    overflow: visible;
    clip: auto;
    color: var(--text-muted);
    font-size: 10px;
    line-height: 1.3;
    white-space: normal;
  }
  .score-batch-field input,
  .score-batch-field select { height: 44px; }
  .score-skip-cell { align-self: end; }
  .score-skip-toggle,
  .score-dead-label { min-height: 44px; }
  .score-batch-footer {
    align-items: stretch;
    flex-direction: column;
    gap: 8px;
    padding: 12px 14px max(12px, env(safe-area-inset-bottom));
  }
  .score-batch-footer button { width: 100%; min-width: 0; min-height: 44px; }
}
@media (max-width: 420px) {
  .score-batch-header { display: grid; }
  .score-batch-header button { width: 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .score-batch-backdrop,
  .score-batch-modal { animation: none; }
}
.pause-state { color: var(--gold); font-weight: 700; }

.live-body { overflow: hidden; background: #05090c; }
.live-shell { position: fixed; inset: 0; background: #05090c; color: #edf3f5; }
.match-workspace,
.match-workspace *,
.live-shell,
.live-shell * { letter-spacing: 0; }
.live-map-wrap { position: absolute; inset: 0; min-height: 100%; border: 0; opacity: 1; transition: opacity .22s ease-out; }
.live-shell .map-controls,
.live-shell .map-readout,
.live-shell .map-quality-panel,
.live-shell .map-quality-notice { display: none; }
.live-shell.is-transitioning .live-map-wrap,
.live-shell.is-idle .live-map-wrap { opacity: 0; pointer-events: none; }
.live-actor-transition {
  position: absolute;
  inset: 0;
  z-index: 40;
  display: grid;
  place-items: center;
  background: #05090c;
  opacity: 0;
  pointer-events: none;
  transition: opacity .18s ease-out;
}
.live-shell.is-transitioning .live-actor-transition,
.live-shell.is-idle .live-actor-transition { opacity: 1; }
.live-actor-card { display: grid; justify-items: center; gap: 10px; animation: actorSwitchIn .42s cubic-bezier(.23,1,.32,1); }
.live-actor-card img { width: 78px; height: 78px; border-radius: 50%; object-fit: cover; border: 3px solid var(--live-team, #35c7bc); }
.live-actor-card strong { font: 700 22px/1.2 var(--font-display); }
.live-actor-card span { color: #8fa0aa; font-size: 12px; }
.live-hp {
  position: absolute;
  z-index: 45;
  left: max(16px, env(safe-area-inset-left));
  top: max(16px, env(safe-area-inset-top));
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 154px;
  padding: 9px 12px;
  background: rgba(5, 10, 13, .88);
  border: 1px solid rgba(255, 112, 136, .5);
  transition: opacity .18s ease-out;
}
.live-shell.is-transitioning .live-hp,
.live-shell.is-idle .live-hp { opacity: 0; }
.live-hp b { color: #ff8297; font: 800 20px/1 var(--font-display); font-variant-numeric: tabular-nums; }
.live-hp span { color: #9aaab4; font-size: 10px; }
:root[data-theme="light"] .live-body,
:root[data-theme="light"] .live-shell,
:root[data-theme="light"] .live-actor-transition {
  background: var(--bg);
  color: var(--text);
}
:root[data-theme="light"] .live-actor-card span,
:root[data-theme="light"] .live-hp span { color: var(--text-muted); }
:root[data-theme="light"] .live-hp {
  background: rgba(255,255,255,.9);
  border-color: rgba(180,35,72,.35);
}

@media (max-width: 1100px) {
  .game-layout.match-workspace { grid-template-columns: minmax(0, 1fr) 280px; }
  .match-workspace > .game-side:first-child { grid-column: 1 / -1; max-height: none; }
  .match-workspace > main { grid-column: 1; grid-row: 2; }
  .match-workspace > .game-side:last-child { grid-column: 2; grid-row: 2; }
}

@media (max-width: 900px) {
  .game-layout.match-workspace {
    display: flex;
    flex-direction: column;
    min-height: 100dvh;
    padding: 8px;
  }
  .match-workspace > main { order: -1; display: grid; grid-template-rows: auto auto minmax(58dvh, 1fr); }
  .match-workspace .game-side { max-height: none; }
  .match-workspace .map-wrap { min-height: 58dvh; height: 58dvh; }
  .player-vitals { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .inventory-slot { grid-column: 1 / -1; }
  .map-controls { right: 8px; top: 8px; grid-template-columns: repeat(4, 40px); }
  .map-controls button { width: 40px; height: 40px; }
  .map-quality-panel, .map-quality-notice { right: 8px; top: 58px; width: min(310px, calc(100% - 16px)); }
  .map-readout { left: 8px; bottom: 7px; }
  .turn-shade, .actor-switch { padding: 14px; }
  .turn-shade__content, .actor-switch__content { padding: 14px 16px; }
  .topbar {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    width: 100%;
    padding: 10px 12px 0;
    gap: 7px 9px;
  }
  .topbar .right { grid-column: 2 / 4; min-width: 0; justify-self: end; }
  .topbar .right .muted { max-width: 128px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .topbar .nav {
    grid-column: 1 / -1;
    grid-row: 2;
    flex-wrap: nowrap;
    width: calc(100% + 24px);
    margin-left: -12px;
    padding: 7px 12px;
    overflow-x: auto;
    border-top: 1px solid var(--border);
  }
  .topbar .nav a { flex: 0 0 auto; }
}

@media (prefers-reduced-motion: reduce) {
  .map-entity,
  .map-world,
  .live-map-wrap,
  .live-actor-transition { transition-duration: .01ms !important; }
  .turn-shade,
  .map-entity.is-fighting .entity-ring { animation: none !important; }
}

/* === Match workspace v3.1: authoritative zones, sharp zoom and team broadcast rail === */
:root {
  --collapse-dark-bg: #06090b;
  --collapse-light-bg: #bfc5c9;
  --collapse-dark-texture: url('/assets/themes/dark/tiles/ground.png');
  --collapse-light-texture: url('/assets/themes/light/tiles/ground.png');
  --collapse-dark-filter: brightness(.72) contrast(1.08) saturate(.78);
  --collapse-light-filter: brightness(.86) contrast(1.04) saturate(.72);
  --map-barrier-core: #f20f43;
  --map-barrier-hot: #ffb3c4;
  --map-barrier-glow: rgba(255, 38, 83, .92);
  --boss-domain-line: #ef8cff;
  --boss-domain-fill: rgba(226, 89, 255, .2);
  --map-route-fill: rgba(0, 230, 200, .2);
  --map-route-line: #00e6c8;
}
:root[data-theme="light"] {
  --collapse-dark-bg: #252b30;
  --collapse-light-bg: #f5f7f8;
  --collapse-dark-filter: brightness(.94) contrast(1.08) saturate(.82);
  --collapse-light-filter: brightness(1.05) contrast(1.05) saturate(.8);
  --map-barrier-core: #d80d43;
  --map-barrier-hot: #fff0f4;
  --map-barrier-glow: rgba(216, 13, 67, .72);
  --boss-domain-line: #6f2dbd;
  --boss-domain-fill: rgba(111, 45, 189, .2);
  --map-route-fill: rgba(0, 94, 220, .2);
  --map-route-line: #005edc;
}
.map-camera.is-camera-locked { cursor: default; }
.map-camera.is-camera-locked:active { cursor: default; }
.map-world.is-hires .cell {
  background-size: 100% 100%;
  image-rendering: auto;
}
.map-camera[data-map-quality="high"] .map-world.is-hires .cell:not(.fog):not(.poison):not(.invalid-boundary) {
  filter: contrast(1.06) saturate(1.03);
}

.map-world .cell.invalid-boundary.collapse-dark {
  background-color: var(--collapse-dark-bg);
  background-image: var(--collapse-dark-texture);
  background-repeat: no-repeat;
  filter: var(--collapse-dark-filter);
}
.map-world .cell.invalid-boundary.collapse-light {
  background-color: var(--collapse-light-bg);
  background-image: var(--collapse-light-texture);
  background-repeat: no-repeat;
  filter: var(--collapse-light-filter);
}
.map-world .cell.invalid-boundary.collapse-pattern-0 { background-position: 0 0; background-size: 100% 100%; }
.map-world .cell.invalid-boundary.collapse-pattern-1 { background-position: 7px -5px; background-size: 82% 118%; }
.map-world .cell.invalid-boundary.collapse-pattern-2 { background-position: -6px 9px; background-size: 124% 76%; }
.map-world .cell.invalid-boundary.collapse-pattern-3 { background-position: 10px 4px; background-size: 138% 92%; }

.map-camera[data-map-quality="low"] .map-world .cell,
.map-camera[data-map-quality="low"] .map-entity { will-change: auto; }
.map-camera[data-map-quality="low"] .map-barrier-segment { box-shadow: none; }
.map-camera[data-map-quality="low"] .map-barrier-segment::after { display: none; }
.map-camera[data-map-quality="low"] .map-grid .cell.poison::after,
.map-camera[data-map-quality="low"] .map-grid .cell.poison-edge,
.map-camera[data-map-quality="low"] .map-grid .cell.airdrop-beacon,
.map-camera[data-map-quality="low"] .map-entity.is-fighting .entity-ring,
.map-camera[data-map-quality="low"].has-impact { animation: none; }

.map-world .cell.map-barrier { z-index: 3; overflow: visible; }
.map-barrier-segment {
  position: absolute;
  z-index: 6;
  overflow: hidden;
  pointer-events: none;
  background: var(--map-barrier-core);
  box-shadow: 0 0 var(--map-barrier-glow-size, 10px) var(--map-barrier-glow);
}
.map-barrier-segment--n,
.map-barrier-segment--s {
  left: 0;
  width: 100%;
  height: var(--map-barrier-width, 6px);
}
.map-barrier-segment--n { top: 0; transform: translateY(-50%); }
.map-barrier-segment--s { bottom: 0; transform: translateY(50%); }
.map-barrier-segment--e,
.map-barrier-segment--w {
  top: 0;
  width: var(--map-barrier-width, 6px);
  height: 100%;
}
.map-barrier-segment--e { right: 0; transform: translateX(50%); }
.map-barrier-segment--w { left: 0; transform: translateX(-50%); }
.map-barrier-segment::after {
  content: '';
  position: absolute;
  pointer-events: none;
  animation-delay: var(--map-barrier-delay, 0s);
}
.map-barrier-segment--n::after,
.map-barrier-segment--s::after {
  inset: 0 auto 0 0;
  width: 52%;
  background: linear-gradient(90deg, transparent, var(--map-barrier-hot) 44% 56%, transparent);
  animation: mapBarrierFlowX 1.84s linear infinite;
  animation-delay: var(--map-barrier-delay, 0s);
}
.map-barrier-segment--e::after,
.map-barrier-segment--w::after {
  inset: 0 0 auto;
  height: 52%;
  background: linear-gradient(180deg, transparent, var(--map-barrier-hot) 44% 56%, transparent);
  animation: mapBarrierFlowY 1.84s linear infinite;
  animation-delay: var(--map-barrier-delay, 0s);
}
@keyframes mapBarrierFlowX {
  from { transform: translateX(-110%); }
  to { transform: translateX(215%); }
}
@keyframes mapBarrierFlowY {
  from { transform: translateY(-110%); }
  to { transform: translateY(215%); }
}

.map-world .cell.boss-domain { background-color: transparent; }
.map-world .cell .zone-overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}
.map-world .cell .zone-overlay--boss { background: var(--boss-domain-fill); }
.map-world .cell .zone-overlay--boss-core { background: var(--boss-domain-fill); }
.map-world .cell.boss-domain .icon { z-index: 2; }
.map-world .cell.chest-domain { background-color: rgba(240, 190, 92, .07); background-blend-mode: screen; }
.map-world .cell.boss-edge-n { border-top: 2px dashed var(--boss-domain-line); }
.map-world .cell.boss-edge-e { border-right: 2px dashed var(--boss-domain-line); }
.map-world .cell.boss-edge-s { border-bottom: 2px dashed var(--boss-domain-line); }
.map-world .cell.boss-edge-w { border-left: 2px dashed var(--boss-domain-line); }
.map-world .cell.chest-edge-n { border-top: 2px solid rgba(244, 198, 93, .94); }
.map-world .cell.chest-edge-e { border-right: 2px solid rgba(244, 198, 93, .94); }
.map-world .cell.chest-edge-s { border-bottom: 2px solid rgba(244, 198, 93, .94); }
.map-world .cell.chest-edge-w { border-left: 2px solid rgba(244, 198, 93, .94); }
.map-world .cell.zone-center {
  cursor: not-allowed;
  box-shadow: inset 0 0 0 3px rgba(7, 11, 14, .75), inset 0 0 18px rgba(7, 11, 14, .72);
}
.map-world .cell.zone-center::before {
  content: '';
  position: absolute;
  inset: 5px;
  z-index: 3;
  pointer-events: none;
  background: linear-gradient(45deg, transparent 45%, rgba(255,255,255,.68) 46% 54%, transparent 55%),
              linear-gradient(-45deg, transparent 45%, rgba(255,255,255,.68) 46% 54%, transparent 55%);
  opacity: .42;
}

.pending-event {
  display: grid;
  gap: 7px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.pending-event.is-blocking { border-left: 3px solid var(--red); padding-left: 9px; }
.pending-event button { justify-self: start; }
.battle-result-modes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  margin: 12px 0;
  padding: 1px;
  background: var(--border-strong);
}
.battle-result-modes label {
  min-height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  padding: 8px;
  background: var(--bg-soft);
}
.modal [hidden] { display: none !important; }
.encounter-kicker { color: var(--red); font: 700 11px/1 var(--font-display); }
.boss-encounter-modal p { color: var(--text-muted); line-height: 1.65; }
.boss-encounter-modal .encounter-challenge { color: var(--gold); font-weight: 700; }
.encounter-costs {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin: 14px 0;
}
.encounter-costs span { padding: 9px; border: 1px solid var(--border); background: var(--bg-soft); }
.encounter-costs b { display: block; margin-top: 3px; color: var(--gold); font-size: 18px; }
.battle-participant-shade .turn-shade__content { border-color: rgba(255, 85, 119, .62); }
.battle-participant-shade .turn-shade__logo { color: var(--red); }

.round-activity-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
  margin-bottom: 8px;
}
.round-activity-summary span {
  min-width: 0;
  padding: 7px 6px;
  color: var(--text-muted);
  background: var(--bg-soft);
  border: 1px solid var(--border);
  font-size: 10px;
  text-align: center;
}
.round-activity-summary b {
  display: block;
  margin-top: 2px;
  color: var(--text);
  font: 700 15px/1 var(--font-display);
  font-variant-numeric: tabular-nums;
}
.round-activity-item {
  display: grid;
  grid-template-columns: 26px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 9px 0;
  border-bottom: 1px solid var(--border);
}
.round-activity-item button { grid-column: 2 / -1; justify-self: start; }
.round-activity-item.is-current { border-left: 3px solid var(--red); padding-left: 7px; }
.round-activity-item.is-resolved,
.round-activity-item.is-surrendered,
.round-activity-item.is-skipped { opacity: .72; }
.round-activity-sequence {
  display: grid;
  width: 26px;
  height: 26px;
  place-items: center;
  color: var(--cyan);
  background: var(--bg-elev);
  border: 1px solid var(--border-strong);
  font: 700 11px/1 var(--font-display);
  font-variant-numeric: tabular-nums;
}

.boss-challenge-config { margin-top: 20px; }
.boss-challenge-level { padding: 14px 0; border-top: 1px solid var(--border); }
.boss-challenge-level__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 12px;
}
.boss-challenge-level__head > div { display: flex; align-items: center; gap: 8px; }
.boss-challenge-toggle { margin: 0; color: var(--text); font-size: 12px; text-transform: none; }
.boss-challenge-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(130px, 1fr));
  gap: 10px;
}
.boss-challenge-constant { margin-bottom: 10px; }
.boss-challenge-bands { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.boss-challenge-band { padding: 12px; background: var(--bg-soft); border: 1px solid var(--border); }
.boss-challenge-band__title { margin-bottom: 10px; color: var(--cyan); font: 700 12px/1 var(--font-display); }
.boss-challenge-band .boss-challenge-grid { grid-template-columns: repeat(2, minmax(120px, 1fr)); }
.boss-challenge-field { min-width: 0; margin: 0; color: var(--text-muted); font-size: 10px; text-transform: none; }
.boss-challenge-field span { display: block; min-height: 24px; margin-bottom: 4px; }
.boss-challenge-field input { width: 100%; font-variant-numeric: tabular-nums; }

.boss-challenge-roll {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin: 14px 0;
  animation: bossChallengeReveal .42s cubic-bezier(.23, 1, .32, 1);
}
.boss-challenge-roll span,
.boss-resolution-target span {
  padding: 10px;
  color: var(--text-muted);
  background: var(--bg-soft);
  border: 1px solid var(--border);
  font-size: 11px;
}
.boss-challenge-roll b,
.boss-resolution-target b { display: block; margin-top: 4px; color: var(--boss-domain-line); font-size: 18px; font-variant-numeric: tabular-nums; }
@keyframes bossChallengeReveal {
  from { opacity: 0; transform: translateY(8px) scale(.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

.battle-resolution-backdrop { padding: 24px; }
.battle-resolution-modal {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  width: min(760px, calc(100vw - 48px));
  max-width: 760px;
  height: min(82dvh, 720px);
  max-height: calc(100dvh - 48px);
  padding: 0;
  overflow: hidden;
  border-color: var(--border-strong);
  animation: scoreModalIn .2s cubic-bezier(.23, 1, .32, 1);
}
.battle-resolution-modal--wide { width: min(1040px, calc(100vw - 48px)); max-width: 1040px; height: min(90dvh, 860px); }
.battle-resolution-head {
  display: grid;
  gap: 10px;
  padding: 18px 22px 14px;
  background: var(--bg-card);
  border-bottom: 1px solid var(--border);
}
.battle-resolution-head h3 { margin: 3px 0 0; font-size: 18px; letter-spacing: 0; }
.battle-resolution-body { min-height: 0; overflow-y: auto; padding: 18px 22px; overscroll-behavior: contain; }
.battle-resolution-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: 13px 22px;
  background: var(--bg-card);
  border-top: 1px solid var(--border-strong);
}
.battle-resolution-actions button { min-width: 136px; justify-content: center; }
.battle-matchup {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 44px minmax(0, 1fr);
  align-items: center;
  gap: 10px;
  width: min(560px, 100%);
  margin-inline: auto;
}
.battle-matchup__player { display: flex; align-items: center; justify-content: center; gap: 9px; min-width: 0; color: var(--text); }
.battle-matchup__player img,
.boss-matchup-icon { width: 42px; height: 42px; flex: 0 0 42px; border-radius: 50%; object-fit: cover; box-shadow: inset 0 0 0 1px rgba(255,255,255,.1); }
.boss-matchup-icon { background: var(--asset-boss-1) center / cover no-repeat; }
.battle-matchup__player b { min-width: 0; overflow-wrap: anywhere; text-align: center; }
.battle-matchup__player.is-leading { color: var(--green); }
.battle-matchup__player.is-trailing { color: var(--red); }
.battle-matchup__player.is-draw { color: var(--gold); }
.battle-matchup__versus { color: var(--red); font: 800 16px/1 var(--font-display); text-align: center; }
.song-count-control { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; max-width: 520px; margin: 14px auto 24px; }
.song-count-control button { min-height: 72px; color: var(--text-muted); background: var(--bg-soft); border-color: var(--border); font: 700 24px/1 var(--font-display); }
.song-count-control button span { display: block; margin-top: 5px; font: 400 10px/1 var(--font-body); }
.song-count-control button.is-selected { color: var(--cyan); background: var(--bg-elev); border-color: var(--cyan); }
.pvp-card-resolution { display: grid; grid-template-columns: minmax(0, 1fr) minmax(160px, .8fr) auto; align-items: end; gap: 10px; padding-top: 16px; border-top: 1px solid var(--border); }
.pvp-card-resolution p { margin: 4px 0 0; }
.pvp-song-list { display: grid; gap: 12px; }
.pvp-song-entry { padding: 14px; background: var(--bg-soft); border: 1px solid var(--border); }
.pvp-song-entry__title { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; margin-bottom: 10px; }
.pvp-song-meta { display: grid; grid-template-columns: 1.4fr 1fr .7fr; gap: 8px; }
.pvp-song-meta label,
.pvp-score-side { margin: 0; color: var(--text-muted); font-size: 10px; text-transform: none; }
.pvp-song-meta label span,
.pvp-score-side__name { display: block; margin-bottom: 4px; }
.pvp-song-meta input,
.pvp-score-side input { width: 100%; }
.pvp-achievement-row { display: grid; grid-template-columns: minmax(0, 1fr) 24px minmax(0, 1fr); align-items: center; gap: 8px; margin-top: 12px; }
.pvp-score-side { padding: 9px; border: 1px solid var(--border); background: var(--bg-card); }
.pvp-score-side small { display: block; min-height: 14px; margin-top: 4px; color: var(--text-muted); }
.pvp-score-side.is-leading .pvp-score-side__name,
.pvp-score-side.is-leading small { color: var(--green); }
.pvp-score-side.is-trailing .pvp-score-side__name,
.pvp-score-side.is-trailing small { color: var(--red); }
.pvp-score-side.is-draw .pvp-score-side__name,
.pvp-score-side.is-draw small { color: var(--gold); }
.pvp-score-separator { color: var(--text-muted); font: 700 18px/1 var(--font-display); text-align: center; }
.pvp-total-score { display: grid; grid-template-columns: minmax(0, 1fr) 28px minmax(0, 1fr); align-items: center; gap: 10px; max-width: 620px; margin: 54px auto 20px; }
.pvp-total-score span { display: grid; justify-items: center; gap: 7px; min-width: 0; }
.pvp-total-score b { max-width: 100%; color: var(--text); font: 700 28px/1 var(--font-display); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.pvp-total-score small { color: var(--text-muted); }
.pvp-total-score i { color: var(--red); font: 700 20px/1 var(--font-display); text-align: center; }
.pvp-outcome-text { color: var(--text); font-weight: 700; text-align: center; }
.boss-resolution-target { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.boss-result-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 20px; }

@media (max-width: 800px) {
  .boss-challenge-level__head { align-items: flex-start; flex-direction: column; }
  .boss-challenge-grid,
  .boss-challenge-band .boss-challenge-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .boss-challenge-bands { grid-template-columns: minmax(0, 1fr); }
  .battle-resolution-backdrop { align-items: stretch; padding: 8px; }
  .battle-resolution-modal,
  .battle-resolution-modal--wide { width: 100%; height: calc(100dvh - 16px); max-height: calc(100dvh - 16px); }
  .battle-resolution-head { padding: 14px; }
  .battle-resolution-body { padding: 14px; }
  .battle-resolution-actions { padding: 12px 14px max(12px, env(safe-area-inset-bottom)); }
  .battle-resolution-actions button { min-width: 0; min-height: 44px; flex: 1; }
  .battle-matchup { grid-template-columns: minmax(0, 1fr) 34px minmax(0, 1fr); gap: 5px; }
  .battle-matchup__player { flex-direction: column; gap: 5px; font-size: 11px; }
  .battle-matchup__player img,
  .boss-matchup-icon { width: 36px; height: 36px; flex-basis: 36px; }
  .song-count-control { gap: 5px; }
  .song-count-control button { min-height: 64px; }
  .pvp-card-resolution { grid-template-columns: minmax(0, 1fr); align-items: stretch; }
  .pvp-song-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pvp-song-meta label:first-child { grid-column: 1 / -1; }
  .boss-result-fields { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 440px) {
  .boss-challenge-grid,
  .boss-challenge-band .boss-challenge-grid { grid-template-columns: minmax(0, 1fr); }
  .pvp-achievement-row { grid-template-columns: minmax(0, 1fr); }
  .pvp-score-separator { height: 14px; }
  .pvp-total-score b { font-size: 20px; }
}
@media (prefers-reduced-motion: reduce) {
  .boss-challenge-roll,
  .battle-resolution-modal { animation: none; }
}

.live-map-wrap { right: 282px; }
.live-actor-transition { right: 282px; }
.live-body .theme-btn--floating { right: 296px; }
.live-team-panel {
  position: absolute;
  inset: 0 0 0 auto;
  z-index: 46;
  width: 282px;
  display: grid;
  grid-template-rows: auto auto auto minmax(0, 1fr);
  padding: max(18px, env(safe-area-inset-top)) 14px max(14px, env(safe-area-inset-bottom));
  color: #edf3f5;
  background: rgba(5, 10, 13, .96);
  border-left: 1px solid rgba(99, 125, 146, .42);
}
.live-team-head { min-width: 0; padding-bottom: 12px; border-bottom: 2px solid var(--live-team, #35c7bc); }
.live-team-head span { display: block; color: #91a2ad; font-size: 10px; }
.live-team-head b { display: block; margin-top: 5px; overflow: hidden; text-overflow: ellipsis; font: 700 18px/1.2 var(--font-display); }
.live-actor-vital { display: flex; justify-content: space-between; align-items: baseline; padding: 13px 0 9px; }
.live-actor-vital span { color: #91a2ad; font-size: 10px; }
.live-actor-vital b { color: #ff8297; font: 800 24px/1 var(--font-display); font-variant-numeric: tabular-nums; }
.live-next { min-height: 34px; padding: 8px 0; color: #d8e2e6; border-block: 1px solid rgba(99,125,146,.28); font-size: 11px; }
.live-roster { min-height: 0; overflow-y: auto; padding-top: 7px; }
.live-roster-row {
  display: grid;
  grid-template-columns: 32px minmax(0, 1fr) 48px;
  align-items: center;
  gap: 6px;
  min-height: 38px;
  padding: 6px 2px;
  border-bottom: 1px solid rgba(99,125,146,.2);
  font-size: 10px;
}
.live-roster-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 700; }
.live-roster-number { color: #91a2ad; font-variant-numeric: tabular-nums; }
.live-roster-state { justify-self: end; color: #91a2ad; }
.live-roster-row.is-current { color: #fff; background: rgba(53,199,188,.12); box-shadow: inset 3px 0 0 var(--live-team, #35c7bc); }
.live-roster-row.is-current .live-roster-state { color: #7ce1d8; }
.live-roster-row.is-done { opacity: .54; }
.live-roster-row.is-battle .live-roster-state { color: #ff8297; }
.live-roster-row.is-out { opacity: .35; filter: grayscale(1); }
.live-roster-empty { padding: 14px 0; color: #91a2ad; font-size: 11px; }
.live-team-toggle { display: none; }
.live-shell.is-team-transition .live-actor-transition { background: #080d11; }
.live-shell.is-team-transition .live-actor-card { animation: liveTeamHandoff 1.3s cubic-bezier(.2,.8,.2,1); }
@keyframes liveTeamHandoff {
  0% { opacity: 0; transform: translateY(18px); }
  24%, 76% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-12px); }
}
:root[data-theme="light"] .live-team-panel {
  color: var(--text);
  background: rgba(250,252,253,.96);
  border-left-color: var(--border);
}
:root[data-theme="light"] .live-team-head span,
:root[data-theme="light"] .live-actor-vital span,
:root[data-theme="light"] .live-roster-number,
:root[data-theme="light"] .live-roster-state,
:root[data-theme="light"] .live-roster-empty { color: var(--text-muted); }
:root[data-theme="light"] .live-next { color: var(--text); }

@media (max-width: 720px) {
  .live-map-wrap, .live-actor-transition { right: 0; }
  .live-team-toggle {
    position: absolute;
    z-index: 50;
    right: max(10px, env(safe-area-inset-right));
    bottom: max(10px, env(safe-area-inset-bottom));
    display: inline-flex;
    min-width: 58px;
    min-height: 44px;
    justify-content: center;
  }
  .live-team-panel {
    inset: auto 0 0;
    width: 100%;
    max-height: min(54dvh, 470px);
    padding: 12px max(12px, env(safe-area-inset-right)) max(62px, calc(env(safe-area-inset-bottom) + 54px)) max(12px, env(safe-area-inset-left));
    border-left: 0;
    border-top: 1px solid rgba(99,125,146,.42);
    transform: translateY(105%);
    transition: transform .22s ease-out;
  }
  .live-shell.is-team-panel-open .live-team-panel { transform: translateY(0); }
  .live-roster-row { grid-template-columns: 34px minmax(0, 1fr) 52px; }
  .live-body .theme-btn--floating { right: auto; left: max(10px, env(safe-area-inset-left)); }
}

@media (prefers-reduced-motion: reduce) {
  .live-shell.is-team-transition .live-actor-card,
  .live-actor-card,
  .actor-switch__content,
  .live-team-panel { animation: none !important; transition-duration: .01ms !important; }
  .map-world.is-hires .cell:not(.fog):not(.poison) { filter: none; }
  .map-barrier-segment::after { display: none; }
}

/* === Player action workflow: authoritative turn, sharing and card prompts === */
.player-command-zone {
  display: grid;
  gap: 8px;
  min-width: 0;
  margin-bottom: 8px;
}
.player-command-zone .game-toolbar {
  justify-content: space-between;
  min-width: 0;
  padding: 10px 12px;
  background: var(--bg-card);
  border: 1px solid var(--border);
}
.turn-action-controls {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
  min-width: 0;
}
.turn-action-controls button[hidden] { display: none !important; }
.turn-action-controls button,
.action-track-actions button,
.inventory-share-button,
.inventory-card-discard-trigger,
.inventory-inline-actions button,
.transfer-target-option,
.prompt-card-option {
  min-height: 44px;
  height: auto;
  text-transform: none;
  letter-spacing: 0;
}
.turn-action-controls button { min-width: 104px; padding-inline: 14px; }
.turn-action-controls .action-end-btn { border-color: color-mix(in srgb, var(--cyan) 52%, var(--border)); }

.player-action-track[hidden] { display: none !important; }
.player-action-track {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  min-width: 0;
  min-height: 58px;
  padding: 9px 12px;
  color: var(--text);
  background: color-mix(in srgb, var(--cyan) 5%, var(--bg-soft));
  border: 1px solid color-mix(in srgb, var(--cyan) 34%, var(--border));
}
.player-action-track.is-post-action {
  background: color-mix(in srgb, var(--green) 7%, var(--bg-soft));
  border-color: color-mix(in srgb, var(--green) 42%, var(--border));
}
.player-action-track.is-confirming,
.player-action-track.is-mandatory {
  background: color-mix(in srgb, var(--warn) 8%, var(--bg-soft));
  border-color: color-mix(in srgb, var(--warn) 52%, var(--border));
}
.player-action-track.is-duel {
  grid-template-columns: auto minmax(0, 1fr) auto;
  background: color-mix(in srgb, var(--duel-accent) 8%, var(--bg-soft));
  border-color: color-mix(in srgb, var(--duel-accent) 50%, var(--border));
}
.action-track-copy { display: grid; min-width: 0; gap: 2px; line-height: 1.35; }
.action-track-copy > span { color: var(--text); font-size: 12px; font-weight: 700; }
.action-track-copy > b {
  min-width: 0;
  overflow-wrap: anywhere;
  color: var(--text-muted);
  font-size: 11px;
  font-weight: 500;
  text-wrap: pretty;
}
.action-track-signal {
  justify-self: end;
  color: var(--share-text);
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
}
.action-track-actions { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 8px; }
.action-track-actions button { min-width: 108px; padding-inline: 12px; }
.duel-track-opponent {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr);
  align-items: center;
  gap: 9px;
  min-width: 0;
}
.duel-track-opponent img {
  width: 44px;
  height: 44px;
  object-fit: cover;
  background: var(--bg-soft) var(--asset-avatar-placeholder) center / cover no-repeat;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--duel-accent) 52%, transparent);
}
.duel-track-opponent span { display: grid; min-width: 0; gap: 2px; }
.duel-track-opponent small { color: var(--duel-accent); font-size: 10px; }
.duel-track-opponent b { overflow: hidden; text-overflow: ellipsis; font-size: 12px; white-space: nowrap; }
.duel-decision-state { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 5px; }
.decision-chip {
  padding: 2px 6px;
  color: var(--text-muted);
  background: var(--bg-card);
  border: 1px solid var(--border);
  font-size: 10px;
}
.decision-chip.is-responded {
  color: var(--green);
  border-color: color-mix(in srgb, var(--green) 48%, var(--border));
}

.inventory-slot { min-width: 0; }
.inventory-slot.is-mandatory { border-color: color-mix(in srgb, var(--warn) 52%, var(--border)); }
.inventory-slot-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  min-width: 0;
}
.inventory-slot-head b { color: var(--text); font-size: 12px; font-variant-numeric: tabular-nums; }
.inventory-card-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 12px;
  margin: 7px 0 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--border);
}
.inventory-card-list.can-discard { grid-template-columns: minmax(0, 1fr); }
.inventory-card-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  min-width: 0;
  min-height: 58px;
  padding: 6px 0;
  border-bottom: 1px solid var(--border);
}
.inventory-card-summary,
.inventory-card-discard-trigger {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  width: 100%;
  min-width: 0;
  min-height: 44px;
  padding: 5px 7px;
  color: var(--text);
  background: transparent;
  border: 1px solid transparent;
  clip-path: none;
  text-align: left;
  text-transform: none;
  letter-spacing: 0;
}
.inventory-card-summary { grid-template-columns: minmax(0, 1fr); padding-inline: 0; }
.inventory-card-discard-trigger:not(:disabled) { cursor: pointer; }
.inventory-card-discard-trigger:not(:disabled):hover {
  background: color-mix(in srgb, var(--red) 7%, transparent);
  border-color: color-mix(in srgb, var(--red) 42%, var(--border));
}
.inventory-card-discard-trigger.is-selected {
  background: color-mix(in srgb, var(--red) 10%, var(--bg-soft));
  border-color: var(--red);
}
.inventory-card-discard-cue {
  color: var(--red);
  font-size: 10px;
  font-weight: 700;
  white-space: nowrap;
}
.inventory-card-copy { display: grid; min-width: 0; gap: 2px; line-height: 1.3; }
.inventory-card-copy b { overflow-wrap: anywhere; color: var(--text); font-size: 12px; }
.inventory-card-copy small {
  overflow: hidden;
  color: var(--text-muted);
  font-size: 10px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.inventory-card-controls { display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.inventory-share-button {
  min-width: 76px;
  padding-inline: 11px;
  color: var(--share-text);
  border-color: color-mix(in srgb, var(--share-target) 52%, var(--border));
}
.inventory-empty { padding: 12px 0 6px; }
.inventory-transfer-panel,
.inventory-discard-panel,
.inventory-mandatory {
  min-width: 0;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--border-strong);
}
.inventory-transfer-head,
.inventory-discard-copy,
.prompt-discard-copy { display: grid; min-width: 0; gap: 2px; margin-bottom: 8px; }
.inventory-transfer-head span,
.inventory-discard-copy span,
.inventory-discard-copy small,
.prompt-discard-copy small { color: var(--text-muted); font-size: 10px; }
.inventory-transfer-head b,
.inventory-discard-copy b,
.prompt-discard-copy b { overflow-wrap: anywhere; color: var(--text); font-size: 12px; }
.inventory-discard-copy span { color: var(--red); font-weight: 700; }
.transfer-target-list,
.prompt-card-options {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px;
  min-width: 0;
}
.transfer-target-option,
.prompt-card-option {
  width: 100%;
  min-width: 0;
  padding: 6px 8px;
  color: var(--text);
  background: var(--bg-soft);
  border-color: var(--border);
  clip-path: none;
  text-align: left;
}
.transfer-target-option {
  display: grid;
  grid-template-columns: 36px minmax(0, 1fr);
  align-items: center;
  gap: 8px;
}
.transfer-target-option img {
  width: 36px;
  height: 36px;
  object-fit: cover;
  background: var(--bg-soft) var(--asset-avatar-placeholder) center / cover no-repeat;
}
.transfer-target-option span,
.prompt-card-option span { display: grid; min-width: 0; gap: 2px; }
.transfer-target-option b,
.prompt-card-option b { overflow-wrap: anywhere; font-size: 11px; }
.transfer-target-option small,
.prompt-card-option small {
  overflow: hidden;
  color: var(--text-muted);
  font-size: 10px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.transfer-target-option.is-selected {
  color: var(--share-text);
  background: color-mix(in srgb, var(--share-target) 8%, var(--bg-soft));
  border-color: var(--share-target);
}
.inventory-inline-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
  min-width: 0;
  margin-top: 9px;
}
.inventory-inline-actions button { min-width: 112px; padding-inline: 12px; }
.inventory-feedback { padding: 8px 0; color: var(--red); font-size: 11px; }

.inventory-mandatory-head {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: 9px;
  margin-bottom: 8px;
}
.inventory-mandatory-head img {
  width: 40px;
  height: 40px;
  object-fit: cover;
  background: var(--bg-soft) var(--asset-avatar-placeholder) center / cover no-repeat;
}
.inventory-mandatory-head span { display: grid; min-width: 0; gap: 2px; }
.inventory-mandatory-head b { overflow-wrap: anywhere; color: var(--text); font-size: 12px; }
.inventory-mandatory-head small { color: var(--text-muted); font-size: 10px; line-height: 1.35; }
.prompt-card-option {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 24px;
  align-items: center;
  gap: 8px;
}
.prompt-card-option i {
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  color: transparent;
  border: 1px solid var(--border-strong);
  font-style: normal;
}
.prompt-card-option.is-selected {
  color: var(--share-text);
  background: color-mix(in srgb, var(--share-target) 8%, var(--bg-soft));
  border-color: var(--share-target);
}
.prompt-card-option.is-selected i { color: var(--share-text); border-color: var(--share-target); }
.prompt-card-option.is-discard.is-selected {
  color: var(--red);
  background: color-mix(in srgb, var(--red) 8%, var(--bg-soft));
  border-color: var(--red);
}
.prompt-card-option.is-discard.is-selected i { color: var(--red); border-color: var(--red); }
.prompt-discard-section { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--border-strong); }
.inventory-selection-count {
  margin-right: auto;
  color: var(--text-muted);
  font-size: 10px;
  font-variant-numeric: tabular-nums;
}

.map-entity .entity-ring::after {
  content: '';
  position: absolute;
  inset: -1px;
  border-radius: 50%;
  pointer-events: none;
}
.map-entity.is-share-target .entity-ring::after {
  box-shadow: 0 0 0 2px var(--share-target-separator), 0 0 0 5px var(--share-target);
}
.map-entity.is-share-selected .entity-ring::after {
  box-shadow: 0 0 0 2px var(--share-target-separator), 0 0 0 6px var(--share-target), 0 0 12px color-mix(in srgb, var(--share-target) 58%, transparent);
}
.player-card.is-share-target {
  background: color-mix(in srgb, var(--share-target) 7%, var(--bg-card));
}
.player-card.is-share-selected {
  background: color-mix(in srgb, var(--share-target) 13%, var(--bg-card));
  box-shadow: inset 0 0 0 1px var(--share-target);
}
.player-card.is-share-target img {
  box-shadow: 0 0 0 2px var(--share-target-separator), 0 0 0 4px var(--share-target);
}
.player-card.is-share-target .stats { color: var(--share-text); }

.pvp-confirmation-admin-item {
  margin-bottom: 8px;
  padding: 9px 8px;
  background: color-mix(in srgb, var(--duel-accent) 7%, var(--bg-soft));
  border: 1px solid color-mix(in srgb, var(--duel-accent) 46%, var(--border));
}
.pvp-admin-cancel-actions {
  grid-column: 2 / -1;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 7px;
  min-width: 0;
}
.pvp-admin-cancel-actions span {
  flex: 1 1 100%;
  color: var(--red);
  font-size: 10px;
  line-height: 1.4;
}
.pvp-admin-cancel-actions button {
  grid-column: auto;
  justify-self: auto;
  min-width: 104px;
  min-height: 44px;
  height: auto;
  padding-inline: 11px;
  text-transform: none;
  letter-spacing: 0;
}
.pvp-admin-cancel-actions button:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }

.turn-action-controls button:focus-visible,
.action-track-actions button:focus-visible,
.inventory-share-button:focus-visible,
.inventory-card-discard-trigger:focus-visible,
.inventory-inline-actions button:focus-visible,
.transfer-target-option:focus-visible,
.prompt-card-option:focus-visible {
  outline: 2px solid var(--cyan);
  outline-offset: 2px;
}
.turn-action-controls button:active,
.action-track-actions button:active,
.inventory-share-button:active,
.inventory-card-discard-trigger:active,
.inventory-inline-actions button:active,
.transfer-target-option:active,
.prompt-card-option:active { transform: scale(.98); }

@media (max-width: 900px) {
  .player-workspace > main { grid-template-rows: auto auto minmax(58dvh, 1fr); }
  .player-command-zone .game-toolbar { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .player-command-zone .game-toolbar #status-line { grid-column: auto; }
  .turn-action-controls { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; }
  .turn-action-controls button { width: 100%; min-width: 0; padding-inline: 9px; }
  .player-action-track.is-duel { grid-template-columns: auto minmax(0, 1fr); }
  .player-action-track.is-duel .action-track-actions { grid-column: 1 / -1; }
  .inventory-card-list { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 720px) {
  .player-command-zone .game-toolbar { padding: 8px; }
  .turn-action-controls { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .turn-action-controls .action-end-btn { grid-column: 1 / -1; }
  .player-action-track,
  .player-action-track.is-duel { grid-template-columns: minmax(0, 1fr); gap: 8px; padding: 9px 10px; }
  .action-track-signal { justify-self: start; white-space: normal; }
  .action-track-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
  .action-track-actions button { width: 100%; min-width: 0; }
  .duel-track-opponent { grid-template-columns: 44px minmax(0, 1fr); }
  .transfer-target-list,
  .prompt-card-options { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 420px) {
  .player-workspace { padding-inline: 6px; }
  .player-command-zone { gap: 6px; }
  .player-command-zone .game-toolbar { padding: 8px; }
  .player-command-zone .game-toolbar #status-line { font-size: 11px; }
  .turn-action-controls { gap: 6px; }
  .turn-action-controls button { padding-inline: 7px; font-size: 10px; white-space: normal; line-height: 1.2; }
  .player-action-track { min-height: 0; }
  .inventory-card-row { grid-template-columns: minmax(0, 1fr) auto; gap: 6px; }
  .inventory-share-button { width: 76px; min-width: 0; padding-inline: 6px; }
  .inventory-inline-actions { display: grid; grid-template-columns: minmax(0, 1fr); }
  .inventory-inline-actions button { width: 100%; min-width: 0; }
  .inventory-selection-count { margin-right: 0; text-align: center; }
  .action-track-actions { grid-template-columns: minmax(0, 1fr); }
  .pvp-admin-cancel-actions { display: grid; grid-template-columns: minmax(0, 1fr); }
  .pvp-admin-cancel-actions button { width: 100%; min-width: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .turn-action-controls button,
  .action-track-actions button,
  .inventory-share-button,
  .inventory-card-discard-trigger,
  .inventory-inline-actions button,
  .transfer-target-option,
  .prompt-card-option { transition-duration: .01ms !important; }
  .turn-action-controls button:active,
  .action-track-actions button:active,
  .inventory-share-button:active,
  .inventory-card-discard-trigger:active,
  .inventory-inline-actions button:active,
  .transfer-target-option:active,
  .prompt-card-option:active { transform: none; }
}
