:root {
  --bg: #0f1714;
  --panel: #18231e;
  --panel-2: #1f2d26;
  --line: #2f4037;
  --ink: #eef3ee;
  --dim: #a3b5aa;
  --lamp: #f2c14e;
  --good: #7ad79a;
  --bad: #f08a78;
  --radius: 12px;
}

* {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans KR', system-ui, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  word-break: keep-all;
  overflow-wrap: anywhere;
}

#app {
  position: relative;
  width: 100%;
  max-width: 480px;
  min-height: 100dvh;
  margin: 0 auto;
  padding: max(16px, env(safe-area-inset-top)) 16px max(20px, env(safe-area-inset-bottom));
  display: flex;
  flex-direction: column;
  gap: 14px;
}

h1,
h2,
h3,
p {
  margin: 0;
}

button {
  font: inherit;
  color: inherit;
  cursor: pointer;
}

button:focus-visible,
input:focus-visible,
summary:focus-visible {
  outline: 2px solid var(--lamp);
  outline-offset: 2px;
}

.boot {
  margin: auto;
  color: var(--dim);
  font-size: 14px;
}

/* 그림 */
.cover {
  display: block;
  width: calc(100% + 32px);
  max-width: none;
  margin: calc(-1 * max(16px, env(safe-area-inset-top))) -16px 0;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  object-position: 72% 60%;
  -webkit-mask-image: linear-gradient(#000 70%, transparent);
  mask-image: linear-gradient(#000 70%, transparent);
}

.retire-tier {
  font-size: 24px;
  color: var(--lamp);
}

.cover.short {
  aspect-ratio: 5 / 2;
}

@media (max-height: 700px) {
  .cover.short {
    aspect-ratio: 5 / 2;
  }
}

.podium {
  width: 100%;
  padding: 10px 8px 0;
  border: 0;
  border-radius: var(--radius);
  background: var(--panel);
  color: var(--ink);
}

.podium-title {
  color: var(--dim);
  font-size: 13px;
}

.board {
  display: grid;
  gap: 6px;
}

.board-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}

.board-tabs {
  display: flex;
  gap: 4px;
}

.podium-faces {
  display: flex;
  justify-content: space-around;
  padding: 10px 0 6px;
}

.face {
  display: grid;
  justify-items: center;
  gap: 2px;
  color: var(--dim);
  font-size: 12px;
}

.face .portrait {
  width: 46px;
}

.podium-rest {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2px 16px;
  margin: 0;
  padding: 4px 8px 10px;
  list-style: none;
  font-size: 13px;
}

.podium-rest li {
  display: flex;
  gap: 6px;
  min-width: 0;
}

.rest-rank {
  color: var(--dim);
}

.rest-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-align: left;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.podium-rest b {
  color: var(--lamp);
  font-variant-numeric: tabular-nums;
}

.podium-steps {
  display: grid;
  grid-template-columns: 1fr 1.15fr 1fr;
  align-items: end;
  gap: 4px;
}

.pod {
  display: grid;
  justify-items: center;
  gap: 1px;
  min-width: 0;
}

.pod .portrait {
  width: 56px;
}

.pod-1 .portrait {
  width: 76px;
}

.pod-name {
  max-width: 100%;
  overflow: hidden;
  font-size: 13px;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.pod-ovr {
  color: var(--lamp);
  font-size: 12px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.step {
  display: grid;
  place-items: center;
  width: 100%;
  margin-top: 4px;
  border-radius: 6px 6px 0 0;
  color: #1b1a10;
  font-size: 20px;
  font-weight: 800;
}

.pod-1 .step {
  height: 62px;
  background: var(--lamp);
}

.pod-2 .step {
  height: 44px;
  background: #c3ccc7;
}

.pod-3 .step {
  height: 30px;
  background: #c98a55;
}

.pod.empty .step {
  background: var(--line);
  color: var(--dim);
}

.portrait {
  width: 72px;
  flex: none;
}

.portrait svg {
  display: block;
  width: 100%;
  height: auto;
}

.portrait.large {
  width: 96px;
}

.portrait.tiny {
  width: 26px;
}

.portrait.hero-duck {
  width: 132px;
  margin: 0 auto;
}

.logo {
  display: inline-block;
  flex: none;
  width: 20px;
  line-height: 0;
}

.logo svg {
  display: block;
  width: 100%;
}

.logo.large {
  width: 64px;
}

/* 국제대회 국기 (3:2) */
.flag {
  display: inline-block;
  flex: none;
  width: 21px;
  line-height: 0;
  border-radius: 2px;
  overflow: hidden;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.18);
}

.flag svg {
  display: block;
  width: 100%;
}

.with-flag {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.with-logo,
.team-head {
  display: flex;
  align-items: center;
  gap: 10px;
}

.with-logo .logo {
  width: 26px;
}

.who-row {
  display: flex;
  align-items: center;
  gap: 6px;
}

.parts {
  display: grid;
  gap: 8px;
}

.part-row {
  display: grid;
  grid-template-columns: 38px 1fr;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--dim);
}

.part-options {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.ghost.reroll {
  width: auto;
  min-height: 36px;
  margin: 0 auto;
  padding: 0 16px;
  font-size: 13px;
}

.mode.small {
  min-height: 36px;
  padding: 0 10px;
  font-size: 13px;
}

.player-head {
  display: flex;
  align-items: center;
  gap: 12px;
}

.player-head .ovr-row {
  flex: 1;
}

.ending-head {
  display: flex;
  align-items: center;
  gap: 14px;
}

/* 첫 화면 */
.hero {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
}

.hero h1 {
  font-size: 44px;
  line-height: 1.15;
  color: var(--lamp);
  letter-spacing: 0;
}

.hero p {
  color: var(--dim);
}

/* 상단 전광판 */
.topbar {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--line);
}

.topbar .season {
  color: var(--lamp);
  font-weight: 700;
  font-size: 14px;
}

.topbar .who {
  font-size: 14px;
  color: var(--dim);
}

.pips {
  display: flex;
  gap: 4px;
  margin-top: 6px;
}

.pips i {
  flex: 1;
  height: 4px;
  border-radius: 2px;
  background: var(--line);
}

.pips i.done {
  background: var(--lamp);
}

.pips i.now {
  background: var(--good);
}

.season-row {
  display: flex;
  align-items: center;
  gap: 8px;
}

.season-row .season {
  flex: 1;
  min-width: 0;
}

.screen-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
}

.ovr {
  flex: none;
  padding: 0 8px;
  border-radius: 999px;
  background: var(--panel-2);
  color: var(--lamp);
  font-size: 14px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.ovr-row {
  font-size: 16px;
}

.ovr-row b {
  color: var(--lamp);
  font-size: 20px;
}

/* 내 선수 패널 */
details.player {
  background: var(--panel);
  border-radius: var(--radius);
  padding: 10px 14px;
  font-size: 14px;
}

details.player summary {
  color: var(--dim);
  cursor: pointer;
  min-height: 28px;
}

.bars {
  display: grid;
  gap: 6px;
  margin-top: 8px;
}

.bar {
  display: grid;
  grid-template-columns: 72px 1fr 28px;
  align-items: center;
  gap: 8px;
  font-variant-numeric: tabular-nums;
}

.bar .track {
  height: 6px;
  border-radius: 3px;
  background: var(--line);
  overflow: hidden;
}

.bar .fill {
  height: 100%;
  background: var(--lamp);
}

.bar.soft .fill {
  background: var(--good);
}

.bar b {
  text-align: right;
  font-weight: 600;
}

.lineup {
  width: 100%;
  margin-top: 8px;
  border-collapse: collapse;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}

.lineup td {
  padding: 3px 0;
}

.lineup th {
  padding: 0;
  text-align: right;
  color: var(--dim);
  font-size: 12px;
  font-weight: 600;
}

.lineup td:first-child,
.lineup td:nth-child(2) {
  color: var(--dim);
  padding-right: 8px;
  white-space: nowrap;
}

.lineup td:last-child {
  text-align: right;
  color: var(--dim);
}

.lineup tr.me td {
  color: var(--lamp);
  font-weight: 700;
}

.trophies {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(92px, 1fr));
  gap: 10px;
}

.trophies.small {
  grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
  gap: 6px;
  margin-top: 4px;
}

.trophy {
  display: grid;
  justify-items: center;
  gap: 4px;
  text-align: center;
  font-size: 13px;
  line-height: 1.3;
}

.trophies.small .trophy {
  font-size: 11px;
  color: var(--dim);
}

.trophy-art {
  width: 72px;
  animation: enter 0.25s ease-out;
}

.trophies.small .trophy-art {
  width: 44px;
}

.trophy-art svg {
  display: block;
  width: 100%;
  height: auto;
}

.ranking {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
}

.rank-row {
  display: grid;
  gap: 6px;
  padding: 10px 12px;
  border-radius: var(--radius);
  background: var(--panel);
}

.rank-row.mine {
  box-shadow: inset 0 0 0 1px var(--lamp);
}

.rank-head {
  display: grid;
  grid-template-columns: 24px 48px 1fr auto;
  align-items: center;
  gap: 10px;
}

.rank-no {
  color: var(--lamp);
  font-size: 18px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.portrait.small {
  width: 48px;
}

.rank-who {
  display: grid;
  min-width: 0;
  font-size: 13px;
  line-height: 1.35;
}

.rank-who b {
  font-size: 16px;
}

.rank-who span {
  color: var(--dim);
}

.rank-ovr {
  display: grid;
  justify-items: center;
  line-height: 1.1;
}

.rank-ovr span {
  font-size: 11px;
  color: var(--dim);
}

.rank-ovr b {
  font-size: 22px;
  color: var(--lamp);
  font-variant-numeric: tabular-nums;
}

.rank-awards summary {
  min-height: 28px;
  color: var(--dim);
  font-size: 13px;
  cursor: pointer;
}

/* 본문 */
.screen {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 14px;
  animation: enter 0.18s ease-out;
}

@keyframes enter {
  from {
    opacity: 0;
    transform: translateY(6px);
  }
}

.eyebrow {
  color: var(--lamp);
  font-size: 13px;
  font-weight: 700;
}

.screen h2 {
  font-size: 24px;
  line-height: 1.3;
}

.body-text {
  white-space: pre-line;
  font-size: 17px;
}

.muted {
  color: var(--dim);
  font-size: 14px;
}

.card {
  background: var(--panel);
  border-radius: var(--radius);
  padding: 12px 14px;
  display: grid;
  gap: 6px;
}

.card h3 {
  font-size: 13px;
  color: var(--dim);
  font-weight: 600;
}

.card.hook {
  background: var(--panel-2);
  border-left: 3px solid var(--lamp);
}

.card.hook p {
  font-size: 17px;
  font-weight: 600;
}

.row {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  font-variant-numeric: tabular-nums;
}

.row span:first-child {
  color: var(--dim);
  flex: none;
}

.row span:last-child {
  text-align: right;
}

.deltas {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2px 18px;
}

.num {
  font-variant-numeric: tabular-nums;
}

.up {
  color: var(--good);
}

.down {
  color: var(--bad);
}

/* 선택지 */
.choices {
  display: grid;
  /* 목록 높이가 제한돼도 칸이 눌려 글자가 아래 칸에 겹치지 않게 내용 높이를 지킨다. */
  grid-auto-rows: max-content;
  gap: 10px;
  margin-top: auto;
}

.choice {
  width: 100%;
  min-height: 56px;
  padding: 12px 14px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--panel);
  text-align: left;
  display: grid;
  gap: 2px;
}

.choice:active,
.choice[aria-pressed='true'] {
  border-color: var(--lamp);
  background: var(--panel-2);
}

.choice b {
  font-weight: 600;
}

.choice small {
  color: var(--dim);
  font-size: 14px;
  line-height: 1.45;
}

.primary {
  width: 100%;
  min-height: 52px;
  border: 0;
  border-radius: var(--radius);
  background: var(--lamp);
  color: #1b1a10;
  font-weight: 700;
}

.primary:disabled {
  opacity: 0.45;
  cursor: default;
}

.ghost {
  width: 100%;
  min-height: 48px;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: transparent;
  color: var(--dim);
}

.stick {
  margin-top: auto;
  display: grid;
  gap: 10px;
}

/* 누를 곳은 화면 아래에 두고 위쪽 내용만 스크롤한다. 선택지가 많으면 그 안에서 스크롤한다. */
.stick:not(.free),
.choices:last-child {
  position: sticky;
  bottom: 0;
  z-index: 4;
  padding: 10px 0 max(10px, env(safe-area-inset-bottom));
  background: var(--bg);
  box-shadow: 0 -10px 10px var(--bg);
}

.stick:empty {
  padding: 0;
  box-shadow: none;
}

.choices:last-child {
  max-height: 60dvh;
  overflow-y: auto;
  overscroll-behavior: contain;
}

.chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.choice .chips {
  margin-top: 4px;
}

.chip {
  font-size: 13px;
  padding: 2px 9px;
  border-radius: 999px;
  background: var(--panel-2);
  color: var(--good);
  font-variant-numeric: tabular-nums;
}

.chip.minus {
  color: var(--bad);
}

/* 입력 */
label.field {
  display: grid;
  gap: 6px;
  color: var(--dim);
  font-size: 14px;
}

label.field input {
  min-height: 48px;
  padding: 0 12px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--ink);
  font: inherit;
  font-size: 17px;
}

textarea {
  width: 100%;
  min-height: 72px;
  padding: 10px 12px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--ink);
  font: inherit;
  resize: vertical;
}

/* 시즌 진행 */
.board {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--panel);
  border-radius: var(--radius);
  padding: 10px 14px;
  display: grid;
  gap: 2px;
  font-variant-numeric: tabular-nums;
}

.board .stat {
  color: var(--lamp);
  font-weight: 700;
}

.board .goal {
  font-size: 13px;
  color: var(--dim);
}

.board .goal.met {
  color: var(--good);
}

.log {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
}

.log li {
  display: grid;
  grid-template-columns: 34px 1fr;
  gap: 8px;
  animation: enter 0.18s ease-out;
}

.log time {
  color: var(--dim);
  font-size: 13px;
  padding-top: 2px;
  font-variant-numeric: tabular-nums;
}

.log .hot {
  color: var(--good);
}

.log .cold {
  color: var(--dim);
}

.log .bad {
  color: var(--bad);
}

.log .info {
  color: var(--lamp);
}

.choice:disabled {
  opacity: 0.5;
  cursor: default;
}

/* 살 수 없는 이유는 흐리게 하지 않고 또렷하게 보인다. */
.choice:disabled:has(.short-money) {
  opacity: 0.7;
}

.short-money {
  font-style: normal;
  color: var(--bad);
  font-weight: 700;
}

/* 상황판 */
.situation {
  display: grid;
  grid-template-columns: 44px auto 1fr;
  align-items: center;
  gap: 12px;
  background: var(--panel);
  border-radius: var(--radius);
  padding: 8px 14px;
  font-variant-numeric: tabular-nums;
}

.diamond {
  position: relative;
  width: 44px;
  height: 32px;
}

.base {
  position: absolute;
  width: 13px;
  height: 13px;
  background: var(--line);
  transform: rotate(45deg);
}

.base.on {
  background: var(--lamp);
}

.base.b2 {
  top: 0;
  left: 15px;
}

.base.b3 {
  top: 15px;
  left: 2px;
}

.base.b1 {
  top: 15px;
  left: 28px;
}

.inning {
  display: grid;
  line-height: 1.3;
}

.inning span {
  font-size: 12px;
  color: var(--dim);
}

.score {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: 13px;
  color: var(--dim);
}

.score b {
  flex: none;
  font-size: 18px;
  color: var(--ink);
}

.score b.up {
  color: var(--good);
}

.score b.down {
  color: var(--bad);
}

/* 볼카운트 */
.count {
  display: flex;
  align-items: center;
  gap: 14px;
  background: var(--panel);
  border-radius: var(--radius);
  padding: 8px 14px;
  font-variant-numeric: tabular-nums;
}

.lamp {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 700;
  color: var(--dim);
}

.lamp div {
  display: flex;
  gap: 4px;
}

.lamp i {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--line);
}

.lamp i.on.ball {
  background: var(--good);
}

.lamp i.on.strike {
  background: var(--lamp);
}

.count .skills {
  margin-left: auto;
  font-size: 12px;
  color: var(--dim);
  text-align: right;
}

.field {
  display: grid;
  gap: 6px;
  color: var(--dim);
  font-size: 14px;
}

.regions {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 6px;
}

.modes {
  display: grid;
  grid-auto-columns: 1fr;
  grid-auto-flow: column;
  gap: 6px;
}

.mode {
  min-height: 42px;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: transparent;
  color: var(--dim);
}

.mode[aria-pressed='true'] {
  border-color: var(--lamp);
  background: var(--panel-2);
  color: var(--ink);
  font-weight: 700;
}

.wait {
  width: 100%;
  min-height: 52px;
  border: 1px solid var(--good);
  border-radius: var(--radius);
  background: var(--panel);
  color: var(--ink);
  font-weight: 700;
}

.menu {
  position: relative;
  flex: none;
}

.menu summary {
  display: flex;
  align-items: center;
  min-height: 32px;
  padding: 0 6px;
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--dim);
  font-size: 13px;
  white-space: nowrap;
  list-style: none;
  cursor: pointer;
}

.menu summary::-webkit-details-marker {
  display: none;
}

.menu[open] summary {
  color: var(--ink);
}

.menu-panel {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 5;
  display: grid;
  gap: 6px;
  width: 210px;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel);
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.45);
}

.menu-item {
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: transparent;
  color: var(--ink);
  font-size: 14px;
}

.sound-control {
  display: grid;
  gap: 6px;
  padding: 4px 2px 2px;
  color: var(--ink);
  font-size: 13px;
}

.sound-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}

.mute {
  min-height: 36px;
  padding: 0 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: transparent;
  color: var(--dim);
  font-size: 12px;
}

.sound-control input {
  width: 100%;
  margin: 0;
  accent-color: var(--lamp);
}

.share-box {
  display: grid;
  justify-items: center;
  gap: 10px;
  margin-top: 8px;
}

.share-box .primary,
.share-box .ghost {
  width: 100%;
}

.share-card {
  width: min(100%, 280px);
  border: 1px solid var(--line);
  border-radius: 8px;
}

.title-tools {
  position: absolute;
  top: 12px;
  right: 16px;
  z-index: 3;
}

.title-tools summary {
  background: rgba(0, 0, 0, 0.5);
  color: var(--ink);
}

/* 승부 연출 */
.zone-fx {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: grid;
  place-items: center;
  color: var(--lamp);
  font-size: 58px;
  font-weight: 900;
  text-shadow: 0 3px 0 #000, 0 0 18px rgba(0, 0, 0, 0.75);
  pointer-events: none;
  animation: stamp 0.32s cubic-bezier(0.2, 1.4, 0.4, 1);
}

.fx-strikeout .zone-fx {
  color: var(--ink);
  font-size: 150px;
}

.fx-homer .zone-fx {
  font-size: 72px;
}

@keyframes stamp {
  from {
    opacity: 0;
    transform: scale(2.1);
  }
}

.fly-ball {
  position: absolute;
  left: 46%;
  top: 56%;
  z-index: 2;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: #f4f4ee;
  box-shadow: 0 0 0 2px #c9493f inset;
  opacity: 0;
  pointer-events: none;
  animation: fly-hit 0.5s ease-out;
}

.fx-homer .fly-ball {
  animation: fly-homer 0.9s ease-out;
}

@keyframes fly-hit {
  from {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }
  to {
    opacity: 0;
    transform: translate(120px, -40px) scale(0.5);
  }
}

@keyframes fly-homer {
  from {
    opacity: 1;
    transform: translate(0, 0) scale(1.2);
  }
  to {
    opacity: 0;
    transform: translate(70px, -210px) scale(0.1);
  }
}

.zone.fx-homer,
.zone.fx-strikeout {
  animation: zone-shake 0.3s ease-out;
}

@keyframes zone-shake {
  20% {
    transform: translate(-4px, 2px);
  }
  45% {
    transform: translate(4px, -2px);
  }
  70% {
    transform: translate(-2px, 1px);
  }
}

.zone.fx-homer::before,
.zone.fx-strikeout::before,
.zone.fx-hit::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: var(--radius);
  background: var(--lamp);
  opacity: 0;
  pointer-events: none;
  animation: zone-flash 0.35s ease-out;
}

.zone.fx-fail {
  opacity: 0.55;
  transition: opacity 0.3s;
}

@keyframes zone-flash {
  from {
    opacity: 0.35;
  }
}

.zone.fx-homer + .pitch-note,
.zone.fx-hit + .pitch-note {
  display: none;
}

/* 스트라이크존 */
.zone {
  position: relative;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 3px;
  width: 100%;
  max-width: 340px;
  margin: 0 auto;
  padding: 6px;
  border-radius: var(--radius);
  background: #0b110e;
}

.cell {
  position: relative;
  aspect-ratio: 1;
  padding: 0;
  border: 0;
  border-radius: 4px;
  background: var(--panel);
}

.cell.strike {
  background: #2c3b33;
  box-shadow: inset 0 0 0 1px #4a6155;
}

.cell.favorite {
  background: #6d5a22;
  box-shadow: inset 0 0 0 2px var(--lamp);
}

/* 노림수: 투수가 더 자주 던지는 칸은 빨갛게 */
.cell.favorite.read {
  background: #6e2b23;
  box-shadow: inset 0 0 0 2px var(--bad);
}

.cell.weak {
  background: #213a52;
  box-shadow: inset 0 0 0 2px #6fa8dc;
}

.traits {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  font-size: 13px;
}

.trait {
  padding: 1px 8px;
  border: 1px solid var(--lamp);
  border-radius: 999px;
  color: var(--lamp);
  font-weight: 700;
}

button.trait {
  background: transparent;
  font-size: inherit;
  line-height: inherit;
}

button.trait:hover {
  background: rgba(242, 193, 78, 0.12);
}

button.trait[aria-expanded='true'] {
  background: var(--lamp);
  color: var(--bg);
}

.trait-box {
  display: grid;
  gap: 6px;
}

.trait-note {
  padding: 8px 10px;
  border-left: 3px solid var(--lamp);
  background: var(--panel);
  font-size: 13px;
  color: var(--ink);
}

.trait-note b {
  color: var(--lamp);
}

.cell:not(:disabled):active {
  outline: 2px solid var(--ink);
}

.cell:disabled {
  cursor: default;
}

.cell.aimed::before {
  content: '';
  position: absolute;
  inset: 14%;
  border: 2px dashed var(--lamp);
  border-radius: 50%;
}

.cell.mitt::before {
  content: '';
  position: absolute;
  inset: 16%;
  border: 2px solid var(--dim);
  border-radius: 4px;
}

.cell.pitched::after {
  content: '';
  position: absolute;
  inset: 26%;
  border-radius: 50%;
  background: #f4f4ee;
  box-shadow: 0 0 0 2px #c9493f inset;
  animation: pitch 0.34s ease-in;
}

@keyframes pitch {
  from {
    transform: scale(0.15);
    opacity: 0.4;
  }
}

.pitch-note {
  font-size: 14px;
  color: var(--dim);
  text-align: center;
}

.pitch-detail {
  text-align: center;
}

.pitch-note.result {
  font-size: 22px;
  font-weight: 700;
  color: var(--lamp);
}

.log.wide li {
  grid-template-columns: 92px 1fr;
}

.after-results {
  display: grid;
  gap: 12px;
}

.standings tr.out td {
  opacity: 0.6;
}

.tap-hint {
  text-align: center;
  color: var(--dim);
  font-size: 13px;
}

.scene {
  display: grid;
  gap: 12px;
}

.scene p {
  font-size: 17px;
  animation: enter 0.18s ease-out;
}

.verdict {
  font-size: 20px;
  font-weight: 700;
}

.table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}

.table td {
  padding: 7px 0;
  border-top: 1px solid var(--line);
  vertical-align: top;
}

.table tr:first-child td {
  border-top: 0;
}

.table td:first-child {
  width: 58px;
  color: var(--dim);
}

.feedback-link {
  display: block;
  padding: 14px;
  border-radius: var(--radius);
  background: var(--panel-2);
  color: var(--lamp);
  font-weight: 700;
  text-align: center;
  text-decoration: none;
}

.feedback {
  display: grid;
  gap: 8px;
}

@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
  }
}


/* ---------- PC 넓은 창: 2단 ---------- */
.side {
  display: none;
}

@media (min-width: 1000px) {
  #app.has-side {
    max-width: 1200px;
    display: grid;
    grid-template-columns: 320px minmax(0, 1fr);
    grid-template-rows: auto auto 1fr;
    column-gap: 28px;
    padding: 20px 28px 24px;
  }

  #app.has-side > .topbar {
    grid-column: 1 / -1;
  }

  /* 1000~1279px: 두 칸을 왼쪽에 위아래로 둔다. */
  #app.has-side > .side {
    display: flex;
    flex-direction: column;
    gap: 12px;
    grid-column: 1;
    align-self: start;
  }

  #app.has-side > .side-left {
    grid-row: 2;
  }

  #app.has-side > .side-right {
    grid-row: 3;
    margin-top: 12px;
  }

  #app.has-side > .screen {
    grid-column: 2;
    grid-row: 2 / span 2;
    max-width: 760px;
  }

  /* 왼쪽 칸에 이미 있는 내용은 본문에서 뺀다. */
  #app.has-side > .screen > details.player {
    display: none;
  }

  #app.has-side .topbar .who-row {
    display: none;
  }

  .side > details.player {
    margin: 0;
  }
}


/* ---------- 결정적 순간 진입 연출 ---------- */
.moment-intro {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 24px 16px;
  background: #050806;
  cursor: pointer;
  outline: none;
  animation: mi-shake 0.45s 0.85s ease-out both;
}

.mi-flash {
  color: var(--lamp);
  font-size: clamp(28px, 7vw, 56px);
  font-weight: 800;
  letter-spacing: 0.08em;
  animation: mi-flash 0.9s ease-out both;
}

.mi-title {
  color: var(--dim);
  font-size: 16px;
  font-weight: 600;
  animation: mi-rise 0.4s 0.5s ease-out both;
}

.mi-board {
  width: min(520px, 100%);
  animation: mi-rise 0.45s 1s ease-out both;
}

.mi-board .situation {
  margin: 0;
}

.mi-versus {
  width: min(520px, 100%);
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 12px;
}

.mi-side {
  display: grid;
  justify-items: center;
  gap: 4px;
  padding: 14px 10px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
  text-align: center;
  animation: mi-from-right 0.45s 1.9s ease-out both;
}

.mi-side.me {
  border-color: var(--lamp);
  animation-name: mi-from-left;
}

.mi-side small {
  color: var(--dim);
  font-size: 12px;
}

.mi-side .logo.large,
.mi-side .portrait,
.mi-badge {
  display: block;
  width: 72px;
  height: 72px;
}

.mi-badge {
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--panel-2);
  border: 2px solid var(--bad);
  color: var(--bad);
  font-style: normal;
  font-size: 30px;
  font-weight: 800;
}

@media (min-width: 1000px) {
  .mi-board,
  .mi-versus {
    width: 640px;
  }

  .mi-side {
    padding: 20px 14px;
  }

  .mi-side b {
    font-size: 18px;
  }

  .mi-side small {
    font-size: 13px;
  }

  .mi-title {
    font-size: 20px;
  }
}

.mi-vs {
  color: var(--bad);
  font-size: 26px;
  font-weight: 800;
  animation: mi-flash 0.5s 2.3s ease-out both;
}

.mi-weapons {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 6px;
  animation: mi-rise 0.4s 2.6s ease-out both;
}

.mi-skip {
  color: var(--dim);
  font-size: 12px;
  opacity: 0.6;
  animation: mi-rise 0.4s 1.2s ease-out both;
}

@keyframes mi-flash {
  0% { opacity: 0; transform: scale(1.6); filter: blur(6px); }
  60% { opacity: 1; transform: scale(0.96); filter: blur(0); }
  100% { opacity: 1; transform: scale(1); }
}

@keyframes mi-rise {
  from { opacity: 0; transform: translateY(14px); }
}

@keyframes mi-from-left {
  from { opacity: 0; transform: translateX(-40px); }
}

@keyframes mi-from-right {
  from { opacity: 0; transform: translateX(40px); }
}

@keyframes mi-shake {
  0%, 100% { transform: none; }
  20% { transform: translate(-6px, 2px); }
  40% { transform: translate(5px, -3px); }
  60% { transform: translate(-3px, 2px); }
  80% { transform: translate(2px, -1px); }
}

@media (prefers-reduced-motion: reduce) {
  .moment-intro,
  .moment-intro * {
    animation: none !important;
  }
}


/* ---------- 포스트시즌 대진표 ---------- */
.post-tables {
  display: grid;
  gap: 12px;
}

/* 대진표 나무 (가을야구, 국제대회) */
.bracket {
  --br-gap: 28px;
  container-type: inline-size;
  overflow-x: auto;
  padding: 12px 14px 14px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
}

.br-tree {
  min-width: 500px;
}

.br-head,
.br-body {
  position: relative;
}

.br-head {
  height: 22px;
}

.br-head .br-label,
.br-body > * {
  position: absolute;
}

.br-label {
  margin: 0;
  color: var(--dim);
  font-size: 12px;
  text-align: center;
}

.br-team {
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 5px;
  box-sizing: border-box;
  height: 28px;
  padding: 0 8px 0 5px;
  border-radius: 6px;
  border: 1px solid var(--line);
  background: var(--bg);
  color: var(--dim);
  font-size: 13px;
  white-space: nowrap;
}

.br-team .logo {
  flex: none;
  width: 16px;
}

.br-team .flag {
  width: 18px;
}

.br-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.br-seed {
  flex: none;
  width: 12px;
  color: var(--dim);
  font-size: 11px;
  text-align: center;
}

.br-score {
  flex: none;
  font-variant-numeric: tabular-nums;
}

.br-team.won {
  color: var(--ink);
  font-weight: 700;
  border-color: #3d4a44;
}

.br-team.lost {
  opacity: 0.7;
}

.br-team.lost .br-score {
  font-weight: 400;
}

.br-team.me {
  border-color: var(--lamp);
}

.br-team.me .br-name {
  color: var(--lamp);
}

.br-team.champ {
  border-color: var(--lamp);
  box-shadow: 0 0 0 1px var(--lamp);
  background: #2a2614;
}

/* 이어 주는 선. 이긴 쪽 길은 밝게. */
.br-line {
  box-sizing: border-box;
  width: calc(var(--br-gap) / 2);
  border: 0 solid var(--line);
  border-right-width: 2px;
}

.br-line.up {
  border-top-width: 2px;
}

.br-line.down {
  border-bottom-width: 2px;
}

.br-line.out {
  height: 2px;
  border-right-width: 0;
  border-top-width: 2px;
  margin-top: -1px;
}

.br-line.hot {
  border-color: var(--lamp);
  z-index: 1;
}

/* 칸이 좁으면 도시 이름을 빼고, 더 좁으면 로고도 빼고 간격을 줄인다. */
@container (max-width: 900px) {
  .br-city {
    display: none;
  }
}

@container (max-width: 720px) {
  .br-tree {
    --br-gap: 18px;
  }

  .br-team {
    gap: 4px;
    padding: 0 6px 0 3px;
    font-size: 12px;
  }

  .br-team .logo {
    display: none;
  }
}

/* ---------- 와인드업과 공 ---------- */
.zone {
  position: relative;
}

.zone.pitching .cell {
  cursor: default;
}

.cell.chosen {
  box-shadow: inset 0 0 0 2px var(--ink);
}

.incoming {
  position: absolute;
  left: 0;
  top: 0;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #f4f4ee;
  box-shadow: 0 0 0 2px #c9493f inset;
  pointer-events: none;
  z-index: 3;
  animation: set-ball 0.65s ease-in-out;
}

/* 와인드업 동안 공이 투수 손에서 흔들린다. */
@keyframes set-ball {
  0% { opacity: 0; }
  30% { opacity: 1; margin-top: -6px; }
  60% { margin-top: 4px; }
  100% { margin-top: 0; }
}

.incoming.flying {
  animation: none;
}


/* ---------- 오늘의 무기 고르기 ---------- */
.loadout {
  display: grid;
  gap: 8px;
}

.loadout-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.loadout-head b {
  color: var(--lamp);
}

.weapons {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 8px;
}

.weapon {
  display: grid;
  gap: 2px;
  padding: 10px 12px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--panel);
  text-align: left;
}

.weapon b {
  color: var(--lamp);
}

.weapon small {
  color: var(--dim);
  font-size: 13px;
  line-height: 1.45;
}

.weapon[aria-pressed='true'] {
  border-color: var(--lamp);
  background: #3a3218;
  box-shadow: inset 0 0 0 1px var(--lamp);
}

.weapon:disabled {
  opacity: 0.45;
  cursor: default;
}


/* 1280px 이상: 선수 | 본문 | 시즌·살림 3단. 양쪽 칸은 화면에 붙어 따로 스크롤된다. */
@media (min-width: 1280px) {
  #app.has-side {
    max-width: 1680px;
    grid-template-columns: minmax(280px, 340px) minmax(0, 1fr) minmax(280px, 340px);
    grid-template-rows: auto 1fr;
    column-gap: 24px;
  }

  #app.has-side > .side {
    position: sticky;
    top: 16px;
    max-height: calc(100dvh - 32px);
    overflow-y: auto;
    padding-right: 4px;
  }

  #app.has-side > .side-left {
    grid-column: 1;
    grid-row: 2;
  }

  #app.has-side > .side-right {
    grid-column: 3;
    grid-row: 2;
    margin-top: 0;
  }

  #app.has-side > .screen {
    grid-column: 2;
    grid-row: 2;
    max-width: none;
    width: 100%;
    max-width: 820px;
    justify-self: center;
  }
}

/* PC에서는 선택지를 화면 맨 아래로 밀지 않고 내용 바로 아래에 둔다. 내용이 길면 여전히 아래에 붙어 따라온다. */
@media (min-width: 1000px) {
  #app.has-side > .screen > .choices,
  #app.has-side > .screen > .stick {
    margin-top: 4px;
  }
}


/* ---------- 시작 화면 ---------- */
.title-panel {
  display: contents;
}

/* PC: 왼쪽은 그림이 화면 높이를 꽉 채우고, 오른쪽에 제목, 시작 버튼, 랭킹을 모은다. */
@media (min-width: 1000px) {
  #app.is-title {
    max-width: none;
    min-height: 100dvh;
    padding: 0;
    display: grid;
    grid-template-columns: minmax(0, 1.25fr) minmax(420px, 1fr);
    gap: 0;
  }

  #app.is-title > .cover {
    grid-column: 1;
    grid-row: 1;
    width: 100%;
    height: 100dvh;
    margin: 0;
    aspect-ratio: auto;
    object-position: 60% 60%;
    position: sticky;
    top: 0;
    -webkit-mask-image: linear-gradient(90deg, #000 50%, transparent 98%);
    mask-image: linear-gradient(90deg, #000 50%, transparent 98%);
  }

  #app.is-title > .title-panel {
    grid-column: 2;
    grid-row: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 16px;
    max-width: 520px;
    padding: 56px 48px 40px 24px;
  }

  #app.is-title .hero {
    flex: none;
  }

  #app.is-title .hero h1 {
    font-size: 64px;
  }

  #app.is-title .hero p:last-child {
    font-size: 17px;
  }

  /* 시작 버튼은 제목 바로 아래로 올린다. */
  #app.is-title .title-panel > .stick {
    order: 1;
    position: static;
    margin-top: 0;
    padding: 0;
    box-shadow: none;
    background: none;
  }

  #app.is-title .title-panel > .hero {
    order: 0;
  }

  #app.is-title .title-panel > :not(.hero):not(.stick) {
    order: 2;
  }

  #app.is-title .stick .primary,
  #app.is-title .stick .ghost {
    min-height: 54px;
    font-size: 17px;
  }

  #app.is-title > .title-tools {
    position: fixed;
    top: 16px;
    right: 20px;
  }
}


/* ---------- 상단 막대 없는 화면(선수 만들기, 랭킹, 엔딩)의 PC 배치 ---------- */
.create-grid,
.create-look,
.create-form {
  display: contents;
}

@media (min-width: 1000px) {
  #app:not(.has-side):not(.is-title) {
    max-width: 1080px;
    padding: 28px 32px 32px;
  }

  #app:not(.has-side):not(.is-title) .screen > .stick,
  #app:not(.has-side):not(.is-title) .screen > .choices {
    margin-top: 8px;
  }

  .create-grid {
    display: grid;
    grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
    gap: 32px;
    align-items: start;
  }

  .create-look {
    display: flex;
    flex-direction: column;
    gap: 14px;
    position: sticky;
    top: 20px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--panel);
    border: 1px solid var(--line);
  }

  .create-form {
    display: flex;
    flex-direction: column;
    gap: 14px;
  }

  .create-form .choices {
    margin-top: 0;
    grid-template-columns: 1fr 1fr;
  }

  .create-form .stick {
    position: static;
    margin-top: 4px;
    padding: 0;
    box-shadow: none;
    background: none;
  }
}


/* ---------- 승부 방식 설명 ---------- */
.mode-guide {
  display: grid;
  gap: 8px;
  padding: 12px 14px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
}

.mode-how {
  margin: 0;
  font-size: 14px;
  line-height: 1.5;
}

.mode-how b {
  color: var(--lamp);
  margin-right: 4px;
}

.mode-effects {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mode-effects li {
  font-size: 13px;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--panel-2);
  font-variant-numeric: tabular-nums;
}

.mode-effects li.good {
  color: var(--good);
}

.mode-effects li.bad {
  color: var(--bad);
}

.mode-note {
  margin: 0;
  font-size: 12px;
}


/* ---------- 은퇴 엔딩 글 ---------- */
.epilogue {
  display: grid;
  gap: 12px;
  padding: 22px 24px 24px;
  border-radius: var(--radius);
  background: linear-gradient(180deg, #1c211d 0%, #161a17 100%);
  border: 1px solid var(--line);
  border-top: 3px solid var(--lamp);
}

.epi-kicker {
  margin: 0;
  color: var(--lamp);
  font-size: 12px;
  letter-spacing: 0.08em;
}

.epi-headline {
  margin: 0 0 4px;
  font-size: 22px;
  line-height: 1.4;
  word-break: keep-all;
}

.epilogue p:not(.epi-kicker) {
  margin: 0;
  font-size: 15px;
  line-height: 1.85;
  color: #d9ddd5;
  word-break: keep-all;
  opacity: 0;
  animation: epi-in 0.9s ease-out forwards;
}

.epilogue p:last-child {
  color: var(--ink);
  font-weight: 600;
}

@keyframes epi-in {
  from {
    opacity: 0;
    transform: translateY(6px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .epilogue p:not(.epi-kicker) {
    opacity: 1;
    animation: none;
  }
}

.epilogue.still p:not(.epi-kicker) {
  opacity: 1;
  animation: none;
}

.rank-story {
  margin-top: 8px;
}

.rank-story summary {
  cursor: pointer;
  color: var(--lamp);
  font-size: 13px;
}

.rank-story .epilogue {
  margin-top: 10px;
  padding: 16px 18px;
}

.rank-story .epi-headline {
  font-size: 18px;
}

.epi-type {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  margin: 2px 0 0;
}

.epi-type small {
  color: var(--dim);
  font-size: 12px;
}

.epi-type b {
  color: var(--lamp);
  font-size: 18px;
}

.epilogue p.epi-type {
  opacity: 1;
  animation: none;
}

.rank-type {
  color: var(--lamp);
}

.mi-opponent {
  width: 72px;
}

/* 루킹 삼진: 기록지처럼 거꾸로 쓴 K */
.zone-fx.looking {
  transform: scaleX(-1);
  animation-name: stamp-flip;
}

@keyframes stamp-flip {
  from {
    opacity: 0;
    transform: scale(-2.1, 2.1);
  }
}


/* ---------- 손글씨 글꼴 (편지) ---------- */
@font-face {
  font-family: 'Letter Pen';
  src: url('assets/fonts/NanumPenScript-Regular.ttf') format('truetype');
  font-display: swap;
}

@font-face {
  font-family: 'Letter Brush';
  src: url('assets/fonts/NanumBrushScript-Regular.ttf') format('truetype');
  font-display: swap;
}

@font-face {
  font-family: 'Letter Kid';
  src: url('assets/fonts/Gaegu-Regular.ttf') format('truetype');
  font-display: swap;
}

@font-face {
  font-family: 'Letter Single';
  src: url('assets/fonts/SingleDay-Regular.ttf') format('truetype');
  font-display: swap;
}

/* ---------- 팀별 커리어 ---------- */
.stints {
  display: grid;
  gap: 10px;
}

.stints h3,
.letters h3 {
  margin: 0;
}

.stints ol {
  display: grid;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.stint {
  display: grid;
  gap: 4px;
  padding: 12px 14px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
}

.stint p {
  margin: 0;
  font-size: 14px;
}

.stint-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.stint-head .muted {
  font-size: 13px;
}

.stint-leave {
  color: var(--dim);
  font-size: 13px;
}

/* ---------- 편지 봉투 ---------- */
.letters {
  display: grid;
  gap: 10px;
}

.envelopes {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
}

.envelope {
  position: relative;
  display: grid;
  gap: 4px;
  padding: 18px 16px 14px 56px;
  min-height: 86px;
  text-align: left;
  border-radius: 6px;
  border: 1px solid #c9b88f;
  background:
    linear-gradient(155deg, transparent 49.5%, rgba(120, 95, 50, 0.18) 50%, transparent 50.5%),
    linear-gradient(25deg, transparent 49.5%, rgba(120, 95, 50, 0.18) 50%, transparent 50.5%),
    #efe3c4;
  color: #3a2f1c;
  box-shadow: 0 2px 0 rgba(0, 0, 0, 0.25);
  transition: transform 0.15s ease;
}

.envelope:hover {
  transform: translateY(-2px) rotate(-0.5deg);
}

.envelope b {
  font-size: 15px;
}

.envelope small {
  color: #6b5a3a;
  font-size: 12px;
}

.envelope .new {
  position: absolute;
  top: 8px;
  right: 10px;
  font-style: normal;
  font-size: 11px;
  font-weight: 700;
  color: #b3202c;
}

.envelope .kind-count {
  position: absolute;
  top: 8px;
  right: 10px;
  font-style: normal;
  font-size: 12px;
  font-weight: 700;
  color: #6b4a1a;
}

.envelope .slot-no {
  position: absolute;
  top: 6px;
  left: 10px;
  font-size: 10px;
  color: #8a7650;
  letter-spacing: 0.05em;
}

.envelope.empty {
  min-height: 64px;
  padding-top: 14px;
  padding-bottom: 10px;
  border: 1px dashed var(--line);
  background: transparent;
  color: var(--dim);
  box-shadow: none;
}

.envelope.empty:hover {
  transform: none;
}

.envelope.empty small,
.envelope.empty .slot-no {
  color: var(--dim);
}

.seal {
  position: absolute;
  left: 16px;
  top: 50%;
  width: 28px;
  height: 28px;
  margin-top: -14px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #d9534a, #9c2a22);
  box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.15);
}

.letter-progress {
  height: 8px;
  border-radius: 999px;
  background: var(--panel-2);
  overflow: hidden;
}

.letter-progress i {
  display: block;
  height: 100%;
  background: var(--lamp);
}

/* ---------- 펼친 편지 ---------- */
.letter-overlay {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 14px;
  padding: 24px 16px;
  overflow-y: auto;
  background: rgba(6, 10, 8, 0.82);
}

.letter-stage {
  width: min(560px, 100%);
  perspective: 1400px;
}

.letter-folds {
  position: relative;
  transform-style: preserve-3d;
}

.letter-fold {
  position: absolute;
  left: 0;
  right: 0;
  transform-style: preserve-3d;
}

/* 한 칸의 앞면(글씨)과 뒷면(빈 종이). 보이는 쪽만 그린다. */
.fold-face {
  position: absolute;
  inset: 0;
  overflow: hidden;
  backface-visibility: hidden;
}

.fold-face.back {
  transform: rotateX(180deg);
  background: #efe6cf;
  box-shadow: inset 0 0 0 1px rgba(120, 95, 50, 0.25);
}

.letter-fold.f0 {
  transform-origin: bottom center;
}

.letter-fold.f2 {
  transform-origin: top center;
}

.fold-face .letter-paper {
  position: absolute;
  left: 0;
  right: 0;
  box-shadow: none;
}

.letter-cover {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: grid;
  place-items: center;
  align-content: center;
  gap: 4px;
  background: #efe3c4;
  color: #3a2f1c;
}

.letter-cover .seal {
  position: static;
  margin: 0 0 6px;
}

.letter-cover small {
  color: #6b5a3a;
}

.letter-paper {
  padding: 34px 34px 30px;
  border-radius: 3px;
  background:
    repeating-linear-gradient(180deg, transparent 0, transparent 37px, rgba(90, 120, 160, 0.28) 37px, rgba(90, 120, 160, 0.28) 38px),
    radial-gradient(circle at 20% 15%, rgba(255, 255, 255, 0.5), transparent 60%),
    #fbf6ea;
  background-position: 0 22px, 0 0, 0 0;
  color: #2b2a33;
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.45);
  line-height: 38px;
  font-size: 23px;
  word-break: keep-all;
}

.letter-paper p {
  margin: 0;
}

.letter-to {
  margin-bottom: 4px !important;
}

.letter-from {
  margin-top: 12px !important;
  text-align: right;
}

.letter-date {
  text-align: right;
  font-size: 0.8em;
  color: #6c6a73;
}

.letter-paper.font-pen,
.envelope.font-pen b {
  font-family: 'Letter Pen', cursive;
}

.letter-paper.font-pen {
  font-size: 27px;
}

.letter-paper.font-brush,
.envelope.font-brush b {
  font-family: 'Letter Brush', cursive;
}

.letter-paper.font-brush {
  font-size: 27px;
  color: #1f1d1a;
}

.letter-paper.font-kid,
.envelope.font-kid b {
  font-family: 'Letter Kid', cursive;
}

.letter-paper.font-kid {
  font-size: 22px;
  color: #2a3a6b;
}

.letter-paper.font-single,
.envelope.font-single b {
  font-family: 'Letter Single', cursive;
}

.letter-paper.font-single {
  font-size: 21px;
  color: #4a2a3a;
}

.envelope b {
  font-size: 20px;
}

.letter-close {
  width: min(560px, 100%);
}

@media (max-width: 520px) {
  .letter-paper {
    padding: 26px 20px 22px;
    font-size: 20px;
  }
}

.mode-guide summary {
  cursor: pointer;
  list-style: none;
}

.mode-guide summary::-webkit-details-marker {
  display: none;
}

/* 휴대폰: 스트라이크존을 줄여 안내 문장과 버튼이 한 화면에 들어오게 한다(칸은 약 50px). */
@media (max-width: 520px) {
  .zone {
    max-width: 280px;
  }

  .mode-guide {
    padding: 10px 12px;
  }

  .mode-guide:not([open]) summary::after {
    content: ' · 자세히';
    color: var(--lamp);
    font-size: 12px;
  }
}

/* 대진표 목록형(좁은 화면) */
.br-list {
  display: none;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.br-list li {
  display: grid;
  gap: 4px;
}

.br-list .br-label {
  text-align: left;
  margin: 0;
}

.br-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}

.br-list .br-team .logo {
  display: inline-block;
}

@container (max-width: 480px) {
  .br-tree {
    display: none;
  }

  .br-list {
    display: grid;
  }
}

/* 광고 자리: 게임 버튼과 섞이지 않게 '광고' 표시를 붙이고 테두리로 구분한다. */
.ad-slot {
  display: grid;
  gap: 4px;
  padding: 8px;
  border-radius: var(--radius);
  border: 1px dashed var(--line);
}

.ad-slot small {
  color: var(--dim);
  font-size: 11px;
}

.privacy-link {
  color: var(--dim);
  text-decoration: underline;
}

/* 휴대폰: 은퇴 기사 여백을 줄인다. */
@media (max-width: 520px) {
  .epilogue {
    padding: 18px 16px 20px;
  }
}

/* 선택지 능력치 변화 접기(휴대폰) */
.choices.chips-hidden .choice .chips {
  display: none;
}

.chip-toggle {
  justify-self: end;
  padding: 4px 10px;
  border: 0;
  border-radius: 999px;
  background: var(--panel-2);
  color: var(--lamp);
  font-size: 13px;
}

.trait-goals p {
  margin: 6px 0 0;
  font-size: 14px;
}

/* 휴대폰 결정적 승부: 존 위쪽 정보를 줄여 스트라이크존을 화면 가운데로 올린다. */
@media (max-width: 520px) {
  #app.in-atbat .topbar .who-row,
  #app.in-atbat .record-line {
    display: none;
  }

  #app.in-atbat .screen {
    gap: 8px;
  }

  #app.in-atbat .situation {
    padding: 8px 12px;
  }

  #app.in-atbat .count {
    padding: 6px 12px;
  }

  #app.in-atbat .modes .mode {
    min-height: 40px;
  }
}

/* 선수 정보 칸(PC 옆 칸, 휴대폰 '내 정보' 창 공통) */
.side-head {
  display: grid;
  grid-template-columns: 72px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 12px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
}

.side-head .portrait {
  width: 72px;
  height: 72px;
}

.side-head p {
  font-size: 13px;
  display: flex;
  align-items: center;
  gap: 4px;
}

.side-name {
  font-size: 18px;
}

.side-ovr {
  display: grid;
  justify-items: center;
  line-height: 1.1;
}

.side-ovr small {
  color: var(--dim);
  font-size: 11px;
}

.side-ovr b {
  color: var(--lamp);
  font-size: 30px;
}

.side-block {
  padding: 12px;
  border-radius: var(--radius);
  background: var(--panel);
  border: 1px solid var(--line);
  display: grid;
  gap: 6px;
}

.side-block h3 {
  font-size: 12px;
  color: var(--dim);
  font-weight: 600;
  letter-spacing: 0.02em;
}

.side-block p {
  font-size: 14px;
}

.side-season {
  display: grid;
  font-size: 13px;
}

.side-season small {
  color: var(--dim);
}


/* 휴대폰: 얼굴을 누르면 아래에서 올라오는 '내 정보' 창 */
.who-row.as-button {
  width: 100%;
  padding: 2px 0;
  border: 0;
  background: none;
  color: inherit;
  text-align: left;
  cursor: pointer;
}

.who-row .who-more {
  margin-left: auto;
  color: var(--lamp);
  font-size: 12px;
  white-space: nowrap;
}

.sheet-overlay {
  position: fixed;
  inset: 0;
  z-index: 40;
  display: flex;
  align-items: flex-end;
  background: rgba(6, 10, 8, 0.7);
}

.player-sheet {
  width: 100%;
  max-height: 86dvh;
  overflow-y: auto;
  padding: 14px 14px max(16px, env(safe-area-inset-bottom));
  border-radius: 16px 16px 0 0;
  background: var(--bg);
  border-top: 1px solid var(--line);
  display: grid;
  gap: 12px;
  animation: sheet-up 0.22s ease-out;
}

.player-sheet .side {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.player-sheet .sheet-close {
  position: sticky;
  bottom: 0;
}

@keyframes sheet-up {
  from {
    transform: translateY(40px);
    opacity: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .player-sheet {
    animation: none;
  }
}

.name-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 8px;
}

.name-row .ghost {
  width: auto;
  padding: 0 14px;
  white-space: nowrap;
}

.slot-dummy {
  display: grid;
  place-items: center;
  min-height: 100px;
  border-radius: 8px;
  background: repeating-linear-gradient(45deg, #222b27, #222b27 10px, #1c2420 10px, #1c2420 20px);
  color: var(--dim);
  font-size: 13px;
}

/* 광고 자리 미리보기(?adpreview=1) */
.slot-preview {
  display: grid;
  gap: 4px;
  padding: 8px;
  border-radius: var(--radius);
  border: 1px dashed var(--line);
}

.slot-preview small {
  color: var(--dim);
  font-size: 11px;
}

/* 결산 광고는 버튼과 충분히 떨어뜨린다(실수 클릭 방지). */
.slot-summary {
  margin: 12px 0 28px;
}

/* PC 3단·2단(옆 칸 있음): 본문 결산 광고 대신 오른쪽 칸 광고를 쓴다. 휴대폰은 반대. */
.slot-side {
  display: none !important;
}

@media (min-width: 1000px) {
  #app.has-side .screen .slot-summary {
    display: none !important;
  }

  #app.has-side .side .slot-side {
    display: grid !important;
  }

  .slot-side .slot-dummy {
    min-height: 250px;
  }
}
