/* 색상과 공통 크기 */
:root {
  --pink-100: #fff0f6;
  --pink-200: #ffe0ee;
  --pink-300: #ffc9e0;
  --pink-400: #ff9dc4;
  --pink-500: #f56aa0;
  --cream: #fff8f0;
  --ink: #5b4a63;
  --ink-soft: #8a7a92;
  --white: #ffffff;
  --accent: #7bd3c4;

  --radius: 26px;
  --shadow-soft: 0 10px 30px rgba(245, 106, 160, 0.18);
  --shadow-pop: 0 18px 44px rgba(245, 106, 160, 0.32);

  --controls-h: 84px;
}

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  background: var(--pink-200);
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: "Jua", "Apple SD Gothic Neo", sans-serif;
  color: var(--ink);

  min-height: 100vh;
  min-height: 100dvh;
  overflow-x: hidden;
  position: relative;
  background: var(--pink-200);
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}

button {
  font-family: inherit;
  cursor: pointer;
  border: none;
  background: none;
  color: inherit;
}

body,
.playground {
  max-width: 100%;
}

.bg {
  position: fixed;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}

.bg-gradient {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    170deg,
    #fff3f9 0%,
    #ffe7f2 38%,
    #ffe0ef 62%,
    #e9f7ff 100%
  );
}

.bg-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(6px);
  opacity: 0.5;
  transform-origin: center;
  will-change: transform, opacity;
}
.bg-orb--1 {
  width: 220px;
  height: 220px;
  left: -60px;
  top: 8%;
  background: radial-gradient(circle at 40% 40%, #ffd0e6, #ffb6d6 70%);
}
.bg-orb--2 {
  width: 180px;
  height: 180px;
  right: -50px;
  top: 30%;
  background: radial-gradient(circle at 40% 40%, #cdeffb, #a9def0 70%);
}
.bg-orb--3 {
  width: 150px;
  height: 150px;
  left: 20%;
  bottom: 6%;
  background: radial-gradient(circle at 40% 40%, #fff0b8, #ffe08a 70%);
}

.bg-decor {
  position: absolute;
  inset: 0;
}
.floaty {
  position: absolute;
  bottom: -10vh;
  animation-name: floatUp;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  opacity: 0.8;
}
.floaty.is-clickable {
  pointer-events: auto;
  cursor: pointer;
}
.floaty svg {
  display: block;
}
@keyframes floatUp {
  0% {
    transform: translateY(0) rotate(0deg);
    opacity: 0;
  }
  10% {
    opacity: 0.85;
  }
  90% {
    opacity: 0.85;
  }
  100% {
    transform: translateY(-118vh) rotate(150deg);
    opacity: 0;
  }
}

.intro {
  position: fixed;
  inset: 0;
  z-index: 40;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  transition: opacity 0.5s ease, transform 0.5s ease;
}
.intro.is-hidden {
  opacity: 0;
  transform: scale(0.9);
  pointer-events: none;
}

.card {
  position: relative;
  width: min(92vw, 420px);
  background: var(--white);
  border-radius: 34px;
  padding: 36px 26px 30px;
  text-align: center;
  box-shadow: var(--shadow-pop);
  border: 3px solid #ffe1ee;
  overflow: hidden;
  animation: cardPop 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes cardPop {
  0% {
    transform: translateY(24px) scale(0.94);
    opacity: 0;
  }
  100% {
    transform: translateY(0) scale(1);
    opacity: 1;
  }
}
.card-shine {
  position: absolute;
  top: -60%;
  left: -30%;
  width: 60%;
  height: 220%;
  background: linear-gradient(
    to right,
    transparent,
    rgba(255, 255, 255, 0.6),
    transparent
  );
  transform: rotate(20deg);
  animation: shine 4.5s ease-in-out infinite;
}
@keyframes shine {
  0%,
  60% {
    left: -40%;
  }
  100% {
    left: 130%;
  }
}
.card-eyebrow {
  font-size: 15px;
  color: var(--pink-500);
  margin-bottom: 8px;
}
.card-title {
  font-family: "Gaegu", cursive;
  font-weight: 700;
  font-size: 34px;
  line-height: 1.2;
  color: var(--ink);
  text-wrap: balance;
}
.number-inline {
  color: var(--pink-400);
  display: inline-block;
  animation: beat 1.2s ease-in-out infinite;
}
@keyframes beat {
  0%,
  100% {
    transform: scale(1);
  }
  30% {
    transform: scale(1.25);
  }
}
.card-desc {
  margin-top: 12px;
  font-size: 16px;
  color: var(--ink-soft);
  line-height: 1.6;
}

.play-btn {
  position: relative;
  margin: 26px auto 6px;
  width: 176px;
  height: 176px;
  border-radius: 50%;
  background: radial-gradient(circle at 38% 34%, #ffe6f1, var(--pink-300) 68%);
  box-shadow: var(--shadow-pop);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  color: var(--ink);
  transition: transform 0.2s ease;
}
.play-btn:disabled {
  opacity: 0.6;
  cursor: default;
}
.play-btn:not(:disabled):active {
  transform: scale(0.95);
}
.play-btn__ring {
  position: absolute;
  inset: -10px;
  border-radius: 50%;
  border: 3px dashed rgba(245, 106, 160, 0.45);
  animation: spinSlow 9s linear infinite;
}
@keyframes spinSlow {
  to {
    transform: rotate(360deg);
  }
}
.play-btn__icon {
  font-size: 42px;
  color: var(--pink-500);
  margin-left: 6px;
}
.play-btn__label {
  font-size: 17px;
  font-weight: 700;
  padding: 0 12px;
  text-align: center;
}
.card-foot {
  margin-top: 14px;
  font-size: 14px;
  color: var(--ink-soft);
}
.audio-note {
  margin-top: 8px;
  font-size: 13px;
  color: var(--pink-500);
  min-height: 18px;
}
.main-link {
  display: inline-block;
  margin-top: 4px;
  color: var(--ink-soft);
  font-size: 14px;
  text-decoration: none;
  border-bottom: 1px dashed rgba(128, 111, 135, 0.45);
}
.main-link:hover,
.main-link:focus-visible {
  color: var(--pink-500);
  outline: none;
}

.playground {
  position: relative;
  z-index: 10;
  min-height: 100dvh;
  padding: 0 14px;
  padding-top: calc(18px + env(safe-area-inset-top));

  padding-bottom: calc(var(--controls-h) + env(safe-area-inset-bottom) + 24px);
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.5s ease, transform 0.5s ease;
  pointer-events: none;
}
.playground.is-active {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}

.topbar {
  max-width: 460px;
  margin: 0 auto 10px;
}
.progress {
  height: 8px;
  border-radius: 99px;
  background: rgba(255, 255, 255, 0.7);
  overflow: hidden;
  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.08);
}
.progress__fill {
  height: 100%;
  width: 0%;
  border-radius: 99px;
  background: linear-gradient(to right, var(--pink-300), var(--pink-500));
  transition: width 0.2s linear;
}

.banner {
  max-width: 460px;
  margin: 0 auto 14px;
  text-align: center;
}
.banner__text {
  display: inline-block;
  background: var(--white);
  color: var(--ink);
  font-size: 15px;
  padding: 8px 16px;
  border-radius: 99px;
  box-shadow: var(--shadow-soft);
  border: 2px solid #ffe1ee;
  animation: bannerPop 0.4s ease;
}
@keyframes bannerPop {
  from {
    transform: scale(0.9);
    opacity: 0;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}

.grid {
  max-width: 460px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 18px;
}

.grid-spacer {
  height: 8px;
}

.performer {
  position: relative;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  min-height: 172px;
  padding: 34px 8px 12px;
  cursor: pointer;
  background: rgba(255, 255, 255, 0.55);
  border-radius: 28px;
  box-shadow: var(--shadow-soft);
  outline: none;
  -webkit-tap-highlight-color: transparent;

  opacity: 0;
  transform: translateY(24px) scale(0.6);
  transition: opacity 0.45s ease, transform 0.5s cubic-bezier(0.22, 1.4, 0.4, 1);
}
.performer.is-in {
  opacity: 1;
  transform: translateY(0) scale(1);
}
.performer:focus-visible {
  box-shadow: var(--shadow-pop), 0 0 0 4px rgba(245, 106, 160, 0.5);
}

.performer.is-press .performer__body {
  transform: scale(0.94);
}

.performer.is-reacting {
  z-index: 60;
}
.performer.is-reacting .performer__body {
  filter: drop-shadow(0 16px 22px rgba(245, 106, 160, 0.4));
  will-change: transform;
}

.performer__body {
  position: relative;
  width: 100%;
  max-width: 134px;
  transition: transform 0.25s cubic-bezier(0.22, 1.4, 0.4, 1);
  transform-origin: bottom center;
}
.performer__body svg {
  width: 100%;
  height: auto;
  display: block;
  overflow: visible;
  filter: drop-shadow(0 6px 6px rgba(150, 90, 130, 0.2));
}

.performer__badge {
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  min-width: 46px;
  height: 46px;
  padding: 0 8px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: "Jua", sans-serif;
  font-size: 30px;
  line-height: 1;
  color: var(--white);
  border: 3px solid var(--white);
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.18);
  z-index: 3;
  pointer-events: none;
  animation: badgeBob 2.6s ease-in-out infinite;
}
@keyframes badgeBob {
  0%,
  100% {
    transform: translateX(-50%) translateY(0);
  }
  50% {
    transform: translateX(-50%) translateY(-4px);
  }
}

.bubble {
  position: absolute;
  left: 50%;
  bottom: calc(100% - 10px);
  transform: translateX(-50%) translateY(6px);
  background: var(--white);
  color: var(--ink);
  font-size: 14px;
  white-space: nowrap;
  padding: 7px 13px;
  border-radius: 16px;
  box-shadow: var(--shadow-soft);
  border: 2px solid #ffe1ee;
  opacity: 0;
  pointer-events: none;
  z-index: 70;
  transition: opacity 0.2s ease, transform 0.2s ease;
}
.bubble.is-show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}
.bubble::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 7px solid transparent;
  border-top-color: var(--white);
}

/* 숫자 캐릭터 반응 애니메이션 */
.anim-jump-wink {
  animation: bigJump 0.85s cubic-bezier(0.3, 1.4, 0.5, 1);
}
@keyframes bigJump {
  0% {
    transform: scale(1) translateY(0);
  }
  35% {
    transform: scale(1.55) translateY(-46px);
  }
  60% {
    transform: scale(1.5) translateY(-40px);
  }
  80% {
    transform: scale(1.35) translateY(6px);
  }
  100% {
    transform: scale(1) translateY(0);
  }
}

.anim-heart-sway {
  animation: heartSway 1.1s ease-in-out;
}
@keyframes heartSway {
  0%,
  100% {
    transform: scale(1.4) rotate(0deg);
  }
  20% {
    transform: scale(1.45) rotate(-12deg);
  }
  50% {
    transform: scale(1.45) rotate(12deg);
  }
  80% {
    transform: scale(1.45) rotate(-6deg);
  }
}

.anim-triple-jump {
  animation: tripleJump 1.15s ease;
}
@keyframes tripleJump {
  0% {
    transform: scale(1) translateY(0);
  }
  16% {
    transform: scale(1.35) translateY(-30px);
  }
  33% {
    transform: scale(1.2) translateY(0);
  }
  49% {
    transform: scale(1.45) translateY(-40px);
  }
  66% {
    transform: scale(1.3) translateY(0);
  }
  82% {
    transform: scale(1.6) translateY(-54px);
  }
  100% {
    transform: scale(1) translateY(0);
  }
}

.anim-spin-arms {
  animation: spinArms 1.2s cubic-bezier(0.3, 0.8, 0.4, 1);
}
@keyframes spinArms {
  0% {
    transform: scale(1) rotate(0deg);
  }
  20% {
    transform: scale(1.5) rotate(0deg);
  }
  100% {
    transform: scale(1.4) rotate(360deg);
  }
}

.anim-big-spin {
  animation: bigSpin 1.25s cubic-bezier(0.4, 0, 0.3, 1);
}
@keyframes bigSpin {
  0% {
    transform: scale(1) rotate(0deg);
  }
  25% {
    transform: scale(1.5) rotate(0deg);
  }
  100% {
    transform: scale(1.45) rotate(540deg);
  }
}

.anim-groove {
  animation: groove 1.3s ease-in-out;
}
@keyframes groove {
  0%,
  100% {
    transform: scale(1.4) translateX(0) rotate(0);
  }
  25% {
    transform: scale(1.45) translateX(-12px) rotate(-8deg);
  }
  50% {
    transform: scale(1.45) translateX(0) rotate(0);
  }
  75% {
    transform: scale(1.45) translateX(12px) rotate(8deg);
  }
}

.anim-cool {
  animation: coolZoom 1.4s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes coolZoom {
  0% {
    transform: scale(1);
  }
  30% {
    transform: scale(1.8) translateY(-6px);
  }
  70% {
    transform: scale(1.75) translateY(-6px);
  }
  100% {
    transform: scale(1);
  }
}

.anim-squish {
  animation: squish 1.2s ease-in-out;
}
@keyframes squish {
  0%,
  100% {
    transform: scale(1.4, 1.4);
  }
  25% {
    transform: scale(1.65, 1.15);
  }
  50% {
    transform: scale(1.15, 1.7);
  }
  75% {
    transform: scale(1.55, 1.3);
  }
}

.anim-rewind {
  animation: rewind 1.35s ease-in-out;
}
@keyframes rewind {
  0% {
    transform: scale(1) rotate(0deg);
  }
  20% {
    transform: scale(1.45) rotate(0deg);
  }
  55% {
    transform: scale(1.45) rotate(340deg);
  }
  100% {
    transform: scale(1) rotate(0deg);
  }
}

.anim-portal {
  animation: portal 1.6s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes portal {
  0% {
    transform: scale(1);
  }
  35% {
    transform: scale(2.1);
  }
  70% {
    transform: scale(2);
  }
  100% {
    transform: scale(1);
  }
}

.anim-group {
  animation: groupDance 0.7s ease-in-out 4;
}
@keyframes groupDance {
  0%,
  100% {
    transform: scale(1.2) translateY(0) rotate(0);
  }
  25% {
    transform: scale(1.3) translateY(-16px) rotate(-8deg);
  }
  75% {
    transform: scale(1.3) translateY(-16px) rotate(8deg);
  }
}

.anim-mini-jump {
  animation: miniJump 0.6s ease;
}
@keyframes miniJump {
  0%,
  100% {
    transform: scale(1) translateY(0);
  }
  45% {
    transform: scale(1.15) translateY(-24px);
  }
}

.performer .eye-l,
.performer .eye-r {
  transition: transform 0.15s ease;
}
.performer.fx-wink .eye-r {
  transform: scaleY(0.15);
  transform-origin: 60px 50px;
}
.performer.fx-happy .eye-l {
  transform: scaleY(0.55);
  transform-origin: 40px 50px;
}
.performer.fx-happy .eye-r {
  transform: scaleY(0.55);
  transform-origin: 60px 50px;
}

.performer .sunglasses {
  opacity: 0;
  transition: opacity 0.2s ease;
}
.performer.fx-cool .sunglasses {
  opacity: 1;
}
.performer.fx-cool .face .eye-l,
.performer.fx-cool .face .eye-r {
  opacity: 0;
}

.portal-ring {
  position: fixed;
  left: 50%;
  top: 50%;
  width: 40px;
  height: 40px;
  margin: -20px 0 0 -20px;
  border-radius: 50%;
  border: 6px solid rgba(245, 106, 160, 0.5);
  z-index: 55;
  pointer-events: none;
  animation: portalRing 1.2s ease-out forwards;
}
@keyframes portalRing {
  0% {
    transform: scale(0.2);
    opacity: 0.9;
  }
  100% {
    transform: scale(9);
    opacity: 0;
  }
}

.spotlight-flash {
  position: fixed;
  inset: 0;
  z-index: 50;
  pointer-events: none;
  background: radial-gradient(
    circle at var(--sx, 50%) var(--sy, 50%),
    rgba(255, 255, 200, 0.55),
    transparent 42%
  );
  animation: flashFade 1.2s ease-out forwards;
}
@keyframes flashFade {
  0% {
    opacity: 0;
  }
  25% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

.particle {
  position: fixed;
  font-size: 22px;
  z-index: 80;
  pointer-events: none;
  will-change: transform, opacity;
  animation: particleFly 0.95s ease-out forwards;
}
@keyframes particleFly {
  0% {
    transform: translate(0, 0) scale(0.4) rotate(0);
    opacity: 1;
  }
  100% {
    transform: translate(var(--px), var(--py)) scale(1.25) rotate(var(--pr));
    opacity: 0;
  }
}

.count-pop {
  position: fixed;
  font-family: "Jua", sans-serif;
  font-size: 44px;
  color: var(--pink-500);
  z-index: 80;
  pointer-events: none;
  text-shadow: 0 3px 0 #fff;
  animation: countPop 0.6s ease-out forwards;
}
@keyframes countPop {
  0% {
    transform: translate(-50%, -50%) scale(0.3);
    opacity: 0;
  }
  40% {
    transform: translate(-50%, -50%) scale(1.2);
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -80%) scale(1);
    opacity: 0;
  }
}

.ripple {
  position: absolute;
  border-radius: 50%;
  background: rgba(245, 106, 160, 0.35);
  transform: translate(-50%, -50%) scale(0);
  pointer-events: none;
  animation: ripple 0.6s ease-out forwards;
}
@keyframes ripple {
  to {
    transform: translate(-50%, -50%) scale(3.2);
    opacity: 0;
  }
}

/* 모바일 하단 컨트롤 */
.controls {
  position: fixed;
  left: 50%;
  transform: translateX(-50%) translateY(120%);
  bottom: 0;
  z-index: 90;
  width: min(96vw, 460px);
  margin-bottom: env(safe-area-inset-bottom);
  display: flex;
  gap: 6px;
  justify-content: space-between;
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-radius: 22px 22px 18px 18px;
  padding: 10px 8px calc(10px + env(safe-area-inset-bottom, 0px));
  box-shadow: 0 -8px 26px rgba(245, 106, 160, 0.22);
  border: 2px solid #ffe1ee;
  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.controls.is-active {
  transform: translateX(-50%) translateY(0);
}
.ctrl {
  flex: 1;
  min-width: 48px;
  min-height: 56px;
  border-radius: 14px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  color: var(--ink);
  transition: transform 0.15s ease, background 0.15s ease;
}
.ctrl:active {
  transform: scale(0.92);
  background: var(--pink-100);
}
.ctrl__icon {
  font-size: 22px;
  line-height: 1;
}
.ctrl__label {
  font-size: 11px;
  color: var(--ink-soft);
}
.ctrl--accent {
  background: linear-gradient(135deg, #fff0b8, #ffd7ea);
}
.ctrl--accent .ctrl__label {
  color: var(--pink-500);
}

.volume-panel {
  position: absolute;
  left: 50%;
  bottom: calc(100% + 10px);
  width: min(82vw, 300px);
  padding: 14px 16px 16px;
  border: 2px solid #ffe1ee;
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.97);
  box-shadow: 0 12px 28px rgba(91, 74, 99, 0.2);
  opacity: 0;
  pointer-events: none;
  transform: translateX(-50%) translateY(8px) scale(0.96);
  transition: opacity 0.18s ease, transform 0.18s ease;
}
.volume-panel.is-open {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0) scale(1);
}
.volume-panel__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
  color: var(--ink-soft);
  font-size: 14px;
}
.volume-panel__info {
  display: flex;
  align-items: center;
  gap: 9px;
}
.volume-mute {
  min-height: 28px;
  padding: 4px 9px;
  border: 1px solid #ffd2e4;
  border-radius: 999px;
  background: #fff4f8;
  color: var(--ink-soft);
  font: inherit;
  font-size: 12px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.volume-mute:active {
  transform: scale(0.95);
}
.volume-mute[aria-pressed="true"] {
  background: #ffe1ec;
  color: var(--pink-500);
}
.volume-slider {
  width: 100%;
  height: 28px;
  margin: 0;
  accent-color: var(--pink-500);
  cursor: pointer;
}

.heart-egg {
  position: fixed;
  right: calc(12px + env(safe-area-inset-right));
  top: calc(12px + env(safe-area-inset-top));
  z-index: 85;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  border: 2px solid #ffe1ee;
  background: var(--white);
  color: var(--pink-400);
  font-size: 24px;
  box-shadow: var(--shadow-soft);
  display: none;
  align-items: center;
  justify-content: center;
  animation: beat 1.6s ease-in-out infinite;
}
.heart-egg.is-active {
  display: flex;
}
.heart-egg:active {
  transform: scale(0.9);
}
.heart-egg--rain {
  right: calc(76px + env(safe-area-inset-right));
}

.carrot-rain {
  position: fixed;
  top: -64px;
  z-index: 90;
  pointer-events: none;
  contain: layout paint style;
  will-change: transform, opacity;
  animation: carrotFall 3s linear forwards;
}
@keyframes carrotFall {
  0% {
    transform: translate3d(0, -8vh, 0) rotate(0deg);
    opacity: 0;
  }
  6% {
    opacity: 1;
  }

  44%,
  86% {
    transform: translate3d(
      var(--carrot-x),
      calc(100vh - 20px - var(--pile-height)),
      0
    ) rotate(var(--carrot-r));
    opacity: 1;
  }
  100% {
    transform: translate3d(
      var(--carrot-x),
      calc(100vh - 20px - var(--pile-height)),
      0
    ) scale(0.65) rotate(var(--carrot-r));
    opacity: 0;
  }
}

.secret {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(91, 74, 99, 0.32);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}
.secret.is-open {
  opacity: 1;
  pointer-events: auto;
}
.secret__card {
  position: relative;
  width: min(90vw, 360px);
  background: var(--white);
  border-radius: 28px;
  padding: 30px 24px 24px;
  text-align: center;
  box-shadow: var(--shadow-pop);
  border: 3px solid #ffe1ee;
  transform: scale(0.85);
  transition: transform 0.3s cubic-bezier(0.22, 1.4, 0.4, 1);
}
.secret.is-open .secret__card {
  transform: scale(1);
}
.secret__close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--pink-100);
  color: var(--ink-soft);
  font-size: 16px;
}
.secret__heart {
  font-size: 44px;
  color: var(--pink-400);
  animation: beat 1.2s ease-in-out infinite;
}
.secret__text {
  margin: 12px 0 20px;
  font-size: 18px;
  line-height: 1.7;
  color: var(--ink);
  white-space: pre-line;
  text-wrap: balance;
}
.secret__saved {
  margin-top: 12px;
  font-size: 14px;
  color: var(--pink-500);
  min-height: 18px;
}

.pill-btn {
  border-radius: 99px;
  padding: 13px 24px;
  font-family: inherit;
  font-size: 16px;
  transition: transform 0.15s ease;
}
.pill-btn:active {
  transform: scale(0.94);
}
.pill-btn--love {
  background: linear-gradient(135deg, var(--pink-400), var(--pink-500));
  color: var(--white);
  box-shadow: var(--shadow-soft);
}

.toast {
  position: fixed;
  left: 50%;
  top: 22%;
  transform: translateX(-50%) translateY(-10px);
  z-index: 95;
  background: rgba(91, 74, 99, 0.92);
  color: #fff;
  font-size: 15px;
  padding: 10px 18px;
  border-radius: 99px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease, transform 0.3s ease;
  white-space: nowrap;
  max-width: 92vw;
}
.toast.is-show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* 모바일·태블릿 레이아웃 */
@media (max-width: 340px) {
  .grid {
    gap: 12px;
  }
  .performer {
    min-height: 150px;
    padding-top: 28px;
  }
}

@media (min-width: 620px) {
  .grid {
    grid-template-columns: repeat(3, 1fr);
    max-width: 720px;
  }
}
@media (min-width: 900px) {
  .grid {
    grid-template-columns: repeat(5, 1fr);
    max-width: 980px;
  }
}

@media (orientation: landscape) and (max-height: 520px) {
  .grid {
    grid-template-columns: repeat(5, 1fr);
    gap: 12px;
  }
  .performer {
    min-height: 130px;
    padding-top: 24px;
  }
  .performer__body {
    max-width: 96px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .floaty,
  .play-btn__ring,
  .card-shine,
  .number-inline,
  .secret__heart,
  .performer__badge {
    animation: none !important;
  }

  .anim-jump-wink,
  .anim-heart-sway,
  .anim-triple-jump,
  .anim-spin-arms,
  .anim-big-spin,
  .anim-groove,
  .anim-cool,
  .anim-squish,
  .anim-rewind,
  .anim-portal,
  .anim-group,
  .anim-mini-jump {
    animation: gentlePulse 0.5s ease !important;
  }
  @keyframes gentlePulse {
    0%,
    100% {
      transform: scale(1);
    }
    50% {
      transform: scale(1.12);
    }
  }
  .performer {
    transition: opacity 0.3s ease;
  }
}
