.melody-maze-app {
  --mm-border: #d7dbe3;
  --mm-text: #1f2937;
  --mm-muted: #667085;
  --mm-panel: #f8fafc;
  --mm-wall: #253248;
  --mm-open: #ffffff;
  --mm-solved: #ef4444;
  --mm-start: #16a34a;
  --mm-finish: #f59e0b;
  --mm-cell-gap: 2px;
  color: var(--mm-text);
  font-family: inherit;
  width: 100%;
  max-width: 1040px;
  margin: 0 auto;
}

.melody-maze-app * {
  box-sizing: border-box;
}

.melody-maze-app .mm-toolbar {
  display: flex;
  align-items: end;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.melody-maze-app .mm-song-control {
  flex: 1 1 280px;
  min-width: 0;
}

.melody-maze-app .mm-label {
  display: block;
  font-weight: 700;
  margin-bottom: 6px;
}

.melody-maze-app .mm-select {
  width: 100%;
  min-height: 44px;
  padding: 8px 10px;
  border: 1px solid var(--mm-border);
  border-radius: 9px;
  background: #fff;
  color: var(--mm-text);
  font: inherit;
}

.melody-maze-app .mm-tempo {
  min-height: 44px;
  padding: 8px 12px;
  border: 1px solid var(--mm-border);
  border-radius: 9px;
  background: var(--mm-panel);
  display: flex;
  gap: 8px;
  align-items: center;
  white-space: nowrap;
}

.melody-maze-app .mm-check {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
}

.melody-maze-app .mm-check input {
  width: 18px;
  height: 18px;
}

.melody-maze-app .mm-message {
  min-height: 24px;
  margin-bottom: 10px;
  color: var(--mm-muted);
}

.melody-maze-app .mm-message.is-error {
  color: #b42318;
}

.melody-maze-app .mm-message.is-success {
  color: #067647;
  font-weight: 700;
}

.melody-maze-app .mm-game-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 190px;
  align-items: start;
  gap: 18px;
}

.melody-maze-app .mm-maze-stage {
  min-width: 0;
  width: 100%;
  border: 1px solid var(--mm-border);
  border-radius: 14px;
  background: var(--mm-panel);
  padding: 10px;
  overflow: hidden;
}

.melody-maze-app .mm-maze-grid {
  display: grid;
  grid-template-columns: repeat(var(--mm-cols, 1), minmax(0, 1fr));
  gap: var(--mm-cell-gap);
  width: 100%;
}

.melody-maze-app .mm-cell {
  position: relative;
  aspect-ratio: 1 / 1;
  min-width: 0;
  border-radius: 3px;
  overflow: hidden;
  transition: background-color 120ms ease, box-shadow 120ms ease;
}

.melody-maze-app .mm-cell.mm-wall {
  background: var(--mm-wall);
}

.melody-maze-app .mm-cell.mm-open {
  background: var(--mm-open);
  box-shadow: inset 0 0 0 1px #e7eaf0;
}

.melody-maze-app .mm-cell.mm-solved {
  background: var(--mm-solved);
  box-shadow: inset 0 0 0 1px #b91c1c;
}

.melody-maze-app .mm-cell.mm-replay-active {
  animation: mm-cell-flash 420ms ease-in-out infinite alternate;
}

.melody-maze-app .mm-marker {
  position: absolute;
  inset: 3px;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font-weight: 800;
  font-size: clamp(7px, 1.3vw, 12px);
  line-height: 1.05;
  pointer-events: none;
  z-index: 1;
}

.melody-maze-app .mm-start-marker {
  color: var(--mm-start);
}

.melody-maze-app .mm-finish-marker {
  color: #7a2e00;
}

.melody-maze-app .mm-cell-note {
  position: absolute;
  left: 2px;
  right: 2px;
  bottom: 1px;
  text-align: center;
  font-size: clamp(7px, 1vw, 11px);
  font-weight: 700;
  color: #111827;
  opacity: 0;
  pointer-events: none;
}

.melody-maze-app.mm-show-notes .mm-cell-note {
  opacity: 1;
}

.melody-maze-app .mm-frog {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 82%;
  height: 82%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: clamp(14px, 2.5vw, 30px);
  line-height: 1;
  z-index: 3;
  pointer-events: none;
}

.melody-maze-app .mm-frog.is-hopping {
  animation: mm-frog-hop 260ms ease-out;
}

.melody-maze-app .mm-side-panel {
  display: grid;
  gap: 12px;
}

.melody-maze-app .mm-progress-card {
  padding: 12px;
  border: 1px solid var(--mm-border);
  border-radius: 12px;
  background: #fff;
}

.melody-maze-app .mm-progress-label {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 14px;
}

.melody-maze-app .mm-progress-track {
  height: 8px;
  margin-top: 8px;
  overflow: hidden;
  border-radius: 99px;
  background: #eaecf0;
}

.melody-maze-app .mm-progress-track span {
  display: block;
  width: 0;
  height: 100%;
  background: var(--mm-solved);
  transition: width 180ms ease;
}

.melody-maze-app .mm-current-note {
  min-height: 24px;
  margin-top: 8px;
  text-align: center;
  font-weight: 800;
}

.melody-maze-app .mm-dpad {
  display: grid;
  grid-template-columns: repeat(3, 48px);
  grid-template-rows: repeat(2, 48px);
  justify-content: center;
  gap: 6px;
}

.melody-maze-app .mm-move,
.melody-maze-app .mm-restart,
.melody-maze-app .mm-retry {
  min-height: 44px;
  border: 1px solid var(--mm-border);
  border-radius: 9px;
  background: #fff;
  color: var(--mm-text);
  font: inherit;
  font-weight: 700;
  cursor: pointer;
}

.melody-maze-app .mm-move:hover,
.melody-maze-app .mm-restart:hover,
.melody-maze-app .mm-retry:hover {
  background: #f2f4f7;
}

.melody-maze-app .mm-move:disabled,
.melody-maze-app .mm-restart:disabled,
.melody-maze-app .mm-retry:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.melody-maze-app .mm-up {
  grid-column: 2;
  grid-row: 1;
}

.melody-maze-app .mm-left {
  grid-column: 1;
  grid-row: 2;
}

.melody-maze-app .mm-down {
  grid-column: 2;
  grid-row: 2;
}

.melody-maze-app .mm-right {
  grid-column: 3;
  grid-row: 2;
}

.melody-maze-app .mm-restart,
.melody-maze-app .mm-retry {
  width: 100%;
  padding: 8px 12px;
}

@keyframes mm-frog-hop {
  0% { transform: translate(-50%, -50%) scale(1); }
  45% { transform: translate(-50%, -78%) scale(1.08); }
  100% { transform: translate(-50%, -50%) scale(1); }
}

@keyframes mm-cell-flash {
  from { filter: brightness(1); }
  to { filter: brightness(1.55); box-shadow: inset 0 0 0 3px #fff; }
}

@media (max-width: 720px) {
  .melody-maze-app .mm-game-layout {
    grid-template-columns: 1fr;
  }

  .melody-maze-app .mm-side-panel {
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
  }

  .melody-maze-app .mm-progress-card {
    grid-column: 1 / -1;
  }

  .melody-maze-app .mm-restart,
  .melody-maze-app .mm-retry {
    width: auto;
    min-width: 150px;
  }
}

@media (max-width: 420px) {
  .melody-maze-app .mm-maze-stage {
    padding: 6px;
  }

  .melody-maze-app .mm-dpad {
    grid-template-columns: repeat(3, 46px);
    grid-template-rows: repeat(2, 46px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .melody-maze-app .mm-frog.is-hopping,
  .melody-maze-app .mm-cell.mm-replay-active {
    animation: none;
  }
}

.melody-maze-app .mm-cell.mm-start-cell {
  background: #ecfdf3;
  box-shadow: inset 0 0 0 2px var(--mm-start);
}

.melody-maze-app .mm-cell.mm-finish-cell {
  background: #fffaeb;
  box-shadow: inset 0 0 0 2px var(--mm-finish);
}

.melody-maze-app .mm-marker {
  top: 2px;
  right: 2px;
  bottom: auto;
  left: 2px;
  min-height: 13px;
  padding: 1px 2px;
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.82);
  z-index: 4;
}

.melody-maze-app .mm-play {
  min-height: 44px;
  padding: 8px 14px;
  border: 1px solid #0f766e;
  border-radius: 9px;
  background: #0f766e;
  color: #fff;
  font: inherit;
  font-weight: 800;
  cursor: pointer;
  white-space: nowrap;
}

.melody-maze-app .mm-play:hover:not(:disabled) {
  background: #115e59;
}

.melody-maze-app .mm-play[aria-pressed="true"] {
  background: #b42318;
  border-color: #b42318;
}

.melody-maze-app .mm-play:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.melody-maze-app .mm-difficulty-control {
  flex: 0 1 150px;
  min-width: 130px;
}

.melody-maze-app .mm-difficulty-select {
  min-width: 130px;
}

@media (max-width: 560px) {
  .melody-maze-app .mm-difficulty-control {
    flex: 1 1 140px;
  }
}
