:root {
  color-scheme: dark;
  --bg: #171a42;
  --bg-deep: #10122f;
  --panel: #22275a;
  --panel-2: #2b3170;
  --ink: #e8ebfa;
  --ink-dim: #aab0d6;
  --line: #3b4290;
  --tf: #3aa6dc;
  --se: #e6b52e;
  --mc: #d9534f;
  --bl: #4fbf6a;
  --none: #8d93b8;
  --trade: #f2c94c;
  --combat: #ff6b6b;
  --auth: #6fd3a8;
  --focus: #ffe36e;
  --radius-card: 10px;
  --radius-btn: 6px;
}

* { box-sizing: border-box; }
html { font-size: 17px; }
body {
  margin: 0;
  background: radial-gradient(ellipse at 20% 0%, #252a6b 0%, var(--bg) 45%, var(--bg-deep) 100%) fixed;
  color: var(--ink);
  font-family: 'PT Sans', system-ui, sans-serif;
  line-height: 1.45;
  min-height: 100vh;
}
h1, h2, h3, .brand {
  font-family: 'Russo One', 'PT Sans', sans-serif;
  font-weight: 400;
  letter-spacing: 0.01em;
  line-height: 1.15;
}
h1 { font-size: 2rem; margin: 0.4em 0 0.3em; }
h2 { font-size: 1.25rem; margin: 0 0 0.5em; }
h3 { font-size: 1.05rem; margin: 0.6em 0 0.4em; }
p { margin: 0.3em 0; max-width: 72ch; }

.visually-hidden {
  position: absolute !important; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}
.skip { position: absolute; left: -9999px; }
.skip:focus { left: 1rem; top: 1rem; background: var(--focus); color: #000; padding: 0.5rem 1rem; z-index: 10; }

:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; }

.topbar {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 0.5rem 1rem; padding: 0.6rem 1rem; border-bottom: 1px solid var(--line);
  background: rgba(16, 18, 47, 0.7);
}
.brand { margin: 0; font-size: 1.3rem; color: var(--se); }
.topbar nav { display: flex; flex-wrap: wrap; gap: 0.4rem; }

main { padding: 1rem; max-width: 1400px; margin: 0 auto; }
main:focus { outline: none; }

button, .btn {
  font: inherit; color: var(--ink); background: var(--panel-2);
  border: 1px solid var(--line); border-radius: var(--radius-btn);
  padding: 0.45rem 0.8rem; cursor: pointer; text-align: left;
}
button:hover { background: #363d8a; }
button[aria-disabled='true'] { opacity: 0.55; cursor: not-allowed; }
button.primary { background: #3a3f9e; border-color: #6a71d8; font-weight: 700; }
button.danger { border-color: var(--mc); }
select, input[type='range'], input[type='number'] { font: inherit; }
select { background: var(--panel-2); color: var(--ink); border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 0.35rem; }
label { display: inline-flex; gap: 0.5rem; align-items: center; }
fieldset { border: 1px solid var(--line); border-radius: var(--radius-card); padding: 0.6rem 1rem 0.9rem; margin: 0 0 1rem; }
legend { padding: 0 0.4rem; font-weight: 700; }

/* ---------- Меню ---------- */
.menu-hero { padding: 2rem 0 1rem; }
.menu-hero h1 { font-size: clamp(2rem, 5vw, 3.4rem); color: var(--ink); }
.menu-hero h1 span { display: block; font-size: 0.42em; color: var(--ink-dim); font-family: 'PT Sans', sans-serif; margin-top: 0.4em; }
.factions-strip { display: flex; gap: 0; height: 6px; max-width: 420px; margin: 1rem 0 1.5rem; }
.factions-strip i { flex: 1; }
.menu-actions { display: flex; flex-direction: column; gap: 0.6rem; max-width: 420px; }
.menu-actions button { font-size: 1.1rem; padding: 0.7rem 1rem; }
.form-row { display: flex; flex-wrap: wrap; gap: 0.6rem 1.2rem; margin: 0.4rem 0; }

/* ---------- Игровой стол ---------- */
.board { display: grid; gap: 1rem; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); align-items: start; }
.board > .wide { grid-column: 1 / -1; }
@media (max-width: 900px) { .board { grid-template-columns: 1fr; } }

.zone { background: rgba(34, 39, 90, 0.85); border: 1px solid var(--line); border-radius: 14px; padding: 0.8rem 1rem 1rem; }
.zone.prompt { border: 2px solid var(--focus); background: #2a2f6e; }

.status { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; align-items: baseline; }
.stat { display: flex; align-items: baseline; gap: 0.35rem; }
.stat b { font-family: 'Russo One', sans-serif; font-size: 1.6rem; font-weight: 400; }
.stat.trade b { color: var(--trade); }
.stat.combat b { color: var(--combat); }
.stat.auth b { color: var(--auth); }

.actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }

ul.cards { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); }
ul.cards.compact { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.card {
  position: relative; background: var(--panel-2); border-radius: var(--radius-card);
  border-left: 6px solid var(--none); padding: 0.5rem 0.65rem 0.6rem; display: flex; flex-direction: column; gap: 0.35rem;
}
.card.f-TF { border-left-color: var(--tf); }
.card.f-SE { border-left-color: var(--se); }
.card.f-MC { border-left-color: var(--mc); }
.card.f-BL { border-left-color: var(--bl); }
.card.multi { border-image: linear-gradient(var(--c1), var(--c2)) 1; border-left-width: 6px; border-radius: 0; }
.card .name { font-weight: 700; }
.card .meta { color: var(--ink-dim); font-size: 0.9rem; }
.card .desc { font-size: 0.92rem; }
.card button { width: 100%; }
.card .cost {
  position: absolute; top: 0.4rem; right: 0.5rem; font-family: 'Russo One', sans-serif;
  color: var(--trade); font-size: 1.1rem;
}
.card.base-card { background: #262b66; outline: 1px dashed #5d64b8; outline-offset: -4px; }
.card.outpost { outline-style: solid; }

.opponent h3 { margin-top: 0; }
.log { max-height: 22rem; overflow: auto; margin: 0; padding-left: 1.4rem; font-size: 0.95rem; }
.log li { margin: 0.15rem 0; }
.log li.mine { color: #cfe3ff; }
.hint { color: var(--ink-dim); font-size: 0.92rem; }
.banner { font-family: 'Russo One', sans-serif; font-size: 1.6rem; color: var(--se); }

.catalog .card { min-height: 0; }
.rules h2 { margin-top: 1.4em; }
.rules li { max-width: 72ch; margin: 0.25em 0; }

@media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }

/* ---------- Сетевая игра ---------- */
#main > .zone, #main > div > .zone { margin-block: 0 1rem; }
.rooms, .seats { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.6rem; }
.rooms li, .seats li { border: 1px solid var(--line); border-radius: var(--radius-card); padding: 0.6rem 0.8rem; background: var(--panel); }
.rooms li p, .seats li p { margin: 0 0 0.4rem; }
.chat { list-style: none; margin: 0 0 0.6rem; padding: 0; max-height: 18rem; overflow-y: auto; display: grid; gap: 0.25rem; }
.chat li { overflow-wrap: anywhere; }
.chat-form input[type=text] { min-width: 0; width: min(32rem, 100%); }
input[type=text], input[type=number] { background: var(--panel-2); color: var(--ink); border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 0.35rem 0.5rem; font: inherit; }
.table-wrap { overflow-x: auto; }
.table-wrap table { border-collapse: collapse; width: 100%; font-variant-numeric: tabular-nums; }
.table-wrap th, .table-wrap td { border-bottom: 1px solid var(--line); padding: 0.4rem 0.6rem; text-align: left; }
.table-wrap thead th { color: var(--ink-dim); font-weight: 600; }
.table-wrap tbody tr:first-child th, .table-wrap tbody tr:first-child td { color: var(--se); }
html { background: var(--bg-deep); }
select { max-width: 100%; }
.form-row > label { min-width: 0; max-width: 100%; }
.seats li, .rooms li { min-width: 0; }
.seats .form-row label { display: flex; align-items: center; gap: 0.5rem; flex: 1 1 14rem; }
.seats .form-row select { flex: 1 1 auto; min-width: 0; width: 100%; }

/* ---------- Оформление: звёздное небо, картинки карт, аватарки, анимации ---------- */
/* Всё декоративное скрыто от экранного диктора (aria-hidden) и не перехватывает фокус. */
body::before, body::after {
  content: ''; position: fixed; inset: 0; z-index: -1; pointer-events: none;
  background-image:
    radial-gradient(1px 1px at 12% 18%, #fff 50%, transparent 51%),
    radial-gradient(1px 1px at 38% 72%, #cfe3ff 50%, transparent 51%),
    radial-gradient(1.5px 1.5px at 64% 30%, #fff 50%, transparent 51%),
    radial-gradient(1px 1px at 82% 84%, #ffe9a8 50%, transparent 51%),
    radial-gradient(1px 1px at 92% 12%, #fff 50%, transparent 51%),
    radial-gradient(1.2px 1.2px at 24% 56%, #fff 50%, transparent 51%),
    radial-gradient(1px 1px at 52% 8%, #cfe3ff 50%, transparent 51%),
    radial-gradient(1px 1px at 72% 58%, #fff 50%, transparent 51%);
  background-size: 420px 420px; opacity: .55;
}
body::after { background-size: 650px 650px; opacity: .35; animation: drift 180s linear infinite; }
@keyframes drift { from { background-position: 0 0; } to { background-position: 0 650px; } }

svg { display: block; }
.ico { width: 1.25em; height: 1.25em; flex: none; }
.emblem { width: 18px; height: 18px; filter: drop-shadow(0 0 2px rgba(0,0,0,.8)); }
.avatar { width: 44px; height: 44px; flex: none; border-radius: 50%; }
.status .avatar { width: 56px; height: 56px; }
.avatar.boss { width: 60px; height: 60px; filter: drop-shadow(0 0 8px rgba(155, 89, 208, .7)); }
.opp-head { display: flex; align-items: center; gap: 0.7rem; margin-bottom: 0.3rem; border-radius: 12px; }
.opp-head h3 { margin: 0; }
.opp-head.out .avatar { filter: grayscale(1) opacity(.5); }

.art-wrap { position: relative; margin: -0.5rem -0.65rem 0.15rem -0.65rem; border-radius: var(--radius-card) var(--radius-card) 0 0; overflow: hidden; }
.art-wrap .art { width: 100%; height: 64px; }
ul.cards.compact .art-wrap .art { height: 44px; }
.card { overflow: hidden; }
.cost-badge {
  position: absolute; top: 6px; right: 6px; min-width: 1.7em; height: 1.7em; padding: 0 .3em; border-radius: 1em;
  display: grid; place-items: center; font-family: 'Russo One', sans-serif; font-size: .95rem;
  color: #2a1c00; background: radial-gradient(circle at 35% 30%, #ffe9a8, #e6b52e 60%, #a37b12); box-shadow: 0 0 6px rgba(230,181,46,.6);
}
.fx { position: absolute; left: 6px; bottom: 5px; display: flex; gap: 3px; }
.card { transition: transform .15s ease, box-shadow .15s ease; }
.card:hover, .card:focus-within { transform: translateY(-2px); box-shadow: 0 6px 18px rgba(0,0,0,.45), 0 0 0 1px rgba(255,255,255,.08); }
.card.f-TF:hover { box-shadow: 0 6px 18px rgba(58,166,220,.35); }
.card.f-SE:hover { box-shadow: 0 6px 18px rgba(230,181,46,.35); }
.card.f-MC:hover { box-shadow: 0 6px 18px rgba(217,83,79,.35); }
.card.f-BL:hover { box-shadow: 0 6px 18px rgba(79,191,106,.35); }

.card.fresh { animation: cardIn .45s cubic-bezier(.2,.9,.3,1.3); }
@keyframes cardIn { from { opacity: 0; transform: translateY(-14px) scale(.92); } to { opacity: 1; transform: none; } }
.hit { animation: hitFlash .7s ease; }
@keyframes hitFlash { 0%,100% { background: transparent; } 25% { background: rgba(255,107,107,.45); } 50% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }
.heal { animation: healGlow .9s ease; }
@keyframes healGlow { 0%,100% { box-shadow: none; } 40% { box-shadow: 0 0 0 3px rgba(111,211,168,.7); } }
.stat { border-radius: 8px; padding: 0 .3rem; }

#fx { position: fixed; inset: 0; pointer-events: none; z-index: 50; overflow: hidden; }
.fx-banner {
  position: absolute; left: 50%; top: 38%; transform: translate(-50%,-50%); white-space: nowrap;
  font-family: 'Russo One', sans-serif; font-size: clamp(2rem, 7vw, 4.2rem); color: var(--focus);
  text-shadow: 0 0 18px rgba(255,227,110,.7), 0 4px 0 #3a2a8a; animation: bannerIn 2.2s ease forwards;
}
.fx-banner.win { color: #6fd3a8; text-shadow: 0 0 22px rgba(111,211,168,.8), 0 4px 0 #14507a; }
.fx-banner i { position: absolute; left: 50%; top: 50%; width: 8px; height: 8px; background: #ffe36e; clip-path: polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);
  animation: burst 1.6s ease-out forwards; }
@keyframes burst { from { transform: rotate(var(--a)) translateX(0) scale(.4); opacity: 1; } to { transform: rotate(var(--a)) translateX(var(--d)) scale(1.3); opacity: 0; } }
@keyframes bannerIn { 0% { opacity: 0; transform: translate(-50%,-50%) scale(.6); } 15% { opacity: 1; transform: translate(-50%,-50%) scale(1.05); } 25% { transform: translate(-50%,-50%) scale(1); } 80% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%,-60%) scale(1); } }
.fx-flash { position: absolute; inset: 0; background: radial-gradient(ellipse at center, transparent 40%, rgba(255,60,60,.35)); animation: flash .7s ease forwards; }
@keyframes flash { from { opacity: 1; } to { opacity: 0; } }

.menu-hero .scene { max-width: 900px; border-radius: 18px; overflow: hidden; border: 1px solid var(--line); box-shadow: 0 10px 40px rgba(0,0,0,.5); margin-bottom: .5rem; }
.hero-scene { width: 100%; height: auto; }
.hero-scene .tw { animation: twinkle 3s ease-in-out infinite; }
@keyframes twinkle { 0%,100% { opacity: .2; } 50% { opacity: 1; } }
.hero-scene .fly { animation: bob 6s ease-in-out infinite; transform-box: fill-box; }
.hero-scene .f2 { animation-duration: 7s; animation-delay: -2s; }
.hero-scene .f3 { animation-duration: 5s; animation-delay: -1s; }
.hero-scene .f4 { animation-duration: 8s; animation-delay: -3s; }
@keyframes bob { 0%,100% { translate: 0 0; } 50% { translate: 14px -6px; } }

.zone h2 { display: flex; align-items: center; gap: .5rem; }
.zone h2::before { content: ''; width: 6px; height: 1.1em; border-radius: 3px; background: linear-gradient(var(--tf), var(--se), var(--mc), var(--bl)); flex: none; }
.chat li { display: block; }
.seats .avatar, .rooms .avatar { width: 36px; height: 36px; }

@media (prefers-reduced-motion: reduce) {
  body::after, .hero-scene .tw, .hero-scene .fly { animation: none !important; }
  .card.fresh, .hit, .heal, .fx-banner, .fx-banner i, .fx-flash { animation: none !important; }
  .fx-banner, .fx-flash { display: none; }
  .card:hover, .card:focus-within { transform: none; }
}
body { position: relative; isolation: isolate; }
.art-wrap .art { height: auto; aspect-ratio: 5 / 2; max-height: 96px; }
ul.cards.compact .art-wrap .art { height: auto; max-height: 60px; }
ul.online { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem 1rem; }
ul.online li { display: flex; align-items: center; gap: .4rem; }
ul.online .avatar { width: 32px; height: 32px; }

/* Анимации выключены в настройках */
.no-anim::after, .no-anim .hero-scene .tw, .no-anim .hero-scene .fly, .no-anim .card.fresh, .no-anim .hit, .no-anim .heal { animation: none !important; }
.no-anim #fx { display: none; }
.no-anim .card:hover, .no-anim .card:focus-within { transform: none; }
