* {
  box-sizing: border-box;
}

:root {
  --bg-top: #f2f8ff;
  --bg-bottom: #c7e5ff;
  --panel: rgba(14, 30, 48, 0.22);
  --panel-border: rgba(255, 255, 255, 0.45);
  --text: #13324c;
  --accent: #ffb54c;
  --accent-strong: #ff7b37;
  --shadow: rgba(0, 0, 0, 0.22);
}

html,
body {
  margin: 0;
  min-height: 100%;
  background:
    radial-gradient(circle at top, rgba(255, 255, 255, 0.75), transparent 42%),
    linear-gradient(180deg, var(--bg-top), var(--bg-bottom));
  color: var(--text);
  font-family: Trebuchet MS, Verdana, sans-serif;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 12px;
}

.app-shell {
  width: min(100%, 1180px);
  display: grid;
  gap: 10px;
}

.game-shell {
  width: min(100%, 1160px);
}

.shop-title {
  margin: 0;
  font-size: 1.3rem;
  color: #183a58;
}

.shop-subtitle,
.shop-gems,
.shop-note {
  margin: 0;
  font-size: 0.92rem;
  color: rgba(24, 58, 88, 0.86);
}

.shop-item {
  padding: 10px;
  border-radius: 12px;
  background: rgba(23, 74, 115, 0.08);
  border: 1px solid rgba(23, 74, 115, 0.16);
  display: grid;
  gap: 4px;
}

.shop-item h3,
.shop-item p {
  margin: 0;
}

.shop-item h3 {
  color: #194667;
  font-size: 1rem;
}

.shop-item p {
  color: rgba(24, 58, 88, 0.86);
  font-size: 0.86rem;
}

.shop-btn {
  margin-top: 6px;
  border: none;
  border-radius: 10px;
  padding: 8px 10px;
  font: 700 0.85rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #ffd78d, #ffb35b);
  box-shadow: 0 10px 18px rgba(0, 0, 0, 0.15);
  cursor: pointer;
}

.shop-btn:hover {
  filter: brightness(1.03);
}

.shop-btn:active {
  transform: translateY(1px);
}

.shop-btn:disabled {
  cursor: not-allowed;
  background: linear-gradient(180deg, #c6d5df, #a7b8c5);
  color: rgba(18, 51, 79, 0.65);
  box-shadow: none;
}

.shop-feedback {
  margin: 0;
  min-height: 1.1rem;
  font-size: 0.84rem;
  color: #174a73;
}

.shop-feedback.success {
  color: #1d7a35;
}

.shop-feedback.fail {
  color: #a8483f;
}

.frame {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: 24px;
  padding: 16px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.62), rgba(255, 255, 255, 0.28));
  border: 1px solid var(--panel-border);
  box-shadow: 0 24px 48px var(--shadow);
  backdrop-filter: blur(12px);
}

.game-stage {
  position: relative;
}

.shop-overlay {
  position: absolute;
  inset: 0;
  z-index: 8;
  pointer-events: none;
  overflow: hidden;
}

.shop-toggle-btn {
  pointer-events: auto;
  position: absolute;
  top: 16px;
  left: 16px;
  z-index: 8;
  border: none;
  border-radius: 12px;
  padding: 7px 12px;
  font: 700 0.85rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #ffe09f, #ffbf67);
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.18);
  cursor: pointer;
}

.shop-toggle-btn:hover {
  filter: brightness(1.04);
}

.shop-toggle-btn:active {
  transform: translateY(1px);
}

.shop-toggle-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.shop-backdrop {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  inset: 0;
  background: rgba(7, 24, 39, 0.46);
  transition: opacity 160ms ease, visibility 160ms ease;
}

.shop-popup {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -54%) scale(0.96);
  width: min(88%, 360px);
  border-radius: 18px;
  padding: 14px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.94), rgba(241, 250, 255, 0.9));
  border: 1px solid rgba(255, 255, 255, 0.78);
  box-shadow: 0 26px 40px rgba(0, 0, 0, 0.26);
  display: grid;
  gap: 10px;
  transition: opacity 160ms ease, transform 160ms ease;
  z-index: 9;
}

.shop-overlay.is-open .shop-backdrop {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.shop-overlay.is-open .shop-popup {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, -50%) scale(1);
}

.shop-popup-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.shop-close-btn {
  border: none;
  border-radius: 9px;
  width: 30px;
  height: 30px;
  font: 700 0.9rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #ffd0a4, #ffb179);
  cursor: pointer;
}

.shop-close-btn:hover {
  filter: brightness(1.03);
}

.leaderboard-overlay {
  position: absolute;
  inset: 0;
  z-index: 10;
  pointer-events: none;
  overflow: hidden;
}

.leaderboard-toggle-btn {
  pointer-events: auto;
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 8;
  border: none;
  border-radius: 12px;
  padding: 7px 12px;
  font: 700 0.85rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #c8f2ff, #8ed8f2);
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.18);
  cursor: pointer;
}

.leaderboard-toggle-btn:hover {
  filter: brightness(1.04);
}

.leaderboard-toggle-btn:active {
  transform: translateY(1px);
}

.leaderboard-toggle-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.leaderboard-backdrop {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  inset: 0;
  background: rgba(7, 24, 39, 0.48);
  transition: opacity 180ms ease, visibility 180ms ease;
}

.leaderboard-popup {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -54%) scale(0.96);
  width: min(90%, 560px);
  max-height: min(82%, 520px);
  overflow-y: auto;
  border-radius: 18px;
  padding: 14px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.95), rgba(238, 250, 255, 0.92));
  border: 1px solid rgba(255, 255, 255, 0.82);
  box-shadow: 0 26px 40px rgba(0, 0, 0, 0.26);
  display: grid;
  gap: 10px;
  transition: opacity 180ms ease, transform 180ms ease;
  z-index: 10;
}

.leaderboard-overlay.is-open .leaderboard-backdrop {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.leaderboard-overlay.is-open .leaderboard-popup {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, -50%) scale(1);
}

.leaderboard-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.leaderboard-title {
  margin: 0;
  font-size: 1.35rem;
  color: #173a58;
}

.leaderboard-subtitle {
  margin: 0;
  color: rgba(23, 58, 88, 0.84);
  font-size: 0.92rem;
}

.leaderboard-close-btn {
  border: none;
  border-radius: 9px;
  width: 30px;
  height: 30px;
  font: 700 0.9rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #ffd0a4, #ffb179);
  cursor: pointer;
}

.leaderboard-close-btn:hover {
  filter: brightness(1.03);
}

.leaderboard-actions {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.leaderboard-player {
  color: rgba(23, 58, 88, 0.9);
  font-size: 0.9rem;
}

.leaderboard-action-btn {
  border: none;
  border-radius: 9px;
  padding: 7px 10px;
  font: 700 0.82rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #ffe8a9, #ffcc70);
  box-shadow: 0 8px 14px rgba(0, 0, 0, 0.12);
  cursor: pointer;
}

.leaderboard-action-btn:hover {
  filter: brightness(1.03);
}

.leaderboard-table-wrap {
  border-radius: 12px;
  border: 1px solid rgba(28, 73, 110, 0.16);
  background: rgba(255, 255, 255, 0.75);
  overflow: hidden;
}

.leaderboard-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.9rem;
}

.leaderboard-table th,
.leaderboard-table td {
  padding: 8px 10px;
  text-align: left;
}

.leaderboard-table thead th {
  background: rgba(28, 73, 110, 0.12);
  color: #183a58;
  font-size: 0.82rem;
  letter-spacing: 0.03em;
  text-transform: uppercase;
}

.leaderboard-table tbody tr:nth-child(odd) {
  background: rgba(255, 255, 255, 0.7);
}

.leaderboard-table tbody tr:nth-child(even) {
  background: rgba(240, 249, 255, 0.82);
}

.leaderboard-table tbody tr.current-run {
  background: rgba(255, 239, 166, 0.84);
  outline: 1px solid rgba(255, 187, 74, 0.6);
}

.leaderboard-table tbody tr.top1 td {
  color: #8b5a00;
  font-weight: 700;
}

.leaderboard-table tbody tr.top2 td {
  color: #4f5f73;
}

.leaderboard-table tbody tr.top3 td {
  color: #80563a;
}

.leaderboard-feedback {
  margin: 0;
  min-height: 1rem;
  color: #174a73;
  font-size: 0.85rem;
}

.nickname-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 14;
  overflow: hidden;
}

.nickname-backdrop {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  inset: 0;
  background: rgba(6, 20, 35, 0.58);
  transition: opacity 180ms ease, visibility 180ms ease;
}

.nickname-popup {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -54%) scale(0.96);
  width: min(88%, 420px);
  border-radius: 16px;
  padding: 16px;
  display: grid;
  gap: 10px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.97), rgba(242, 252, 255, 0.93));
  border: 1px solid rgba(255, 255, 255, 0.82);
  box-shadow: 0 26px 42px rgba(0, 0, 0, 0.34);
  transition: opacity 180ms ease, transform 180ms ease;
}

.nickname-overlay.is-open {
  pointer-events: auto;
}

.nickname-overlay.is-open .nickname-backdrop {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.nickname-overlay.is-open .nickname-popup {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, -50%) scale(1);
}

.nickname-title {
  margin: 0;
  font-size: 1.28rem;
  color: #173a58;
}

.nickname-subtitle {
  margin: 0;
  color: rgba(23, 58, 88, 0.86);
  font-size: 0.9rem;
}

.nickname-label {
  color: rgba(23, 58, 88, 0.92);
  font-size: 0.86rem;
  font-weight: 700;
}

.nickname-input {
  border: 1px solid rgba(23, 58, 88, 0.22);
  border-radius: 10px;
  padding: 10px;
  font: 700 0.95rem Trebuchet MS, Verdana, sans-serif;
  color: #163a57;
  outline: none;
}

.nickname-input:focus {
  border-color: rgba(32, 82, 125, 0.68);
  box-shadow: 0 0 0 3px rgba(118, 203, 255, 0.22);
}

.nickname-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

.nickname-cancel-btn {
  border: none;
  border-radius: 10px;
  padding: 8px 14px;
  font: 700 0.86rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #d8e5ee, #b8cddb);
  cursor: pointer;
}

.nickname-cancel-btn:hover {
  filter: brightness(1.03);
}

.nickname-save-btn {
  border: none;
  border-radius: 10px;
  padding: 8px 14px;
  font: 700 0.86rem Trebuchet MS, Verdana, sans-serif;
  color: #12334f;
  background: linear-gradient(180deg, #bdf4ca, #86de9f);
  cursor: pointer;
}

.nickname-save-btn:hover {
  filter: brightness(1.03);
}

.nickname-feedback {
  margin: 0;
  min-height: 1rem;
  color: #174a73;
  font-size: 0.84rem;
}

.nickname-feedback.fail {
  color: #a8483f;
}

canvas {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 16px;
  background: #a8d9ff;
  image-rendering: auto;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18);
}

.hint {
  margin: 0;
  text-align: center;
  font-size: 0.95rem;
  color: rgba(19, 50, 76, 0.8);
}

.touch-controls {
  position: absolute;
  inset: 16px;
  display: none;
  justify-content: space-between;
  align-items: flex-end;
  pointer-events: none;
}

.touch-pad {
  display: flex;
  gap: 12px;
  pointer-events: auto;
}

.touch-btn {
  width: 76px;
  height: 76px;
  border: none;
  border-radius: 999px;
  background: rgba(13, 39, 66, 0.24);
  color: white;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
  backdrop-filter: blur(6px);
  touch-action: manipulation;
  user-select: none;
}

.touch-btn:active,
.touch-btn.is-active {
  transform: translateY(2px) scale(0.97);
  background: rgba(255, 123, 55, 0.68);
}

.touch-jump {
  width: 92px;
  height: 92px;
  background: rgba(255, 181, 76, 0.78);
  color: #173250;
}

@media (max-width: 900px) {
  body {
    padding: 6px;
  }

  .frame {
    padding: 8px;
    border-radius: 16px;
  }

  .touch-controls {
    display: flex;
  }
}

@media (max-width: 640px) {
  .touch-btn {
    width: 64px;
    height: 64px;
    font-size: 0.8rem;
  }

  .touch-jump {
    width: 82px;
    height: 82px;
  }

  .hint {
    font-size: 0.82rem;
  }
}
