:root{
  --mg-ink:#0f172a;
  --mg-muted:#5c6a80;
  --mg-line:rgba(15,23,42,.08);
  --mg-card:rgba(255,255,255,.9);
  --mg-shadow:0 28px 70px rgba(15,23,42,.12);
  --mg-brand-from:#2563eb;
  --mg-brand-to:#0ea5e9;
  --mg-brand-glow:#facc15;
  --mg-surface:#f5f9ff;
}

.mg-page *,
.mg-page *::before,
.mg-page *::after{
  box-sizing:border-box;
}

.hidden{
  display:none !important;
}

.mg-page{
  margin:0;
  min-height:100vh;
  color:var(--mg-ink);
  font-family:Manrope, ui-sans-serif, system-ui, sans-serif;
  background:
    radial-gradient(circle at top left, rgba(37,99,235,.18), rgba(37,99,235,0) 25%),
    radial-gradient(circle at top right, rgba(14,165,233,.16), rgba(14,165,233,0) 28%),
    radial-gradient(circle at 50% 120%, rgba(250,204,21,.16), rgba(250,204,21,0) 40%),
    linear-gradient(180deg, #f8fbff, #edf4fb 46%, #eef2ff 100%);
}

.mg-shell{
  width:min(1260px, calc(100% - 32px));
  margin:0 auto;
  padding:28px 0 64px;
}

.mg-topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  flex-wrap:wrap;
  margin-bottom:18px;
}

.mg-topbar-actions{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}

.mg-link-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:44px;
  padding:0 16px;
  border-radius:16px;
  text-decoration:none;
  font-size:14px;
  font-weight:900;
  transition:.18s ease;
  border:1px solid rgba(15,23,42,.08);
  color:var(--mg-ink);
  background:rgba(255,255,255,.88);
  box-shadow:0 12px 24px rgba(15,23,42,.05);
}

.mg-link-btn:hover{
  transform:translateY(-1px);
}

.mg-link-btn.primary{
  border-color:transparent;
  color:#fff;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  box-shadow:0 18px 34px color-mix(in srgb, var(--mg-brand-from) 24%, transparent);
}

.mg-hero{
  position:relative;
  overflow:hidden;
  padding:32px;
  border-radius:32px;
  background:linear-gradient(180deg, rgba(255,255,255,.96), rgba(255,255,255,.86));
  border:1px solid rgba(255,255,255,.84);
  box-shadow:0 34px 88px rgba(15,23,42,.08);
  backdrop-filter:blur(16px);
}

.mg-hero::before,
.mg-hero::after{
  content:"";
  position:absolute;
  border-radius:999px;
  pointer-events:none;
}

.mg-hero::before{
  inset:-130px auto auto -90px;
  width:260px;
  height:260px;
  background:radial-gradient(circle, rgba(37,99,235,.18), rgba(37,99,235,0));
}

.mg-hero::after{
  inset:auto -100px -120px auto;
  width:340px;
  height:340px;
  background:radial-gradient(circle, rgba(250,204,21,.18), rgba(250,204,21,0));
}

.mg-hero-grid{
  position:relative;
  z-index:1;
  display:grid;
  grid-template-columns:minmax(0,1.2fr) minmax(320px,.86fr);
  gap:20px;
}

.mg-eyebrow{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:8px 12px;
  border-radius:999px;
  background:linear-gradient(135deg, rgba(37,99,235,.12), rgba(14,165,233,.16));
  color:#1d4ed8;
  font-size:12px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-title{
  margin:18px 0 10px;
  font-size:clamp(36px, 4vw, 58px);
  line-height:1.02;
  letter-spacing:-.05em;
  font-weight:900;
}

.mg-copy{
  max-width:760px;
  color:var(--mg-muted);
  font-size:15px;
  line-height:1.78;
}

.mg-chip-row{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin-top:18px;
}

.mg-chip{
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:38px;
  padding:0 14px;
  border-radius:999px;
  background:#fff;
  border:1px solid rgba(37,99,235,.14);
  color:#1d4ed8;
  font-size:13px;
  font-weight:800;
  box-shadow:0 10px 18px rgba(15,23,42,.05);
}

.mg-hero-panel{
  border-radius:28px;
  padding:22px;
  border:1px solid rgba(255,255,255,.72);
  background:
    radial-gradient(circle at top right, color-mix(in srgb, var(--mg-brand-glow) 20%, transparent), transparent 40%),
    linear-gradient(135deg, color-mix(in srgb, var(--mg-brand-from) 14%, white), rgba(255,255,255,.96));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.86);
}

.mg-hero-panel-status{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:34px;
  padding:0 12px;
  border-radius:999px;
  background:rgba(255,255,255,.88);
  font-size:12px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-hero-panel-mark{
  margin-top:18px;
  font-size:76px;
  line-height:1;
  filter:drop-shadow(0 14px 26px rgba(15,23,42,.18));
}

.mg-stat-grid{
  margin-top:18px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
}

.mg-stat-card{
  padding:13px 14px;
  border-radius:18px;
  background:rgba(255,255,255,.82);
  border:1px solid rgba(255,255,255,.86);
}

.mg-stat-card strong{
  display:block;
  font-size:17px;
  font-weight:900;
}

.mg-stat-card span{
  display:block;
  margin-top:4px;
  color:var(--mg-muted);
  font-size:12px;
  font-weight:700;
  line-height:1.5;
}

.mg-section-head{
  margin-top:22px;
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:14px;
  flex-wrap:wrap;
}

.mg-section-head h2{
  margin:0;
  font-size:26px;
  letter-spacing:-.04em;
}

.mg-section-head p{
  margin:6px 0 0;
  color:var(--mg-muted);
  font-size:14px;
  font-weight:700;
}

.mg-games-grid{
  margin-top:18px;
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));
  gap:16px;
}

.mg-game-card{
  position:relative;
  overflow:hidden;
  min-height:320px;
  padding:22px;
  border-radius:28px;
  background:linear-gradient(180deg, rgba(255,255,255,.96), rgba(255,255,255,.88));
  border:1px solid rgba(255,255,255,.82);
  box-shadow:var(--mg-shadow);
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  isolation:isolate;
  text-decoration:none;
  color:inherit;
  transition:.22s ease;
}

.mg-game-card:hover{
  transform:translateY(-4px);
  box-shadow:0 36px 86px rgba(15,23,42,.14);
}

.mg-game-card::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  background:
    radial-gradient(circle at top right, color-mix(in srgb, var(--card-glow, #facc15) 24%, transparent), transparent 38%),
    linear-gradient(135deg, color-mix(in srgb, var(--card-from, #2563eb) 14%, white), rgba(255,255,255,.96));
}

.mg-card-top{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.mg-card-mark{
  width:68px;
  height:68px;
  border-radius:22px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:34px;
  background:rgba(255,255,255,.86);
  border:1px solid rgba(255,255,255,.9);
  box-shadow:0 16px 28px rgba(15,23,42,.12);
}

.mg-card-status{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:32px;
  padding:0 12px;
  border-radius:999px;
  background:rgba(255,255,255,.88);
  font-size:12px;
  font-weight:900;
  text-transform:uppercase;
  letter-spacing:.08em;
  color:#166534;
}

.mg-card-title{
  margin:20px 0 8px;
  font-size:28px;
  line-height:1.02;
  letter-spacing:-.04em;
  font-weight:900;
}

.mg-card-subtitle{
  margin:0;
  color:var(--mg-muted);
  font-size:15px;
  line-height:1.72;
}

.mg-highlight-list{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin-top:16px;
}

.mg-highlight{
  display:inline-flex;
  align-items:center;
  min-height:34px;
  padding:0 12px;
  border-radius:999px;
  background:rgba(255,255,255,.8);
  border:1px solid rgba(255,255,255,.84);
  font-size:12px;
  font-weight:800;
  color:#0f172a;
}

.mg-card-footer{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-top:20px;
  flex-wrap:wrap;
}

.mg-card-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:44px;
  padding:0 16px;
  border-radius:15px;
  color:#fff;
  font-size:14px;
  font-weight:900;
  background:linear-gradient(135deg, var(--card-from, #2563eb), var(--card-to, #0ea5e9));
  box-shadow:0 18px 32px color-mix(in srgb, var(--card-from, #2563eb) 24%, transparent);
}

.mg-card-note{
  color:#607087;
  font-size:12px;
  font-weight:800;
}

.mg-empty{
  margin-top:18px;
  padding:28px;
  border-radius:24px;
  background:rgba(255,255,255,.82);
  border:1px solid rgba(15,23,42,.08);
  color:var(--mg-muted);
  font-size:14px;
  font-weight:700;
}

.mg-chess-layout{
  margin-top:20px;
  display:grid;
  grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);
  gap:18px;
  align-items:start;
}

.mg-panel{
  border-radius:30px;
  background:linear-gradient(180deg, rgba(255,255,255,.94), rgba(255,255,255,.86));
  border:1px solid rgba(255,255,255,.84);
  box-shadow:var(--mg-shadow);
  padding:22px;
}

.mg-panel-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  flex-wrap:wrap;
}

.mg-panel-head h3{
  margin:0;
  font-size:22px;
  letter-spacing:-.03em;
}

.mg-panel-head p{
  margin:6px 0 0;
  color:var(--mg-muted);
  font-size:13px;
  font-weight:700;
  line-height:1.65;
}

.mg-difficulty-grid{
  margin-top:16px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:10px;
}

.mg-difficulty-btn{
  padding:14px;
  border-radius:18px;
  border:1px solid rgba(15,23,42,.08);
  background:#fff;
  color:var(--mg-ink);
  cursor:pointer;
  transition:.18s ease;
  text-align:left;
}

.mg-difficulty-btn strong{
  display:block;
  font-size:15px;
  font-weight:900;
}

.mg-difficulty-btn span{
  display:block;
  margin-top:5px;
  color:var(--mg-muted);
  font-size:12px;
  font-weight:700;
  line-height:1.55;
}

.mg-difficulty-btn:hover{
  transform:translateY(-1px);
  box-shadow:0 16px 28px rgba(15,23,42,.08);
}

.mg-difficulty-btn.active{
  border-color:transparent;
  color:#fff;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  box-shadow:0 18px 34px rgba(37,99,235,.22);
}

.mg-action-row{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
  margin-top:16px;
}

.mg-button{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:46px;
  padding:0 18px;
  border:none;
  border-radius:15px;
  cursor:pointer;
  font-size:14px;
  font-weight:900;
  transition:.18s ease;
}

.mg-button:hover{
  transform:translateY(-1px);
}

.mg-button.primary{
  color:#fff;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  box-shadow:0 18px 34px color-mix(in srgb, var(--mg-brand-from) 24%, transparent);
}

.mg-button.secondary{
  color:var(--mg-ink);
  background:#f7faff;
  border:1px solid rgba(15,23,42,.08);
}

.mg-button:disabled{
  cursor:not-allowed;
  opacity:.6;
  transform:none;
  box-shadow:none;
}

.mg-status-stack{
  margin-top:16px;
  display:grid;
  gap:12px;
}

.mg-status-card{
  padding:15px 16px;
  border-radius:20px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
}

.mg-status-label{
  display:block;
  color:var(--mg-muted);
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-status-value{
  display:block;
  margin-top:6px;
  font-size:17px;
  font-weight:900;
  letter-spacing:-.02em;
}

.mg-status-note{
  display:block;
  margin-top:5px;
  color:var(--mg-muted);
  font-size:12px;
  line-height:1.6;
  font-weight:700;
}

.mg-board-shell{
  border-radius:34px;
  padding:22px;
  background:
    linear-gradient(145deg, rgba(255,255,255,.96), rgba(237,245,255,.9)),
    var(--mg-surface);
  border:1px solid rgba(255,255,255,.9);
  box-shadow:
    0 36px 88px rgba(15,23,42,.12),
    inset 0 1px 0 rgba(255,255,255,.88);
}

.mg-board-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  flex-wrap:wrap;
}

.mg-board-head h3{
  margin:0;
  font-size:22px;
  letter-spacing:-.03em;
}

.mg-board-head p{
  margin:6px 0 0;
  color:var(--mg-muted);
  font-size:13px;
  line-height:1.65;
  font-weight:700;
}

.mg-board-wrap{
  position:relative;
  margin-top:18px;
  aspect-ratio:1;
  border-radius:28px;
  padding:14px;
  background:
    linear-gradient(145deg, #d4a85f, #7a4a1f);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.28),
    inset 0 -18px 30px rgba(0,0,0,.12),
    0 24px 46px rgba(15,23,42,.16);
}

.mg-board{
  position:relative;
  display:grid;
  grid-template-columns:repeat(8, minmax(0,1fr));
  width:100%;
  height:100%;
  overflow:hidden;
  border-radius:22px;
  background:#d0dde8;
}

.mg-square{
  position:relative;
  border:none;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  overflow:hidden;
  transition:transform .12s ease;
}

.mg-square:hover{
  transform:scale(.995);
}

.mg-square.light{
  background:
    radial-gradient(circle at top left, rgba(255,255,255,.35), transparent 46%),
    linear-gradient(145deg, #f4ead6, #dfcfb4);
}

.mg-square.dark{
  background:
    radial-gradient(circle at top left, rgba(255,255,255,.16), transparent 46%),
    linear-gradient(145deg, #4a6478, #2d4255);
}

.mg-square.is-selected{
  box-shadow:inset 0 0 0 4px rgba(250,204,21,.9);
}

.mg-square.is-target::after{
  content:"";
  position:absolute;
  width:22%;
  height:22%;
  border-radius:999px;
  background:rgba(15,23,42,.22);
  box-shadow:0 0 0 7px rgba(255,255,255,.12);
}

.mg-square.is-last-move::before,
.mg-square.is-check::before{
  content:"";
  position:absolute;
  inset:0;
}

.mg-square.is-last-move::before{
  background:linear-gradient(180deg, rgba(56,189,248,.24), rgba(56,189,248,.1));
}

.mg-square.is-check::before{
  background:linear-gradient(180deg, rgba(239,68,68,.34), rgba(239,68,68,.14));
}

.mg-square-label{
  position:absolute;
  font-size:10px;
  font-weight:900;
  letter-spacing:.04em;
  pointer-events:none;
  opacity:.82;
}

.mg-square-label.file{
  right:8px;
  bottom:6px;
}

.mg-square-label.rank{
  left:8px;
  top:6px;
}

.mg-square.light .mg-square-label{
  color:#6b4e20;
}

.mg-square.dark .mg-square-label{
  color:#dbeafe;
}

.mg-piece{
  position:relative;
  z-index:1;
  font-size:clamp(28px, 4vw, 46px);
  line-height:1;
  user-select:none;
  transition:transform .14s ease, filter .14s ease;
  font-family:"Segoe UI Symbol","Apple Symbols","Noto Sans Symbols2",serif;
}

.mg-piece.white{
  color:#fffdf7;
  text-shadow:
    0 1px 0 #fff,
    0 3px 0 rgba(255,255,255,.3),
    0 14px 22px rgba(15,23,42,.24);
  filter:drop-shadow(0 4px 8px rgba(15,23,42,.16));
}

.mg-piece.black{
  color:#162433;
  text-shadow:
    0 1px 0 rgba(255,255,255,.12),
    0 10px 18px rgba(15,23,42,.18);
  filter:drop-shadow(0 4px 10px rgba(15,23,42,.18));
}

.mg-square.is-selected .mg-piece,
.mg-square:hover .mg-piece{
  transform:translateY(-2px) scale(1.05);
}

.mg-board-anim{
  position:fixed;
  z-index:60;
  pointer-events:none;
  transform:translate(-50%, -50%);
  font-size:clamp(30px, 4vw, 50px);
  font-family:"Segoe UI Symbol","Apple Symbols","Noto Sans Symbols2",serif;
  text-shadow:0 16px 26px rgba(15,23,42,.24);
}

.mg-history{
  margin-top:14px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:10px;
}

.mg-history-item{
  padding:12px 14px;
  border-radius:18px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
}

.mg-history-item strong{
  display:block;
  font-size:12px;
  color:var(--mg-muted);
  letter-spacing:.06em;
  text-transform:uppercase;
}

.mg-history-item span{
  display:block;
  margin-top:5px;
  font-size:16px;
  font-weight:900;
}

.mg-moves-list{
  margin-top:14px;
  display:grid;
  gap:10px;
  max-height:210px;
  overflow:auto;
  padding-right:4px;
}

.mg-move-row{
  display:grid;
  grid-template-columns:48px 1fr 1fr;
  gap:8px;
  align-items:center;
  padding:10px 12px;
  border-radius:16px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
  font-size:13px;
  font-weight:800;
}

.mg-move-index{
  color:var(--mg-muted);
}

.mg-move-san{
  display:inline-flex;
  align-items:center;
  gap:6px;
}

.mg-move-san span{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:30px;
  padding:0 10px;
  border-radius:999px;
  background:#f3f7ff;
}

.mg-legend{
  margin-top:16px;
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}

.mg-legend-item{
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:34px;
  padding:0 12px;
  border-radius:999px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
  font-size:12px;
  font-weight:800;
}

.mg-legend-swatch{
  width:12px;
  height:12px;
  border-radius:999px;
}

.mg-legend-swatch.locked{ background:#f59e0b; }
.mg-legend-swatch.ready{ background:#22c55e; }
.mg-legend-swatch.ai{ background:#2563eb; }
.mg-legend-swatch.check{ background:#ef4444; }

.mg-modal-overlay{
  position:fixed;
  inset:0;
  z-index:80;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:rgba(15,23,42,.48);
  backdrop-filter:blur(8px);
  opacity:0;
  visibility:hidden;
  transition:opacity .18s ease, visibility .18s ease;
}

.mg-modal-overlay.hidden{
  display:none;
}

.mg-modal-overlay.is-visible{
  opacity:1;
  visibility:visible;
}

.mg-modal-card{
  width:min(720px, 100%);
  max-height:min(90vh, 860px);
  overflow:auto;
  padding:24px;
  border-radius:28px;
  background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(255,255,255,.94));
  border:1px solid rgba(255,255,255,.82);
  box-shadow:0 38px 92px rgba(15,23,42,.22);
}

.mg-modal-top{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.mg-modal-kicker{
  color:#2563eb;
  font-size:12px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-modal-title{
  margin:8px 0 0;
  font-size:30px;
  line-height:1.04;
  letter-spacing:-.04em;
}

.mg-modal-close{
  width:42px;
  height:42px;
  border:none;
  border-radius:14px;
  background:#f6f8ff;
  color:#0f172a;
  font-size:24px;
  cursor:pointer;
}

.mg-modal-copy{
  margin:14px 0 0;
  color:var(--mg-muted);
  font-size:14px;
  line-height:1.7;
  font-weight:700;
}

.mg-modal-block{
  margin-top:18px;
  padding:16px;
  border-radius:20px;
  background:#f8fbff;
  border:1px solid rgba(15,23,42,.08);
}

.mg-modal-label{
  color:#64748b;
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-modal-paragraph,
.mg-modal-question{
  margin:10px 0 0;
  font-size:15px;
  line-height:1.75;
}

.mg-modal-options{
  margin-top:18px;
  display:grid;
  gap:10px;
}

.mg-modal-option{
  width:100%;
  display:grid;
  grid-template-columns:46px minmax(0,1fr);
  gap:12px;
  align-items:center;
  padding:14px 16px;
  border-radius:18px;
  border:1px solid rgba(15,23,42,.08);
  background:#fff;
  cursor:pointer;
  color:var(--mg-ink);
  text-align:left;
  transition:.16s ease;
}

.mg-modal-option:hover{
  transform:translateY(-1px);
  box-shadow:0 16px 28px rgba(15,23,42,.08);
}

.mg-modal-option.active{
  border-color:transparent;
  color:#fff;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  box-shadow:0 18px 32px rgba(37,99,235,.2);
}

.mg-modal-option-mark{
  width:32px;
  height:32px;
  border-radius:999px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  font-size:13px;
  font-weight:900;
  background:rgba(15,23,42,.06);
}

.mg-modal-option.active .mg-modal-option-mark{
  background:rgba(255,255,255,.18);
}

.mg-modal-footer{
  margin-top:18px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  flex-wrap:wrap;
}

.mg-modal-feedback{
  min-height:20px;
  color:var(--mg-muted);
  font-size:13px;
  font-weight:800;
}

.mg-modal-feedback.is-success{
  color:#166534;
}

.mg-modal-feedback.is-error{
  color:#b91c1c;
}

.mg-modal-submit{
  min-height:46px;
  padding:0 18px;
  border:none;
  border-radius:15px;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  color:#fff;
  font-size:14px;
  font-weight:900;
  cursor:pointer;
  box-shadow:0 18px 34px rgba(37,99,235,.22);
}

.mg-modal-submit:disabled{
  opacity:.65;
  cursor:not-allowed;
  box-shadow:none;
}

.mg-fab-shell{
  position:fixed;
  right:22px;
  top:96px;
  z-index:55;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:12px;
  pointer-events:none;
}

.mg-fab-menu{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:10px;
}

.mg-fab-action{
  display:flex;
  align-items:center;
  gap:10px;
  transform:translateX(10px) scale(.9);
  opacity:0;
  pointer-events:none;
  transition:transform .18s ease, opacity .18s ease;
}

.mg-fab-shell.is-open .mg-fab-action{
  transform:translateX(0) scale(1);
  opacity:1;
  pointer-events:auto;
}

.mg-fab-label{
  padding:10px 14px;
  border-radius:999px;
  background:rgba(15,23,42,.88);
  color:#fff;
  font-size:12px;
  font-weight:900;
  letter-spacing:.06em;
  text-transform:uppercase;
  box-shadow:0 14px 30px rgba(15,23,42,.22);
}

.mg-fab-item,
.mg-fab-main{
  width:56px;
  height:56px;
  border:none;
  border-radius:999px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  pointer-events:auto;
  color:#fff;
  font-size:24px;
  background:linear-gradient(135deg, var(--mg-brand-from), var(--mg-brand-to));
  box-shadow:0 22px 42px rgba(15,23,42,.18);
  transition:transform .18s ease, box-shadow .18s ease;
}

.mg-fab-item:hover,
.mg-fab-main:hover{
  transform:translateY(-2px);
  box-shadow:0 26px 46px rgba(15,23,42,.22);
}

.mg-fab-main{
  position:relative;
  width:60px;
  height:60px;
  background:linear-gradient(145deg, #16233f, #0b1222 64%, #070c18);
  box-shadow:0 24px 46px rgba(15,23,42,.24), inset 0 0 0 1px rgba(255,255,255,.08);
}

.mg-fab-main::after{
  content:"";
  position:absolute;
  inset:-6px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.24);
}

.mg-fab-plus{
  position:relative;
  display:block;
  width:22px;
  height:22px;
}

.mg-fab-plus::before,
.mg-fab-plus::after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  width:20px;
  height:3px;
  border-radius:999px;
  background:linear-gradient(90deg,#f8fafc,#bfdbfe);
  transform:translate(-50%, -50%);
  box-shadow:0 4px 12px rgba(59,130,246,.18);
}

.mg-fab-plus::after{
  width:3px;
  height:20px;
}

.mg-fab-shell.is-open .mg-fab-main{
  transform:rotate(45deg);
}

body.dark .mg-fab-label{
  background:rgba(2,6,23,.92);
}

body.dark .mg-fab-main,
body.dark .mg-fab-item{
  box-shadow:0 22px 40px rgba(2,6,23,.42);
}

@media (max-width: 1080px){
  .mg-hero-grid,
  .mg-chess-layout{
    grid-template-columns:1fr;
  }
}

@media (max-width: 720px){
  .mg-shell{
    width:min(100% - 20px, 1220px);
    padding:20px 0 40px;
  }

  .mg-hero,
  .mg-panel,
  .mg-board-shell{
    padding:18px;
    border-radius:24px;
  }

  .mg-difficulty-grid,
  .mg-history{
    grid-template-columns:1fr;
  }

  .mg-topbar{
    align-items:stretch;
  }

  .mg-topbar-actions{
    width:100%;
  }

  .mg-link-btn{
    flex:1 1 180px;
  }

  .mg-fab-shell{
    top:88px;
    bottom:auto;
    right:16px;
  }

  .mg-fab-main{
    width:56px;
    height:56px;
  }

  .mg-fab-label{
    display:none;
  }

  .mg-modal-overlay{
    padding:14px;
  }

  .mg-modal-card{
    padding:18px;
    border-radius:22px;
  }

  .mg-modal-top{
    align-items:center;
  }
}

/* Chess Arena refinement layer */
.mg-chess-layout{
  gap:24px;
  align-items:start;
}

.mg-chess-board-shell{
  padding:24px;
  border-radius:32px;
  background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(247,250,255,.94));
  border:1px solid rgba(15,23,42,.06);
  box-shadow:0 34px 90px rgba(15,23,42,.1);
}

.mg-side-stack{
  display:grid;
  gap:16px;
}

.mg-side-card{
  border-radius:28px;
  padding:20px;
  background:linear-gradient(180deg, rgba(255,255,255,.98), rgba(248,251,255,.94));
  border:1px solid rgba(15,23,42,.06);
  box-shadow:0 24px 62px rgba(15,23,42,.08);
}

.mg-side-stat-grid{
  margin-top:16px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
}

.mg-side-stat{
  padding:16px;
  border-radius:20px;
  background:#fff;
  border:1px solid rgba(15,23,42,.07);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9);
}

.mg-stack-block{
  margin-top:18px;
}

.mg-mode-switch{
  margin-top:16px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:8px;
  padding:6px;
  border-radius:20px;
  background:#edf3fb;
  border:1px solid rgba(15,23,42,.06);
}

.mg-mode-btn{
  min-height:46px;
  padding:0 14px;
  border:none;
  border-radius:15px;
  background:transparent;
  color:#516074;
  font-size:14px;
  font-weight:900;
  cursor:pointer;
  transition:background .18s ease, color .18s ease, box-shadow .18s ease, transform .18s ease;
}

.mg-mode-btn:hover{
  transform:translateY(-1px);
}

.mg-mode-btn.active{
  color:#0f172a;
  background:#fff;
  box-shadow:0 16px 30px rgba(15,23,42,.08);
}

.mg-room-grid{
  margin-top:16px;
  display:grid;
  gap:14px;
}

.mg-room-line{
  display:grid;
}

.mg-input-shell{
  display:grid;
  gap:8px;
  color:var(--mg-muted);
  font-size:12px;
  font-weight:800;
}

.mg-input{
  width:100%;
  min-height:48px;
  padding:0 14px;
  border-radius:16px;
  border:1px solid rgba(15,23,42,.1);
  background:#fff;
  color:var(--mg-ink);
  font-size:15px;
  font-weight:800;
  letter-spacing:.08em;
  text-transform:uppercase;
  outline:none;
  transition:border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.mg-input:focus{
  border-color:rgba(37,99,235,.42);
  box-shadow:0 0 0 4px rgba(37,99,235,.12);
}

.mg-input:disabled{
  background:#f4f7fb;
  color:#94a3b8;
}

.mg-room-active{
  padding:16px;
  border-radius:22px;
  background:linear-gradient(180deg, #fbfdff, #f1f6ff);
  border:1px solid rgba(37,99,235,.12);
}

.mg-lobby-toolbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}

.mg-lobby-count{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:36px;
  height:36px;
  padding:0 12px;
  border-radius:999px;
  background:#0f172a;
  color:#fff;
  font-size:14px;
  font-weight:900;
}

.mg-lobby-list{
  display:grid;
  gap:12px;
}

.mg-lobby-card{
  padding:14px;
  border-radius:20px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
  box-shadow:0 18px 32px rgba(15,23,42,.06);
}

.mg-lobby-card-top{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.mg-lobby-card-top strong{
  display:block;
  font-size:16px;
  font-weight:900;
  letter-spacing:-.03em;
}

.mg-lobby-card-top span{
  display:block;
  margin-top:4px;
  color:#64748b;
  font-size:12px;
  font-weight:800;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-lobby-badge{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:30px;
  padding:0 10px;
  border-radius:999px;
  background:rgba(34,197,94,.12);
  color:#15803d;
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-lobby-meta{
  margin-top:10px;
  color:#64748b;
  font-size:13px;
  font-weight:700;
  line-height:1.6;
}

.mg-lobby-join{
  margin-top:12px;
  width:100%;
}

.mg-reaction-card{
  padding:18px;
  border-radius:24px;
  background:
    radial-gradient(circle at top right, rgba(250,204,21,.16), transparent 38%),
    linear-gradient(180deg, #0f172a, #111827);
  color:#f8fafc;
  box-shadow:0 22px 46px rgba(15,23,42,.18);
}

.mg-reaction-kicker{
  color:#facc15;
  font-size:11px;
  font-weight:900;
  letter-spacing:.1em;
  text-transform:uppercase;
}

.mg-reaction-quote{
  margin-top:12px;
  font-size:19px;
  line-height:1.55;
  font-weight:800;
  letter-spacing:-.03em;
}

.mg-reaction-meta{
  margin-top:12px;
  color:#cbd5e1;
  font-size:13px;
  line-height:1.7;
  font-weight:700;
}

.mg-player-grid{
  margin-top:16px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:12px;
}

.mg-player-card{
  position:relative;
  overflow:hidden;
  padding:16px;
  border-radius:22px;
  border:1px solid rgba(15,23,42,.08);
  background:#fff;
  box-shadow:0 18px 36px rgba(15,23,42,.06);
  transition:border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}

.mg-player-card.white{
  background:linear-gradient(180deg, #ffffff, #f8fbff);
}

.mg-player-card.black{
  background:linear-gradient(180deg, #1f2937, #0f172a);
  border-color:rgba(15,23,42,.18);
  color:#f8fafc;
}

.mg-player-card.is-active{
  transform:translateY(-2px);
  border-color:rgba(37,99,235,.24);
  box-shadow:0 22px 44px rgba(37,99,235,.14);
}

.mg-player-role{
  display:block;
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:#64748b;
}

.mg-player-card.black .mg-player-role,
.mg-player-card.black .mg-player-meta{
  color:#cbd5e1;
}

.mg-player-card strong{
  display:block;
  margin-top:10px;
  font-size:20px;
  font-weight:900;
  letter-spacing:-.03em;
}

.mg-player-meta{
  display:block;
  margin-top:6px;
  color:#64748b;
  font-size:13px;
  font-weight:700;
}

.mg-board-player-inline{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
}

.mg-board-player-chip{
  min-width:122px;
  padding:10px 14px;
  border-radius:18px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
  box-shadow:0 14px 28px rgba(15,23,42,.06);
}

.mg-board-player-chip span{
  display:block;
  color:#64748b;
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.mg-board-player-chip strong{
  display:block;
  margin-top:6px;
  font-size:16px;
  font-weight:900;
  letter-spacing:-.03em;
}

.mg-board-player-chip.black{
  background:#111827;
  border-color:rgba(15,23,42,.16);
  color:#f8fafc;
}

.mg-board-player-chip.black span{
  color:#cbd5e1;
}

.mg-board-wrap-flat{
  margin-top:20px;
  padding:12px;
  border-radius:26px;
  background:linear-gradient(180deg, #2d3b2f, #1f2a20);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.08),
    0 28px 60px rgba(15,23,42,.2);
}

.mg-board-wrap-flat .mg-board{
  border-radius:18px;
  background:#d8dfc0;
  border:1px solid rgba(17,24,39,.22);
}

.mg-board-wrap-flat .mg-square{
  transform:none;
  transition:background .14s ease, box-shadow .14s ease, filter .14s ease;
}

.mg-board-wrap-flat .mg-square:hover{
  transform:none;
  filter:brightness(1.02);
}

.mg-board-wrap-flat .mg-square.light{
  background:#EEEED2;
}

.mg-board-wrap-flat .mg-square.dark{
  background:#769656;
}

.mg-board-wrap-flat .mg-square.is-selected{
  box-shadow:inset 0 0 0 3px rgba(59,130,246,.9);
}

.mg-board-wrap-flat .mg-square.is-last-move::before,
.mg-board-wrap-flat .mg-square.is-check::before{
  content:"";
  position:absolute;
  inset:0;
}

.mg-board-wrap-flat .mg-square.is-last-move::before{
  background:rgba(246,246,105,.44);
}

.mg-board-wrap-flat .mg-square.is-check::before{
  background:radial-gradient(circle at center, rgba(239,68,68,.36), rgba(185,28,28,.2));
}

.mg-board-wrap-flat .mg-square.is-target::after{
  content:"";
  position:absolute;
  width:18px;
  height:18px;
  border-radius:999px;
  background:rgba(17,24,39,.2);
}

.mg-board-wrap-flat .mg-square.is-capture::after{
  content:"";
  position:absolute;
  inset:8%;
  border-radius:999px;
  border:5px solid rgba(17,24,39,.22);
  background:transparent;
}

.mg-board-wrap-flat .mg-square-label{
  opacity:.92;
}

.mg-board-wrap-flat .mg-square.light .mg-square-label{
  color:rgba(118,150,86,.92);
}

.mg-board-wrap-flat .mg-square.dark .mg-square-label{
  color:rgba(238,238,210,.92);
}

.mg-board-wrap-flat .mg-piece{
  font-size:clamp(30px, 4vw, 48px);
  transform:translateY(-1px);
  text-shadow:none;
  filter:none;
}

.mg-board-wrap-flat .mg-piece.white{
  color:#fbfbf6;
  text-shadow:
    0 1px 0 rgba(255,255,255,.82),
    0 6px 10px rgba(15,23,42,.12);
}

.mg-board-wrap-flat .mg-piece.black{
  color:#1f2937;
  text-shadow:
    0 1px 0 rgba(255,255,255,.14),
    0 6px 10px rgba(15,23,42,.18);
}

.mg-board-wrap-flat .mg-square.is-selected .mg-piece,
.mg-board-wrap-flat .mg-square:hover .mg-piece{
  transform:translateY(-2px) scale(1.04);
}

.mg-legend{
  margin-top:18px;
}

.mg-legend-swatch.turn{
  background:#3b82f6;
}

.mg-vocab-modal-card{
  width:min(640px, 100%);
}

.mg-vocab-word-shell{
  margin-top:18px;
  padding:18px;
  border-radius:24px;
  background:linear-gradient(180deg, #f8fbff, #eef5ff);
  border:1px solid rgba(37,99,235,.1);
}

.mg-vocab-word{
  margin-top:10px;
  font-size:clamp(34px, 4vw, 44px);
  line-height:1.02;
  letter-spacing:-.05em;
  font-weight:900;
  color:#0f172a;
}

.mg-vocab-instruction{
  margin-top:8px;
  color:#64748b;
  font-size:14px;
  font-weight:700;
}

@media (max-width: 1080px){
  .mg-side-stat-grid,
  .mg-player-grid{
    grid-template-columns:1fr;
  }
}

@media (max-width: 720px){
  .mg-chess-board-shell,
  .mg-side-card{
    padding:18px;
    border-radius:24px;
  }

  .mg-mode-switch{
    grid-template-columns:1fr;
  }

  .mg-board-player-inline{
    width:100%;
  }

  .mg-board-player-chip{
    flex:1 1 0;
    min-width:0;
  }

  .mg-room-grid,
  .mg-player-grid,
  .mg-side-stat-grid{
    gap:10px;
  }
}

/* WSA City */
.city-shell{
  width:min(1380px, calc(100% - 32px));
}

.city-hero .mg-title{
  max-width:820px;
}

.city-hero-panel{
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  min-height:236px;
}

.city-hero-snapshot{
  margin-top:24px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:12px;
}

.city-hero-snapshot > div{
  padding:16px;
  border-radius:20px;
  background:rgba(255,255,255,.82);
  border:1px solid rgba(255,255,255,.88);
}

.city-hero-snapshot strong{
  display:block;
  margin-top:8px;
  font-size:34px;
  line-height:1;
  font-weight:900;
  letter-spacing:-.04em;
}

.city-hero-meter,
.city-level-track{
  overflow:hidden;
  height:10px;
  border-radius:999px;
  background:rgba(15,23,42,.08);
}

.city-hero-meter{
  margin-top:20px;
}

.city-hero-meter span,
.city-level-track span{
  display:block;
  width:0;
  height:100%;
  border-radius:inherit;
  background:linear-gradient(90deg, #059669, #0ea5e9, #facc15);
  transition:width .35s ease;
}

.city-resource-section{
  margin-top:22px;
}

.city-resource-grid{
  margin-top:16px;
  display:grid;
  grid-template-columns:repeat(5, minmax(0, 1fr));
  gap:12px;
}

.city-resource-card{
  position:relative;
  overflow:hidden;
  min-height:152px;
  padding:18px;
  border-radius:24px;
  background:rgba(255,255,255,.92);
  border:1px solid rgba(255,255,255,.86);
  box-shadow:0 24px 56px rgba(15,23,42,.08);
}

.city-resource-card::before{
  content:"";
  position:absolute;
  inset:auto -40px -52px auto;
  width:116px;
  height:116px;
  border-radius:999px;
  opacity:.18;
  background:var(--city-resource-color, #2563eb);
}

.city-resource-card.green{ --city-resource-color:#059669; }
.city-resource-card.violet{ --city-resource-color:#7c3aed; }
.city-resource-card.blue{ --city-resource-color:#0ea5e9; }
.city-resource-card.amber{ --city-resource-color:#d97706; }
.city-resource-card.slate{ --city-resource-color:#334155; }

.city-resource-source,
.city-resource-label,
.city-resource-card small{
  position:relative;
  z-index:1;
  display:block;
}

.city-resource-source{
  color:#64748b;
  font-size:11px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.city-resource-card strong{
  position:relative;
  z-index:1;
  display:block;
  margin-top:10px;
  color:#0f172a;
  font-size:34px;
  line-height:1;
  font-weight:900;
  letter-spacing:-.04em;
}

.city-resource-label{
  margin-top:8px;
  font-size:14px;
  font-weight:900;
}

.city-resource-card small{
  margin-top:8px;
  color:#64748b;
  font-size:12px;
  line-height:1.55;
  font-weight:800;
}

.city-resource-card.is-deficit{
  border-color:rgba(239,68,68,.24);
  background:#fff5f5;
}

.city-layout{
  margin-top:22px;
  display:grid;
  grid-template-columns:minmax(0, 1.22fr) minmax(340px, .78fr);
  gap:20px;
  align-items:start;
}

.city-map-shell{
  padding:24px;
  border-radius:34px;
}

.city-map-hud{
  display:grid;
  grid-template-columns:repeat(4, minmax(0, 1fr));
  gap:10px;
  margin-top:16px;
}

.city-hud-card{
  position:relative;
  overflow:hidden;
  min-height:92px;
  padding:13px 14px;
  border-radius:22px;
  border:1px solid rgba(15,23,42,.08);
  background:rgba(255,255,255,.82);
  box-shadow:0 14px 28px rgba(15,23,42,.07);
}

.city-hud-card::after{
  content:"";
  position:absolute;
  right:-18px;
  top:-18px;
  width:64px;
  height:64px;
  border-radius:999px;
  background:color-mix(in srgb, var(--mg-brand-from) 16%, transparent);
}

.city-hud-card strong{
  position:relative;
  z-index:1;
  display:block;
  margin-top:8px;
  color:#0f172a;
  font-size:26px;
  line-height:1;
  font-weight:900;
  letter-spacing:-.04em;
}

.city-hud-card small{
  position:relative;
  z-index:1;
  display:block;
  margin-top:8px;
  color:#64748b;
  font-size:11px;
  line-height:1.35;
  font-weight:850;
}

.city-hud-card.primary{
  background:linear-gradient(135deg, #eff6ff, #fff);
}

.city-hud-card.is-ready{
  border-color:rgba(250,204,21,.42);
  background:linear-gradient(135deg, #fffbeb, #fff);
}

.city-hud-card.is-ready::after{
  background:rgba(250,204,21,.28);
  box-shadow:0 0 22px rgba(250,204,21,.32);
}

.city-hud-card.mood{
  background:linear-gradient(135deg, #f8fafc, #eef2ff);
}

.city-hud-card.resource{
  background:linear-gradient(135deg, #ecfdf5, #fff);
}

.city-map{
  position:relative;
  overflow:hidden;
  min-height:640px;
  margin-top:18px;
  border-radius:30px;
  background:
    linear-gradient(180deg, rgba(219,234,254,.92) 0 26%, rgba(187,247,208,.82) 26% 100%),
    #dff7ea;
  border:1px solid rgba(255,255,255,.92);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.9),
    inset 0 -40px 80px rgba(15,23,42,.08),
    0 28px 62px rgba(15,23,42,.12);
  isolation:isolate;
}

.city-map::before,
.city-map::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
}

.city-map::before{
  z-index:0;
  background:
    radial-gradient(circle at 18% 24%, rgba(255,255,255,.42), transparent 24%),
    radial-gradient(circle at 86% 18%, rgba(125,211,252,.28), transparent 22%),
    linear-gradient(180deg, rgba(255,255,255,.08), transparent 48%);
}

.city-map::after{
  z-index:12;
  opacity:.22;
  background:linear-gradient(110deg, transparent 0 32%, rgba(255,255,255,.72) 46%, transparent 58% 100%);
  transform:translateX(-70%);
  animation:city-light-sweep 12s ease-in-out infinite;
}

.city-map-dawn{
  background:
    linear-gradient(180deg, rgba(254,215,170,.9) 0 23%, rgba(191,219,254,.88) 23% 37%, rgba(187,247,208,.86) 37% 100%),
    #dff7ea;
}

.city-map-evening{
  background:
    linear-gradient(180deg, rgba(251,191,36,.42) 0 18%, rgba(147,197,253,.82) 18% 34%, rgba(134,239,172,.8) 34% 100%),
    #dff7ea;
}

.city-map-night{
  background:
    radial-gradient(circle at 12% 12%, rgba(147,197,253,.18), transparent 24%),
    linear-gradient(180deg, rgba(15,23,42,.9) 0 28%, rgba(30,64,175,.72) 28% 38%, rgba(21,128,61,.72) 38% 100%),
    #0f172a;
}

.city-sky-glow{
  position:absolute;
  left:4%;
  top:6%;
  width:48%;
  height:26%;
  border-radius:999px;
  background:radial-gradient(circle, rgba(255,255,255,.42), rgba(255,255,255,0) 68%);
  filter:blur(2px);
  z-index:0;
  animation:city-sky-breathe 6s ease-in-out infinite;
}

.city-sun-or-moon{
  position:absolute;
  right:11%;
  top:8%;
  width:74px;
  height:74px;
  border-radius:999px;
  background:
    radial-gradient(circle at 32% 28%, rgba(255,255,255,.96), rgba(255,255,255,.18) 30%, transparent 31%),
    linear-gradient(135deg, #facc15, #fb923c);
  box-shadow:0 0 34px rgba(250,204,21,.42), 0 16px 32px rgba(15,23,42,.12);
  z-index:0;
  animation:city-sun-float 7s ease-in-out infinite;
}

.city-map-night .city-sun-or-moon{
  background:
    radial-gradient(circle at 38% 34%, rgba(148,163,184,.22) 0 9px, transparent 10px),
    linear-gradient(135deg, #f8fafc, #cbd5e1);
  box-shadow:0 0 28px rgba(226,232,240,.46), 0 16px 32px rgba(15,23,42,.18);
}

.city-map-grid{
  position:absolute;
  inset:18% 5% 7%;
  border-radius:28px;
  background:
    linear-gradient(30deg, rgba(255,255,255,.34) 1px, transparent 1px),
    linear-gradient(150deg, rgba(255,255,255,.3) 1px, transparent 1px),
    linear-gradient(180deg, rgba(255,255,255,.2), rgba(255,255,255,.06));
  background-size:58px 58px;
  transform:skewY(-8deg);
  z-index:0;
}

.city-skyline{
  position:absolute;
  left:8%;
  right:8%;
  top:20%;
  height:76px;
  display:flex;
  align-items:flex-end;
  gap:10px;
  opacity:.22;
  z-index:0;
  transform:skewX(-9deg);
}

.city-skyline span{
  flex:1;
  height:48px;
  border-radius:8px 8px 0 0;
  background:linear-gradient(180deg, rgba(15,23,42,.34), rgba(15,23,42,.08));
  box-shadow:inset 0 12px 0 rgba(255,255,255,.14);
}

.city-skyline span:nth-child(1){ height:52px; }
.city-skyline span:nth-child(2){ height:68px; }
.city-skyline span:nth-child(3){ height:44px; }
.city-skyline span:nth-child(4){ height:76px; }
.city-skyline span:nth-child(5){ height:60px; }
.city-skyline span:nth-child(6){ height:50px; }

.city-river{
  position:absolute;
  left:-8%;
  right:-8%;
  bottom:7%;
  height:92px;
  border-radius:999px 999px 0 0;
  background:
    repeating-linear-gradient(110deg, rgba(255,255,255,.38) 0 22px, transparent 22px 48px),
    linear-gradient(135deg, rgba(56,189,248,.58), rgba(37,99,235,.36));
  box-shadow:inset 0 12px 22px rgba(255,255,255,.22), 0 -18px 36px rgba(14,165,233,.12);
  transform:rotate(-4deg);
  z-index:1;
  opacity:.72;
  animation:city-river-flow 9s linear infinite;
}

.city-road{
  position:absolute;
  left:50%;
  top:58%;
  width:76%;
  height:46px;
  border-radius:999px;
  background:
    repeating-linear-gradient(90deg, transparent 0 34px, rgba(255,255,255,.52) 34px 52px),
    linear-gradient(180deg, #94a3b8, #64748b);
  box-shadow:0 18px 34px rgba(15,23,42,.14);
  opacity:.82;
  z-index:1;
}

.city-road-main{
  transform:translate(-50%, -50%) rotate(-10deg);
}

.city-road-cross{
  width:60%;
  transform:translate(-50%, -50%) rotate(48deg);
}

.city-park{
  position:absolute;
  width:138px;
  height:82px;
  border-radius:46px;
  background:
    radial-gradient(circle at 20% 45%, #16a34a 0 11px, transparent 12px),
    radial-gradient(circle at 44% 34%, #22c55e 0 16px, transparent 17px),
    radial-gradient(circle at 68% 48%, #15803d 0 13px, transparent 14px),
    linear-gradient(135deg, #bbf7d0, #86efac);
  border:1px solid rgba(255,255,255,.72);
  box-shadow:0 18px 30px rgba(21,128,61,.16);
  z-index:2;
}

.city-park::before,
.city-park::after{
  content:"";
  position:absolute;
  width:18px;
  height:18px;
  border-radius:999px;
  background:#dcfce7;
  box-shadow:24px 8px 0 #bbf7d0, 54px -4px 0 #dcfce7, 84px 10px 0 #bbf7d0;
  opacity:.58;
}

.city-park::before{
  left:14px;
  bottom:16px;
}

.city-park::after{
  right:16px;
  top:20px;
  transform:scale(.76);
}

.city-park-left{
  left:9%;
  top:34%;
}

.city-park-right{
  right:8%;
  top:29%;
}

.city-decoration-layer{
  position:absolute;
  inset:0;
  pointer-events:none;
  z-index:3;
}

.city-decoration{
  position:absolute;
  display:block;
  opacity:.16;
  filter:grayscale(.6);
  transition:opacity .28s ease, filter .28s ease, transform .28s ease;
}

.city-decoration.is-unlocked{
  opacity:1;
  filter:none;
}

.city-decoration > span{
  position:absolute;
  left:50%;
  top:100%;
  min-width:92px;
  padding:5px 8px;
  border-radius:999px;
  background:rgba(255,255,255,.86);
  border:1px solid rgba(15,23,42,.08);
  color:#334155;
  font-size:10px;
  font-weight:900;
  text-align:center;
  transform:translateX(-50%);
  box-shadow:0 10px 18px rgba(15,23,42,.1);
  opacity:0;
}

.city-decoration.is-unlocked > span{
  opacity:.82;
}

.city-decoration-academy-gate{
  left:44%;
  bottom:7%;
  width:96px;
  height:68px;
  border-radius:48px 48px 10px 10px;
  border:12px solid #334155;
  border-bottom:0;
  box-shadow:inset 0 0 0 7px rgba(255,255,255,.24), 0 16px 24px rgba(15,23,42,.16);
}

.city-decoration-academy-gate::before,
.city-decoration-academy-gate::after{
  content:"";
  position:absolute;
  bottom:-18px;
  width:18px;
  height:42px;
  border-radius:8px;
  background:linear-gradient(180deg, #475569, #1e293b);
}

.city-decoration-academy-gate::before{ left:-8px; }
.city-decoration-academy-gate::after{ right:-8px; }

.city-decoration-central-fountain{
  left:52%;
  top:55%;
  width:72px;
  height:46px;
  border-radius:999px;
  background:
    radial-gradient(circle at 50% 28%, rgba(255,255,255,.92) 0 8px, transparent 9px),
    radial-gradient(circle at 50% 50%, #38bdf8 0 17px, #0ea5e9 18px 28px, #0369a1 29px 100%);
  box-shadow:0 14px 26px rgba(14,165,233,.22);
  transform:translate(-50%, -50%);
  animation:city-fountain-pulse 2.6s ease-in-out infinite;
}

.city-decoration-banner-word,
.city-decoration-banner-grammar{
  width:74px;
  height:34px;
  border-radius:8px 18px 18px 8px;
  background:linear-gradient(135deg, #f8fafc, #bbf7d0);
  box-shadow:0 10px 18px rgba(15,23,42,.13);
}

.city-decoration-banner-word{
  left:11%;
  top:45%;
}

.city-decoration-banner-grammar{
  left:35%;
  top:29%;
  background:linear-gradient(135deg, #f8fafc, #ddd6fe);
}

.city-decoration-banner-word::before,
.city-decoration-banner-grammar::before{
  content:"";
  position:absolute;
  left:-7px;
  top:-7px;
  width:5px;
  height:48px;
  border-radius:999px;
  background:#334155;
}

.city-decoration-banner-word::after{
  content:"Aa";
  position:absolute;
  inset:0;
  display:grid;
  place-items:center;
  color:#047857;
  font-size:14px;
  font-weight:900;
}

.city-decoration-banner-grammar::after{
  content:"{}";
  position:absolute;
  inset:0;
  display:grid;
  place-items:center;
  color:#6d28d9;
  font-size:15px;
  font-weight:900;
}

.city-decoration-city-statue{
  right:17%;
  bottom:21%;
  width:54px;
  height:76px;
}

.city-decoration-city-statue::before{
  content:"";
  position:absolute;
  left:50%;
  top:0;
  width:28px;
  height:28px;
  border-radius:999px;
  background:linear-gradient(135deg, #f8fafc, #94a3b8);
  box-shadow:0 8px 18px rgba(15,23,42,.18);
  transform:translateX(-50%);
}

.city-decoration-city-statue::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:0;
  width:54px;
  height:48px;
  border-radius:12px 12px 8px 8px;
  background:linear-gradient(135deg, #cbd5e1, #64748b);
  transform:translateX(-50%);
  clip-path:polygon(50% 0, 84% 100%, 16% 100%);
}

.city-decoration-vault-lights{
  right:23%;
  bottom:13%;
  width:84px;
  height:84px;
  border-radius:999px;
  background:radial-gradient(circle, rgba(250,204,21,.42), rgba(250,204,21,0) 68%);
  animation:city-vault-spotlight 2.4s ease-in-out infinite;
}

.city-cloud{
  position:absolute;
  width:130px;
  height:42px;
  border-radius:999px;
  background:rgba(255,255,255,.72);
  box-shadow:
    24px -12px 0 rgba(255,255,255,.64),
    56px 1px 0 rgba(255,255,255,.56);
  z-index:0;
  animation:city-cloud-drift 18s linear infinite;
}

.city-cloud-one{
  top:52px;
  left:8%;
}

.city-cloud-two{
  top:96px;
  right:18%;
  transform:scale(.82);
  animation-duration:24s;
  animation-direction:reverse;
}

.city-cloud-three{
  top:142px;
  left:42%;
  transform:scale(.58);
  opacity:.56;
  animation-duration:28s;
}

.city-birds{
  position:absolute;
  left:10%;
  top:17%;
  width:120px;
  height:34px;
  z-index:1;
  opacity:.55;
  animation:city-birds-fly 16s linear infinite;
}

.city-birds span{
  position:absolute;
  width:18px;
  height:9px;
  border-top:2px solid rgba(15,23,42,.42);
  border-radius:50% 50% 0 0;
  transform:rotate(-8deg);
}

.city-birds span:nth-child(1){ left:0; top:16px; }
.city-birds span:nth-child(2){ left:42px; top:4px; transform:scale(.82) rotate(8deg); }
.city-birds span:nth-child(3){ left:78px; top:19px; transform:scale(.68) rotate(-4deg); }

.city-traffic{
  position:absolute;
  left:50%;
  top:58%;
  width:76%;
  height:46px;
  z-index:3;
  pointer-events:none;
}

.city-traffic-main{
  transform:translate(-50%, -50%) rotate(-10deg);
}

.city-traffic-cross{
  width:60%;
  transform:translate(-50%, -50%) rotate(48deg);
}

.city-car{
  position:absolute;
  top:12px;
  left:-8%;
  width:28px;
  height:15px;
  border-radius:9px 10px 5px 5px;
  background:#10b981;
  box-shadow:0 8px 12px rgba(15,23,42,.16);
  animation:city-car-drive 9s linear infinite;
}

.city-car::before,
.city-car::after{
  content:"";
  position:absolute;
  bottom:-3px;
  width:6px;
  height:6px;
  border-radius:999px;
  background:#0f172a;
}

.city-car::before{ left:5px; }
.city-car::after{ right:5px; }

.city-car.car-blue{
  top:25px;
  background:#2563eb;
  animation-duration:12s;
  animation-delay:-4s;
}

.city-car.car-amber{
  top:7px;
  background:#f59e0b;
  animation-duration:15s;
  animation-delay:-9s;
}

.city-car.car-red{
  top:14px;
  background:#ef4444;
  animation-duration:11s;
  animation-delay:-2s;
}

.city-car.car-slate{
  top:28px;
  background:#475569;
  animation-duration:14s;
  animation-delay:-7s;
}

.city-streetlight{
  position:absolute;
  width:5px;
  height:34px;
  border-radius:999px;
  background:linear-gradient(180deg, #64748b, #334155);
  z-index:3;
  opacity:.62;
}

.city-streetlight::before{
  content:"";
  position:absolute;
  left:50%;
  top:-9px;
  width:18px;
  height:18px;
  border-radius:999px;
  background:#fef3c7;
  box-shadow:0 0 18px rgba(250,204,21,.62);
  transform:translateX(-50%);
  opacity:.72;
  animation:city-light-flicker 4s ease-in-out infinite;
}

.city-streetlight-1{ left:18%; top:50%; }
.city-streetlight-2{ left:28%; top:47%; }
.city-streetlight-3{ left:39%; top:44%; }
.city-streetlight-4{ left:51%; top:42%; }
.city-streetlight-5{ left:62%; top:45%; }
.city-streetlight-6{ left:73%; top:49%; }
.city-streetlight-7{ left:31%; top:61%; }
.city-streetlight-8{ left:43%; top:66%; }
.city-streetlight-9{ left:55%; top:62%; }
.city-streetlight-10{ left:67%; top:58%; }

.city-building{
  position:absolute;
  left:var(--city-x);
  top:var(--city-y);
  z-index:4;
  width:154px;
  height:188px;
  padding:0;
  border:none;
  background:transparent;
  color:#0f172a;
  cursor:pointer;
  transform:translate(-50%, -50%);
  transition:transform .18s ease, filter .18s ease;
}

.city-building:hover,
.city-building.is-selected{
  transform:translate(-50%, -53%);
  filter:drop-shadow(0 22px 22px rgba(15,23,42,.16));
}

.city-building::before{
  content:"";
  position:absolute;
  left:50%;
  bottom:20px;
  width:114px;
  height:34px;
  border-radius:999px;
  background:radial-gradient(ellipse, rgba(15,23,42,.22), rgba(15,23,42,0) 70%);
  transform:translateX(-50%);
  opacity:.62;
  z-index:-1;
}

.city-building-tile{
  position:absolute;
  left:50%;
  bottom:24px;
  width:116px;
  height:116px;
  border-radius:24px;
  background:
    linear-gradient(135deg, rgba(255,255,255,.58), rgba(255,255,255,.2)),
    linear-gradient(135deg, #dbeafe, #bfdbfe);
  border:1px solid rgba(255,255,255,.82);
  box-shadow:0 20px 32px rgba(15,23,42,.12);
  transform:translateX(-50%) rotate(45deg) skew(-5deg, -5deg);
}

.city-building-tile::before{
  content:"";
  position:absolute;
  inset:18px;
  border-radius:18px;
  border:1px dashed rgba(15,23,42,.18);
  opacity:.42;
}

.city-building-beacon{
  position:absolute;
  left:50%;
  bottom:82px;
  width:94px;
  height:94px;
  border-radius:999px;
  background:radial-gradient(circle, color-mix(in srgb, var(--city-accent) 28%, transparent), transparent 66%);
  transform:translateX(-50%);
  opacity:0;
  pointer-events:none;
}

.city-building.can-upgrade .city-building-beacon,
.city-building.is-selected .city-building-beacon{
  opacity:.72;
  animation:city-beacon-pulse 2.8s ease-in-out infinite;
}

.city-building-wing{
  position:absolute;
  left:50%;
  bottom:78px;
  width:34px;
  height:46px;
  border-radius:10px 10px 7px 7px;
  background:
    linear-gradient(90deg, rgba(255,255,255,.22), transparent 38%),
    linear-gradient(180deg, color-mix(in srgb, var(--city-accent) 54%, white), color-mix(in srgb, var(--city-accent) 80%, #0f172a));
  border:1px solid rgba(255,255,255,.46);
  box-shadow:inset -7px 0 12px rgba(15,23,42,.12), 0 12px 18px rgba(15,23,42,.14);
  opacity:0;
  transform:translateX(-50%);
}

.city-building-wing-left{
  margin-left:-45px;
}

.city-building-wing-right{
  margin-left:45px;
}

.city-building-level-2 .city-building-wing,
.city-building-level-3 .city-building-wing,
.city-building-level-4 .city-building-wing,
.city-building-level-5 .city-building-wing{
  opacity:.96;
}

.city-building-level-4 .city-building-wing,
.city-building-level-5 .city-building-wing{
  height:62px;
}

.city-building-core{
  position:absolute;
  left:50%;
  bottom:72px;
  width:68px;
  height:var(--city-height);
  border-radius:12px 12px 8px 8px;
  background:
    linear-gradient(90deg, rgba(255,255,255,.28), transparent 36%),
    linear-gradient(180deg, color-mix(in srgb, var(--city-accent) 70%, white), var(--city-accent));
  border:1px solid rgba(255,255,255,.52);
  box-shadow:
    inset -10px 0 18px rgba(15,23,42,.14),
    0 18px 28px rgba(15,23,42,.18);
  transform:translateX(-50%);
  transition:height .28s ease;
}

.city-building-core::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:-10px;
  width:84px;
  height:14px;
  border-radius:999px;
  background:rgba(15,23,42,.12);
  transform:translateX(-50%);
  filter:blur(3px);
  z-index:-1;
}

.city-building.is-empty .city-building-core{
  height:34px;
  opacity:.68;
  background:linear-gradient(180deg, #e2e8f0, #cbd5e1);
}

.city-building-roof{
  position:absolute;
  left:50%;
  top:-22px;
  width:82px;
  height:38px;
  border-radius:12px 12px 6px 6px;
  background:linear-gradient(135deg, color-mix(in srgb, var(--city-roof) 82%, white), var(--city-roof));
  transform:translateX(-50%) skewX(-12deg);
  box-shadow:0 12px 20px rgba(15,23,42,.14);
}

.city-building-crown{
  position:absolute;
  left:50%;
  top:-42px;
  width:68px;
  height:24px;
  border-radius:16px 16px 6px 6px;
  background:linear-gradient(135deg, #fde68a, #f59e0b);
  box-shadow:0 10px 22px rgba(245,158,11,.28);
  transform:translateX(-50%);
  opacity:0;
}

.city-building-crown::before{
  content:"";
  position:absolute;
  inset:-9px 8px auto;
  height:16px;
  background:
    radial-gradient(circle at 0 100%, #facc15 0 7px, transparent 8px),
    radial-gradient(circle at 50% 100%, #facc15 0 8px, transparent 9px),
    radial-gradient(circle at 100% 100%, #facc15 0 7px, transparent 8px);
}

.city-building-level-5 .city-building-crown{
  opacity:1;
}

.city-building-antenna{
  position:absolute;
  left:50%;
  top:-42px;
  width:4px;
  height:24px;
  border-radius:999px;
  background:linear-gradient(180deg, var(--city-roof), #0f172a);
  transform:translateX(-50%);
  opacity:0;
}

.city-building-level-3 .city-building-antenna,
.city-building-level-4 .city-building-antenna,
.city-building-level-5 .city-building-antenna{
  opacity:1;
}

.city-building-antenna::before{
  content:"";
  position:absolute;
  left:50%;
  top:-5px;
  width:10px;
  height:10px;
  border-radius:999px;
  background:#facc15;
  box-shadow:0 0 16px rgba(250,204,21,.85);
  transform:translateX(-50%);
}

.city-building.is-empty .city-building-roof{
  background:linear-gradient(135deg, #94a3b8, #64748b);
}

.city-building-windows{
  position:absolute;
  inset:18px 12px 12px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:7px;
  align-content:start;
}

.city-building-windows span{
  min-height:9px;
  border-radius:4px;
  background:rgba(255,255,255,.68);
  box-shadow:0 0 12px rgba(255,255,255,.35);
}

.city-map-night .city-building-windows span,
.city-map-evening .city-building-windows span{
  background:#fde68a;
  box-shadow:0 0 16px rgba(250,204,21,.7);
}

.city-building-entry{
  position:absolute;
  left:50%;
  bottom:0;
  width:18px;
  height:22px;
  border-radius:7px 7px 2px 2px;
  background:linear-gradient(180deg, rgba(15,23,42,.3), rgba(15,23,42,.58));
  transform:translateX(-50%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.16);
}

.city-building-motif{
  position:absolute;
  left:50%;
  bottom:28px;
  width:40px;
  height:30px;
  display:block;
  border-radius:10px;
  transform:translateX(-50%);
  opacity:.88;
  pointer-events:none;
}

.city-building-motif span{
  position:absolute;
  display:block;
}

.city-building.is-empty .city-building-motif{
  opacity:.28;
}

.city-building-sign{
  position:absolute;
  left:50%;
  bottom:56px;
  min-width:44px;
  min-height:26px;
  padding:5px 8px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border-radius:999px;
  background:rgba(255,255,255,.92);
  border:1px solid rgba(15,23,42,.08);
  color:var(--city-roof);
  font-size:11px;
  line-height:1;
  font-weight:950;
  letter-spacing:.02em;
  box-shadow:0 10px 16px rgba(15,23,42,.14);
  transform:translateX(-50%);
  z-index:5;
}

.city-building-flag{
  position:absolute;
  left:50%;
  bottom:calc(74px + var(--city-height));
  width:34px;
  height:20px;
  border-radius:4px 10px 10px 4px;
  background:linear-gradient(135deg, #f8fafc, color-mix(in srgb, var(--city-accent) 36%, white));
  box-shadow:0 8px 14px rgba(15,23,42,.12);
  transform:translateX(19px) skewY(-8deg);
  opacity:0;
  transform-origin:left center;
}

.city-building-level-4 .city-building-flag,
.city-building-level-5 .city-building-flag{
  opacity:1;
  animation:city-flag-wave 2.4s ease-in-out infinite;
}

.city-building-label{
  position:absolute;
  left:50%;
  bottom:0;
  width:150px;
  min-height:50px;
  padding:9px 10px;
  border-radius:16px;
  background:rgba(255,255,255,.9);
  border:1px solid rgba(255,255,255,.92);
  box-shadow:0 14px 26px rgba(15,23,42,.12);
  transform:translateX(-50%);
  text-align:center;
}

.city-building-label strong,
.city-building-label small{
  display:block;
}

.city-building-label strong{
  overflow:hidden;
  color:#0f172a;
  font-size:12px;
  line-height:1.18;
  font-weight:900;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.city-building-label small{
  margin-top:4px;
  color:#64748b;
  font-size:11px;
  font-weight:900;
  text-transform:uppercase;
  letter-spacing:.06em;
}

.city-building.is-selected .city-building-label{
  box-shadow:0 0 0 3px color-mix(in srgb, var(--city-accent) 24%, transparent), 0 18px 34px rgba(15,23,42,.16);
}

.city-building.can-upgrade .city-building-tile::after{
  content:"";
  position:absolute;
  inset:9px;
  border-radius:18px;
  border:2px solid rgba(250,204,21,.72);
  animation:city-ready-pulse 1.4s ease-in-out infinite;
}

.city-building.just-upgraded .city-building-core{
  animation:city-upgrade-pop .55s ease both;
}

.city-building.just-upgraded .city-building-beacon{
  opacity:1;
  animation:city-upgrade-glow 1.3s ease-out both;
}

.city-building-level-5 .city-building-core{
  box-shadow:
    inset -10px 0 18px rgba(15,23,42,.14),
    0 18px 28px rgba(15,23,42,.18),
    0 0 22px color-mix(in srgb, var(--city-accent) 34%, transparent);
}

.city-building--vocabulary-library .city-building-tile{
  background:
    linear-gradient(135deg, rgba(255,255,255,.56), rgba(255,255,255,.2)),
    linear-gradient(135deg, #dcfce7, #86efac);
}

.city-building--vocabulary-library .city-building-motif span{
  bottom:0;
  width:9px;
  height:28px;
  border-radius:4px;
  background:#f8fafc;
  box-shadow:inset 0 -7px 0 rgba(5,150,105,.22);
}

.city-building--vocabulary-library .city-building-motif span:nth-child(1){ left:4px; transform:rotate(-8deg); }
.city-building--vocabulary-library .city-building-motif span:nth-child(2){ left:15px; height:30px; background:#bbf7d0; }
.city-building--vocabulary-library .city-building-motif span:nth-child(3){ left:26px; transform:rotate(8deg); background:#dcfce7; }

.city-building--grammar-tower .city-building-tile{
  background:
    linear-gradient(135deg, rgba(255,255,255,.56), rgba(255,255,255,.2)),
    linear-gradient(135deg, #ede9fe, #c4b5fd);
}

.city-building--grammar-tower .city-building-motif{
  background:rgba(255,255,255,.18);
}

.city-building--grammar-tower .city-building-motif::before,
.city-building--grammar-tower .city-building-motif::after{
  position:absolute;
  top:2px;
  color:#fff;
  font-size:25px;
  line-height:1;
  font-weight:900;
}

.city-building--grammar-tower .city-building-motif::before{
  content:"{";
  left:4px;
}

.city-building--grammar-tower .city-building-motif::after{
  content:"}";
  right:4px;
}

.city-building--grammar-tower .city-building-motif span{
  left:50%;
  width:4px;
  height:4px;
  border-radius:999px;
  background:#fff;
  transform:translateX(-50%);
}

.city-building--grammar-tower .city-building-motif span:nth-child(1){ top:7px; }
.city-building--grammar-tower .city-building-motif span:nth-child(2){ top:14px; }
.city-building--grammar-tower .city-building-motif span:nth-child(3){ top:21px; }

.city-building--listening-studio .city-building-tile{
  background:
    linear-gradient(135deg, rgba(255,255,255,.56), rgba(255,255,255,.2)),
    linear-gradient(135deg, #e0f2fe, #7dd3fc);
}

.city-building--listening-studio .city-building-motif{
  border-radius:999px;
}

.city-building--listening-studio .city-building-motif span{
  left:50%;
  top:50%;
  border:2px solid rgba(255,255,255,.88);
  border-radius:999px;
  transform:translate(-50%, -50%);
}

.city-building--listening-studio .city-building-motif span:nth-child(1){ width:12px; height:12px; background:#fff; }
.city-building--listening-studio .city-building-motif span:nth-child(2){ width:25px; height:25px; opacity:.82; }
.city-building--listening-studio .city-building-motif span:nth-child(3){ width:38px; height:38px; opacity:.56; animation:city-sound-wave 2s ease-in-out infinite; }

.city-building--reading-lab .city-building-tile{
  background:
    linear-gradient(135deg, rgba(255,255,255,.56), rgba(255,255,255,.2)),
    linear-gradient(135deg, #fef3c7, #fbbf24);
}

.city-building--reading-lab .city-building-motif span{
  top:3px;
  width:17px;
  height:23px;
  border-radius:4px 8px 8px 4px;
  background:#fff7ed;
  box-shadow:inset 0 -4px 0 rgba(217,119,6,.2);
}

.city-building--reading-lab .city-building-motif span:nth-child(1){
  left:3px;
  transform:rotate(-8deg);
}

.city-building--reading-lab .city-building-motif span:nth-child(2){
  right:3px;
  transform:rotate(8deg);
}

.city-building--reading-lab .city-building-motif span:nth-child(3){
  left:13px;
  top:10px;
  width:14px;
  height:4px;
  border-radius:999px;
  background:#d97706;
}

.city-building--ranked-arena .city-building-core{
  border-radius:22px 22px 10px 10px;
}

.city-building--ranked-arena .city-building-motif span:nth-child(1){
  left:10px;
  top:5px;
  width:20px;
  height:16px;
  border-radius:4px 4px 10px 10px;
  background:#fde68a;
  box-shadow:inset 0 -5px 0 rgba(245,158,11,.34);
}

.city-building--ranked-arena .city-building-motif span:nth-child(2),
.city-building--ranked-arena .city-building-motif span:nth-child(3){
  top:9px;
  width:10px;
  height:10px;
  border:3px solid #fde68a;
  border-radius:999px;
}

.city-building--ranked-arena .city-building-motif span:nth-child(2){ left:3px; }
.city-building--ranked-arena .city-building-motif span:nth-child(3){ right:3px; }

.city-building--reward-vault .city-building-core{
  border-radius:18px 18px 14px 14px;
}

.city-building--reward-vault .city-building-motif{
  left:50%;
  bottom:22px;
  width:34px;
  height:34px;
  border:4px solid #f8fafc;
  border-radius:999px;
  background:radial-gradient(circle, #facc15 0 4px, #0f172a 5px 100%);
}

.city-building--reward-vault .city-building-motif span{
  left:50%;
  top:50%;
  width:2px;
  height:14px;
  border-radius:999px;
  background:#f8fafc;
  transform-origin:center bottom;
}

.city-building--reward-vault .city-building-motif span:nth-child(1){ transform:translate(-50%, -100%) rotate(0deg); }
.city-building--reward-vault .city-building-motif span:nth-child(2){ transform:translate(-50%, -100%) rotate(120deg); }
.city-building--reward-vault .city-building-motif span:nth-child(3){ transform:translate(-50%, -100%) rotate(240deg); }

.city-building--reward-vault .city-building-entry{
  width:30px;
  height:24px;
  border-radius:999px 999px 4px 4px;
  background:radial-gradient(circle, #facc15 0 4px, #0f172a 5px 100%);
}

.city-upgrade-burst{
  position:absolute;
  left:var(--city-x);
  top:var(--city-y);
  width:12px;
  height:12px;
  transform:translate(-50%, -92px);
  z-index:11;
  pointer-events:none;
}

.city-upgrade-burst span{
  position:absolute;
  left:50%;
  top:50%;
  width:8px;
  height:18px;
  border-radius:999px;
  background:#facc15;
  transform:
    translate(-50%, -50%)
    rotate(var(--spark-angle))
    translateY(-8px);
  animation:city-spark-burst 1.2s ease-out both;
  animation-delay:var(--spark-delay);
}

.city-upgrade-burst span:nth-child(3n + 1){ background:#38bdf8; }
.city-upgrade-burst span:nth-child(3n + 2){ background:#34d399; }
.city-upgrade-burst span:nth-child(4n){ background:#fb7185; }

.city-selected-card{
  display:grid;
  grid-template-columns:96px minmax(0, 1fr);
  gap:14px;
  align-items:center;
  padding:14px;
  border-radius:22px;
  background:
    linear-gradient(135deg, color-mix(in srgb, var(--city-accent) 10%, white), rgba(255,255,255,.94));
  border:1px solid rgba(15,23,42,.07);
}

.city-selected-visual{
  position:relative;
  height:106px;
  border-radius:20px;
  background:linear-gradient(180deg, rgba(255,255,255,.75), rgba(255,255,255,.42));
  overflow:hidden;
}

.city-selected-tower{
  position:absolute;
  left:50%;
  bottom:16px;
  width:46px;
  height:var(--city-height);
  max-height:78px;
  border-radius:10px 10px 6px 6px;
  background:linear-gradient(180deg, color-mix(in srgb, var(--city-accent) 68%, white), var(--city-accent));
  transform:translateX(-50%);
  box-shadow:0 16px 24px rgba(15,23,42,.16);
}

.city-selected-tower::before{
  content:"";
  position:absolute;
  left:50%;
  top:-16px;
  width:58px;
  height:26px;
  border-radius:10px;
  background:var(--city-roof);
  transform:translateX(-50%) skewX(-12deg);
}

.city-selected-card h4{
  margin:6px 0 6px;
  font-size:22px;
  line-height:1.08;
  letter-spacing:-.03em;
}

.city-selected-card p,
.city-effect-box p{
  margin:0;
  color:#64748b;
  font-size:13px;
  line-height:1.65;
  font-weight:700;
}

.city-level-row{
  margin-top:14px;
  display:grid;
  gap:8px;
}

.city-level-row span{
  color:#0f172a;
  font-size:13px;
  font-weight:900;
}

.city-level-pips{
  display:grid;
  grid-template-columns:repeat(5, minmax(0, 1fr));
  gap:7px;
  margin-top:10px;
}

.city-level-pips span{
  height:10px;
  border-radius:999px;
  background:#e2e8f0;
  box-shadow:inset 0 0 0 1px rgba(15,23,42,.05);
}

.city-level-pips span.is-filled{
  background:linear-gradient(90deg, var(--city-accent), color-mix(in srgb, var(--city-accent) 44%, #facc15));
  box-shadow:0 8px 16px color-mix(in srgb, var(--city-accent) 18%, transparent);
}

.city-effect-box,
.city-cost-box{
  margin-top:14px;
  padding:14px;
  border-radius:18px;
  background:#f8fbff;
  border:1px solid rgba(15,23,42,.07);
}

.city-cost-box strong{
  display:block;
  margin-top:7px;
  font-size:15px;
  line-height:1.45;
}

.city-cost-box small{
  display:block;
  margin-top:7px;
  color:#b91c1c;
  font-size:12px;
  line-height:1.5;
  font-weight:800;
}

.city-cost-box.is-ready{
  background:#f0fdf4;
  border-color:rgba(22,163,74,.18);
}

.city-cost-box.is-complete{
  background:#eff6ff;
  border-color:rgba(37,99,235,.18);
}

.city-heist-card{
  position:relative;
  overflow:hidden;
  border-color:rgba(5,150,105,.16);
  background:
    radial-gradient(circle at top right, rgba(250,204,21,.22), transparent 34%),
    linear-gradient(180deg, rgba(255,255,255,.98), rgba(240,253,244,.92));
}

.city-heist-card::before{
  content:"";
  position:absolute;
  right:-44px;
  bottom:-58px;
  width:150px;
  height:150px;
  border-radius:36px;
  background:linear-gradient(135deg, rgba(15,23,42,.08), rgba(5,150,105,.16));
  transform:rotate(18deg);
  pointer-events:none;
}

.city-heist-panel{
  position:relative;
  z-index:1;
  margin-top:14px;
}

.city-heist-status{
  padding:15px;
  border-radius:20px;
  background:rgba(255,255,255,.82);
  border:1px solid rgba(255,255,255,.88);
}

.city-heist-status strong,
.city-heist-stat-grid strong{
  display:block;
  margin-top:7px;
  color:#0f172a;
  font-size:20px;
  line-height:1.05;
  font-weight:900;
}

.city-heist-status small{
  display:block;
  margin-top:7px;
  color:#64748b;
  font-size:12px;
  line-height:1.5;
  font-weight:800;
}

.city-heist-status.is-ready{
  box-shadow:0 0 0 3px rgba(5,150,105,.08);
}

.city-heist-status.is-complete{
  background:#ecfdf5;
  border-color:rgba(5,150,105,.2);
}

.city-heist-stat-grid{
  margin-top:10px;
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:10px;
}

.city-heist-stat-grid article{
  padding:12px;
  border-radius:18px;
  background:rgba(255,255,255,.78);
  border:1px solid rgba(255,255,255,.9);
}

.city-heist-overlay{
  position:fixed;
  inset:0;
  z-index:130;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:22px;
  background:rgba(15,23,42,.52);
  backdrop-filter:blur(10px);
  opacity:0;
  visibility:hidden;
  transition:opacity .18s ease, visibility .18s ease;
}

.city-heist-overlay.hidden{
  display:none;
}

.city-heist-overlay.is-visible{
  opacity:1;
  visibility:visible;
}

.city-heist-modal{
  width:min(760px, 100%);
  max-height:min(90vh, 860px);
  overflow:auto;
  padding:24px;
  border-radius:30px;
  background:
    radial-gradient(circle at top right, rgba(250,204,21,.22), transparent 34%),
    linear-gradient(180deg, rgba(255,255,255,.98), rgba(248,250,252,.96));
  border:1px solid rgba(255,255,255,.84);
  box-shadow:0 38px 92px rgba(15,23,42,.24);
}

.city-heist-top{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.city-heist-body{
  margin-top:20px;
}

.city-heist-progress{
  display:grid;
  grid-template-columns:1fr auto;
  gap:8px 12px;
  align-items:center;
}

.city-heist-progress span,
.city-heist-progress strong{
  font-size:13px;
  font-weight:900;
}

.city-heist-progress span{
  color:#64748b;
  letter-spacing:.07em;
  text-transform:uppercase;
}

.city-heist-progress > div{
  grid-column:1 / -1;
  overflow:hidden;
  height:10px;
  border-radius:999px;
  background:rgba(15,23,42,.08);
}

.city-heist-progress > div span{
  display:block;
  height:100%;
  border-radius:inherit;
  background:linear-gradient(90deg, #059669, #0ea5e9);
  transition:width .22s ease;
}

.city-heist-question{
  margin-top:18px;
  padding:18px;
  border-radius:24px;
  background:#0f172a;
  color:#fff;
  box-shadow:0 24px 46px rgba(15,23,42,.2);
}

.city-heist-question .mg-status-label{
  color:#a7f3d0;
}

.city-heist-question strong{
  display:block;
  margin-top:10px;
  font-size:clamp(32px, 4vw, 46px);
  line-height:1;
  letter-spacing:-.04em;
  font-weight:900;
}

.city-heist-question small{
  display:block;
  margin-top:10px;
  color:#cbd5e1;
  font-size:12px;
  font-weight:800;
}

.city-heist-options{
  margin-top:16px;
  display:grid;
  gap:10px;
}

.city-heist-option{
  width:100%;
  min-height:58px;
  padding:14px 16px;
  border-radius:18px;
  border:1px solid rgba(15,23,42,.08);
  background:#fff;
  color:#0f172a;
  cursor:pointer;
  text-align:left;
  font-size:14px;
  line-height:1.45;
  font-weight:850;
  transition:transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}

.city-heist-option:hover{
  transform:translateY(-1px);
  box-shadow:0 16px 28px rgba(15,23,42,.08);
}

.city-heist-option:disabled{
  cursor:default;
  transform:none;
}

.city-heist-option.is-correct{
  border-color:rgba(22,163,74,.28);
  background:#ecfdf5;
  color:#14532d;
}

.city-heist-option.is-wrong{
  border-color:rgba(239,68,68,.28);
  background:#fef2f2;
  color:#7f1d1d;
}

.city-heist-feedback{
  margin-top:14px;
  min-height:42px;
  padding:12px 14px;
  border-radius:16px;
  background:#f8fbff;
  color:#64748b;
  font-size:13px;
  line-height:1.5;
  font-weight:800;
}

.city-heist-feedback.is-success{
  background:#ecfdf5;
  color:#166534;
}

.city-heist-feedback.is-error{
  background:#fef2f2;
  color:#991b1b;
}

.city-heist-complete{
  padding:22px;
  border-radius:26px;
  background:
    radial-gradient(circle at top right, rgba(250,204,21,.26), transparent 38%),
    linear-gradient(135deg, #ecfdf5, #eff6ff);
  border:1px solid rgba(255,255,255,.92);
  text-align:center;
}

.city-heist-complete-mark{
  display:inline-flex;
  align-items:center;
  min-height:34px;
  padding:0 12px;
  border-radius:999px;
  background:#0f172a;
  color:#fff;
  font-size:12px;
  font-weight:900;
  letter-spacing:.08em;
  text-transform:uppercase;
}

.city-heist-complete strong{
  display:block;
  margin-top:16px;
  font-size:58px;
  line-height:1;
  font-weight:900;
  letter-spacing:-.05em;
}

.city-heist-complete p{
  margin:12px auto 0;
  max-width:520px;
  color:#475569;
  font-size:15px;
  line-height:1.6;
  font-weight:800;
}

.city-heist-complete .mg-action-row{
  justify-content:center;
}

.city-activity-list,
.city-mission-list{
  margin-top:14px;
  display:grid;
  gap:10px;
}

.city-activity-item,
.city-mission-item{
  display:grid;
  gap:8px;
  padding:14px;
  border-radius:18px;
  background:#fff;
  border:1px solid rgba(15,23,42,.08);
  color:#0f172a;
  text-decoration:none;
  transition:transform .16s ease, box-shadow .16s ease;
}

.city-activity-item{
  grid-template-columns:minmax(0, 1fr) minmax(120px, auto);
}

.city-activity-item:hover,
.city-mission-item:hover{
  transform:translateY(-1px);
  box-shadow:0 18px 30px rgba(15,23,42,.08);
}

.city-activity-item strong,
.city-activity-item b,
.city-mission-item strong{
  display:block;
  font-size:14px;
  font-weight:900;
}

.city-activity-item small,
.city-activity-item em,
.city-mission-item small{
  display:block;
  margin-top:4px;
  color:#64748b;
  font-size:12px;
  line-height:1.5;
  font-style:normal;
  font-weight:800;
}

.city-activity-item > span:last-child{
  text-align:right;
}

.city-mission-state{
  justify-self:start;
  min-height:28px;
  padding:6px 10px;
  border-radius:999px;
  background:#eff6ff;
  color:#1d4ed8;
  font-size:11px;
  font-weight:900;
  letter-spacing:.07em;
  text-transform:uppercase;
}

.city-toast-root{
  position:fixed;
  right:18px;
  bottom:18px;
  z-index:120;
  display:grid;
  gap:10px;
  pointer-events:none;
}

.city-toast{
  max-width:min(360px, calc(100vw - 36px));
  padding:13px 15px;
  border-radius:18px;
  background:rgba(15,23,42,.94);
  color:#fff;
  box-shadow:0 22px 44px rgba(15,23,42,.24);
  font-size:13px;
  line-height:1.5;
  font-weight:800;
  opacity:0;
  transform:translateY(10px);
  transition:opacity .2s ease, transform .2s ease;
}

.city-toast.is-visible{
  opacity:1;
  transform:translateY(0);
}

.city-toast.is-success{
  background:#047857;
}

.city-toast.is-error{
  background:#991b1b;
}

@keyframes city-cloud-drift{
  0%{ margin-left:-24px; }
  50%{ margin-left:24px; }
  100%{ margin-left:-24px; }
}

@keyframes city-light-sweep{
  0%, 42%{ transform:translateX(-78%); opacity:0; }
  56%{ opacity:.2; }
  72%, 100%{ transform:translateX(78%); opacity:0; }
}

@keyframes city-sky-breathe{
  0%, 100%{ transform:scale(.96); opacity:.62; }
  50%{ transform:scale(1.05); opacity:.88; }
}

@keyframes city-sun-float{
  0%, 100%{ transform:translateY(0); }
  50%{ transform:translateY(8px); }
}

@keyframes city-river-flow{
  0%{ background-position:0 0, 0 0; }
  100%{ background-position:120px 0, 0 0; }
}

@keyframes city-birds-fly{
  0%{ transform:translateX(-36px) translateY(0); opacity:0; }
  14%{ opacity:.55; }
  72%{ opacity:.55; }
  100%{ transform:translateX(520px) translateY(-24px); opacity:0; }
}

@keyframes city-car-drive{
  0%{ transform:translateX(0); }
  100%{ transform:translateX(1180px); }
}

@keyframes city-light-flicker{
  0%, 100%{ opacity:.58; }
  48%{ opacity:.96; }
  52%{ opacity:.7; }
  56%{ opacity:1; }
}

@keyframes city-fountain-pulse{
  0%, 100%{ transform:translate(-50%, -50%) scale(.96); filter:brightness(1); }
  50%{ transform:translate(-50%, -50%) scale(1.06); filter:brightness(1.12); }
}

@keyframes city-vault-spotlight{
  0%, 100%{ transform:scale(.86); opacity:.7; }
  50%{ transform:scale(1.08); opacity:1; }
}

@keyframes city-sound-wave{
  0%, 100%{ transform:translate(-50%, -50%) scale(.86); opacity:.44; }
  50%{ transform:translate(-50%, -50%) scale(1.12); opacity:.82; }
}

@keyframes city-beacon-pulse{
  0%, 100%{ transform:translateX(-50%) scale(.84); opacity:.36; }
  50%{ transform:translateX(-50%) scale(1.12); opacity:.84; }
}

@keyframes city-flag-wave{
  0%, 100%{ transform:translateX(19px) skewY(-8deg) rotate(0deg); }
  50%{ transform:translateX(19px) skewY(3deg) rotate(3deg); }
}

@keyframes city-upgrade-glow{
  0%{ transform:translateX(-50%) scale(.7); opacity:0; }
  38%{ transform:translateX(-50%) scale(1.24); opacity:1; }
  100%{ transform:translateX(-50%) scale(1.68); opacity:0; }
}

@keyframes city-spark-burst{
  0%{
    opacity:1;
    transform:
      translate(-50%, -50%)
      rotate(var(--spark-angle))
      translateY(-8px)
      scale(.7);
  }
  100%{
    opacity:0;
    transform:
      translate(-50%, -50%)
      rotate(var(--spark-angle))
      translateY(-118px)
      scale(1.1);
  }
}

@keyframes city-ready-pulse{
  0%, 100%{ opacity:.32; transform:scale(.96); }
  50%{ opacity:1; transform:scale(1.04); }
}

@keyframes city-upgrade-pop{
  0%{ transform:translateX(-50%) translateY(12px) scale(.94); filter:brightness(1); }
  45%{ transform:translateX(-50%) translateY(-8px) scale(1.08); filter:brightness(1.18); }
  100%{ transform:translateX(-50%) translateY(0) scale(1); filter:brightness(1); }
}

@media (max-width: 1180px){
  .city-resource-grid{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }

  .city-layout{
    grid-template-columns:1fr;
  }

  .city-map-hud{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }

  .city-map{
    min-height:600px;
  }
}

@media (max-width: 760px){
  .city-shell{
    width:min(100% - 20px, 1380px);
  }

  .city-resource-grid,
  .city-hero-snapshot{
    grid-template-columns:1fr;
  }

  .city-map-hud{
    grid-template-columns:1fr;
  }

  .city-hud-card{
    min-height:78px;
  }

  .city-map-shell{
    padding:16px;
  }

  .city-map{
    min-height:720px;
  }

  .city-road{
    width:92%;
  }

  .city-traffic-main{
    width:92%;
  }

  .city-traffic-cross{
    width:76%;
  }

  .city-skyline{
    top:16%;
    left:4%;
    right:4%;
  }

  .city-river{
    height:72px;
  }

  .city-streetlight{
    transform:scale(.78);
  }

  .city-decoration > span{
    display:none;
  }

  .city-decoration-academy-gate{
    transform:scale(.72);
  }

  .city-decoration-central-fountain{
    transform:translate(-50%, -50%) scale(.78);
  }

  .city-building{
    width:132px;
    height:166px;
  }

  .city-building-wing-left{
    margin-left:-39px;
  }

  .city-building-wing-right{
    margin-left:39px;
  }

  .city-building-sign{
    bottom:52px;
    min-width:38px;
    min-height:23px;
    font-size:10px;
  }

  .city-building-label{
    width:126px;
  }

  .city-building-label strong{
    white-space:normal;
  }

  .city-selected-card,
  .city-activity-item{
    grid-template-columns:1fr;
  }

  .city-heist-overlay{
    padding:12px;
  }

  .city-heist-modal{
    padding:18px;
    border-radius:24px;
  }

  .city-heist-top{
    align-items:center;
  }

  .city-heist-question{
    padding:16px;
  }

  .city-activity-item > span:last-child{
    text-align:left;
  }

  .city-toast-root{
    right:10px;
    bottom:10px;
  }
}

@media (prefers-reduced-motion: reduce){
  .city-cloud,
  .city-map::after,
  .city-sky-glow,
  .city-sun-or-moon,
  .city-river,
  .city-birds,
  .city-car,
  .city-streetlight::before,
  .city-decoration-central-fountain,
  .city-decoration-vault-lights,
  .city-building--listening-studio .city-building-motif span:nth-child(3),
  .city-building.can-upgrade .city-building-beacon,
  .city-building.is-selected .city-building-beacon,
  .city-building-level-4 .city-building-flag,
  .city-building-level-5 .city-building-flag,
  .city-building.just-upgraded .city-building-beacon,
  .city-upgrade-burst span,
  .city-building.can-upgrade .city-building-tile::after,
  .city-building.just-upgraded .city-building-core,
  .city-heist-progress > div span{
    animation:none !important;
  }

  .city-building,
  .city-activity-item,
  .city-mission-item,
  .city-heist-overlay,
  .city-heist-option,
  .city-toast,
  .city-hero-meter span,
  .city-level-track span,
  .city-heist-progress > div span{
    transition:none !important;
  }
}
