[hidden] {
  display: none !important;
}

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

body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(
  ellipse at 30% 20%,
  #4b70a8 0%,
  #29456f 45%,
  #172b4d 100%
);
  font-family: "Segoe Script", "Brush Script MT", cursive;
  overflow: hidden;
}

/* =========================================================
   SCENE 1 — ENVELOPE
========================================================= */

.scene {
  text-align: center;
  padding: 24px;
  width: 100%;
  max-width: 480px;
}

.title {
  font-size: clamp(2.2rem, 9vw, 3.4rem);
  font-weight: 400;
  color: #f3eefc;
  font-style: italic;
  letter-spacing: 1px;
  margin-bottom: 40px;
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
  animation: fadeDown 1.2s ease both;
}

.envelope {
  position: relative;
  border: none;
  background: none;
  cursor: pointer;
  width: 100%;
  max-width: 400px;
  margin: 0 auto;
  display: block;
  animation: pop 1.4s ease both;
  transition: transform 0.3s ease;
  -webkit-tap-highlight-color: transparent;
}

.envelope-img {
  width: 100%;
  display: block;
  object-fit: contain;
  mix-blend-mode: multiply;
  filter: drop-shadow(0 12px 24px rgba(0, 0, 0, 0.45));
}

.envelope:hover {
  transform: scale(1.05);
}

.envelope.opening {
  animation: openEnvelope 0.8s ease forwards;
}

.hint {
  margin-top: 48px;
  font-size: 1.3rem;
  font-style: italic;
  color: white;
  animation:
    fadeUp 1.5s 0.5s ease both,
    blink 2.4s 2s ease-in-out infinite;
}

.bar {
  width: 140px;
  height: 5px;
  border-radius: 99px;
  margin: 18px auto 0;
  opacity: 0.9;
}

/* =========================================================
   SCENE 2 — COLLAGE SURPRISE
========================================================= */

.collage {
  position: fixed;
  inset: 0;
 background: radial-gradient(
  ellipse at 30% 20%,
  #4b70a8 0%,
  #29456f 45%,
  #172b4d 100%
);
  display: flex;
  align-items: center;
  justify-content: center;
  animation: fadeIn 0.8s ease both;
}

.collage[hidden] {
  display: none !important;
}

.photo {
  position: absolute;
}

.photo img {
  width: 100%;
  display: block;
  border-radius: 10px;
}

/* FOTO LOVE */
.love-shape {
  position: absolute;
  width: 32vw;
  max-width: 280px;
  top: 5%;
  left: 10%;
  animation: fadeIn 1s 0.3s ease both;
}

.love-shape img {
  width: 100%;
  aspect-ratio: 1;
  object-fit: cover;
  border-radius: 0;

  -webkit-mask:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 29'%3E%3Cpath d='M16 29S0 18 0 8.5C0 3.8 3.8 0 8.5 0 11.7 0 14.6 1.8 16 4.5 17.4 1.8 20.3 0 23.5 0 28.2 0 32 3.8 32 8.5 32 18 16 29 16 29z'/%3E%3C/svg%3E")
      center / contain no-repeat,
    linear-gradient(#000 0 0);

  -webkit-mask-composite: source-in;

  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 29'%3E%3Cpath d='M16 29S0 18 0 8.5C0 3.8 3.8 0 8.5 0 11.7 0 14.6 1.8 16 4.5 17.4 1.8 20.3 0 23.5 0 28.2 0 32 3.8 32 8.5 32 18 16 29 16 29z'/%3E%3C/svg%3E")
    center / contain no-repeat;

  filter: drop-shadow(0 0 18px rgba(90, 140, 255, 0.6));
}

/* POLAROID */
.polaroid {
  width: 40vw;
  max-width: 380px;
  background: #f5f2ec;
  padding: 14px 14px 42px;
  border-radius: 8px;
  box-shadow: 0 10px 26px rgba(0, 0, 0, 0.5);
}

.polaroid img {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  display: block;
  border-radius: 6px;
}

.pos-leftbottom {
  bottom: 10%;
  left: 8%;
  transform: rotate(-8deg);
  animation: fadeIn 1s 0.5s ease both;
}

/* TULISAN LOVE */
.love-text {
  position: absolute;
  bottom: 9%;
  left: 20%;
  font-family: "Arial Black", Arial, sans-serif;
  font-weight: 900;
  font-size: clamp(2rem, 7vw, 3.2rem);
  letter-spacing: 4px;
  color: #cfe0ff;
  -webkit-text-stroke: 2px #1e3a8a;
  text-shadow: 4px 4px 0 #3b6fd4;
  transform: rotate(-6deg);
  animation: fadeIn 1s 0.7s ease both;
}

/* SURAT TENGAH */
.letter {
  position: absolute;
  width: clamp(230px, 25vw, 310px);
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 10;
}

.letter img {
  width: 100%;
  border-radius: 8px;
  filter: drop-shadow(0 0 30px rgba(120, 160, 255, 0.45));
}

/* PHOTO STRIP KANAN */
.photostrip {
  position: absolute;
  width: clamp(100px, 10vw, 130px);
  right: 25%;
  top: 10%;
  background: #f5f2ec;
  padding: 7px;
  border-radius: 6px;
  box-shadow: 0 14px 30px rgba(0, 0, 0, 0.5);
  display: flex;
  flex-direction: column;
  gap: 7px;
  z-index: 4;
  transform: rotate(5deg);
  animation: fadeIn 1s 0.6s ease both;
}

.photostrip img {
  width: 100%;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  border-radius: 3px;
}

.pos-right {
  top: 12%;
  transform: rotate(7deg);
}

/* HEART */
.heart {
  position: absolute;
  font-size: clamp(1.6rem, 5vw, 3rem);
  filter: drop-shadow(0 0 12px rgba(100, 150, 255, 0.7));
  animation: floatHeart 3s ease-in-out infinite;
}

.h1 {
  top: 8%;
  right: 34%;
  font-size: clamp(2.4rem, 7vw, 4rem);
}

.h2 {
  top: 40%;
  right: 28%;
  animation-delay: 0.5s;
}

.h3 {
  top: 30%;
  left: 22%;
  animation-delay: 1s;
  font-size: clamp(1.2rem, 3.5vw, 2rem);
}

.h4 {
  top: 46%;
  left: 26%;
  animation-delay: 1.5s;
}

.h5 {
  bottom: 16%;
  right: 6%;
  font-size: clamp(3rem, 9vw, 5rem);
  animation-delay: 0.8s;
}

.tap-surprise {
  position: absolute;
  bottom: 4%;
  left: 0;
  right: 0;
  text-align: center;
  color: #efeaff;
  font-family: Arial, sans-serif;
  font-weight: 600;
  font-size: clamp(1.1rem, 4vw, 1.6rem);
  letter-spacing: 2px;
  animation: blink 2s ease-in-out infinite;
}

/* =========================================================
   SCENE 3 — CHOOSE THE SURPRISE
========================================================= */

.choose,
.scene3 {
  position: fixed;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: radial-gradient(
    circle at 50% 45%,
    #4b70a8 0%,
    #29456f 55%,
    #172b4d 100%
  );
  color: #fff;
  animation: fadeIn 0.5s ease both;
  cursor: pointer;
}

.choose {
  gap: clamp(28px, 6vh, 56px);
  padding: 24px;
}

.choose[hidden] {
  display: none !important;
}

.choose-title {
  font-family: "Great Vibes", "Brush Script MT", cursive;
  font-size: clamp(38px, 9vw, 72px);
  font-weight: 400;
  color: #f3eefc;
  text-shadow: 0 0 18px rgba(255, 255, 255, 0.35);
  margin: 0;
}

.choices {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: clamp(10px, 4vw, 40px);
  width: 100%;
  max-width: 900px;
  padding: 0 16px;
  flex-wrap: wrap;
}

.choice {
  position: relative;
  border: none;
  background: none;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  -webkit-tap-highlight-color: transparent;
  animation: popIn 0.5s ease both;
}

.choice:nth-child(1) {
  animation-delay: 0.05s;
}

.choice:nth-child(2) {
  animation-delay: 0.15s;
}

.choice:nth-child(3) {
  animation-delay: 0.25s;
}

.choice:nth-child(4) {
  animation-delay: 0.35s;
}

.choice-glow {
  position: absolute;
  top: 18%;
  left: 50%;
  width: 130%;
  aspect-ratio: 1;
  transform: translate(-50%, -50%);
  background: radial-gradient(
    circle,
    rgba(255, 200, 120, 0.35) 0%,
    rgba(255, 170, 90, 0.12) 40%,
    transparent 70%
  );
  pointer-events: none;
  animation: blink 3s ease-in-out infinite;
}

.choice-img {
  width: clamp(64px, 16vw, 120px);
  height: auto;
  object-fit: contain;
  filter: drop-shadow(0 0 22px rgba(255, 210, 130, 0.55));
  transition: transform 0.25s ease;
  position: relative;
  z-index: 1;
}

.choice:hover .choice-img,
.choice:active .choice-img {
  transform: scale(1.12) translateY(-6px);
}

.choice-label {
  font-family: "Great Vibes", "Brush Script MT", cursive;
  font-size: clamp(20px, 4.5vw, 32px);
  color: #f3eefc;
  margin: 0;
  border-bottom: 2px solid rgba(255, 255, 255, 0.8);
  padding-bottom: 4px;
}

.bar-light,
.bottom-bar {
  background: rgba(255, 255, 255, 0.85);
}

.bottom-bar {
  position: absolute;
  bottom: 18px;
  left: 50%;
  transform: translateX(-50%);
  width: 120px;
  height: 5px;
  border-radius: 4px;
}

/* =========================================================
   SCENE 4 — JOURNEY
========================================================= */

.journey {
  position: fixed;
  inset: 0;
 background: radial-gradient(
  ellipse at 30% 20%,
  #4b70a8 0%,
  #29456f 45%,
  #172b4d 100%
);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  animation: fadeIn 0.5s ease both;
}

.journey-collage {
  display: flex;
  gap: 14px;
  width: min(92vw, 760px);
  height: min(80vh, 620px);
  z-index: 1;
}

.strip {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
  border-radius: 6px;
  overflow: hidden;
}

.strip img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  min-height: 0;
}

.journey .heart {
  position: absolute;
  font-size: 60px;
  filter: drop-shadow(0 0 12px rgba(110, 180, 255, 0.7));
  z-index: 2;
  animation: floatHeart 4s ease-in-out infinite alternate;
}

.journey .jh1 {
  top: 28%;
  left: 30%;
  font-size: 76px;
}

.journey .jh2 {
  top: 38%;
  right: 32%;
  font-size: 68px;
  animation-delay: 1s;
}

.journey .jh3 {
  bottom: 26%;
  left: 58%;
  animation-delay: 2s;
}

/* =========================================================
   SCENE 5 — MOMENT
========================================================= */

.moment {
  position: fixed;
  inset: 0;
  background: radial-gradient(
  ellipse at 30% 20%,
  #4b70a8 0%,
  #29456f 45%,
  #172b4d 100%
);
  overflow: hidden;
  font-family: "Poppins", "Segoe UI", sans-serif;
  z-index: 50;
  animation: fadeIn 0.8s ease both;
}

.moment[hidden] {
  display: none !important;
}

.moment-name {
  position: absolute;
  top: 100px;
  left: 38%;
  transform: translateX(-50%);
  font-family: "Great Vibes", cursive;
  font-size: 2.6rem;
  font-weight: 400;
  color: #fff;
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
  white-space: nowrap;
  z-index: 6;
}

.moment-note {
  position: absolute;
  top: 155px;
  left: 25%;
  width: min(42vw, 420px);
  padding: 28px 26px;
  background: #f4f2ec;
  background-image: linear-gradient(
    105deg,
    transparent 92%,
    rgba(0, 0, 0, 0.06) 100%
  );
  border-radius: 14px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
  transform: rotate(-4deg);
  z-index: 3;
  animation: letterIn 0.9s 0.2s cubic-bezier(0.2, 1.4, 0.4, 1) both;
}

.moment-note p {
  margin: 0;
  font-size: clamp(0.75rem, 1.6vw, 1rem);
  line-height: 1.6;
  color: #2a2a72;
  text-align: justify;
}

.moment-frame {
  position: absolute;
  top: 95px;
  right: 18%;
  width: min(28vw, 280px);
  padding: 14px;
  background: linear-gradient(
    135deg,
    #d9a94e,
    #f6dfa0 40%,
    #b8860b 75%,
    #e8c76a
  );
  border-radius: 8px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.55);
  transform: rotate(3deg);
  z-index: 4;
  animation: fadeIn 1s 0.4s ease both;
}

.moment-frame img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: 4px;
}

.moment-camera {
  position: absolute;
  bottom: 20%;
  right: 40%;
  width: min(22vw, 190px);
  transform: rotate(-4deg);
  z-index: 5;
  filter: drop-shadow(0 8px 18px rgba(0, 0, 0, 0.5));
  animation: fadeIn 1s 0.6s ease both;
}

.moment-camera img {
  width: 100%;
  display: block;
}

.moment-player {
  position: absolute;
  bottom: 24%;
  left: 54%;
  transform: translateX(-50%);
  text-align: center;
  z-index: 6;
}

.player-disc {
  width: 150px;
  height: 150px;
  margin: 0 auto;
  border-radius: 50%;
  background: radial-gradient(circle, #3a3a3a 0%, #111 70%);
  border: 4px solid #cfd2d6;
  display: flex;
  align-items: center;
  justify-content: center;
  animation: momentSpin 4s linear infinite;
  animation-play-state: paused;
}

.moment-player.spinning .player-disc {
  animation-play-state: running;
}

.play-btn {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: none;
  background: #1565ff;
  color: #fff;
  font-size: 1.1rem;
  cursor: pointer;
}

.player-label {
  margin-top: 8px;
  font-size: 0.85rem;
  color: #fff;
}

.mheart {
  position: absolute;
  font-size: 2.2rem;
  filter: blur(1px) drop-shadow(0 0 10px rgba(90, 140, 255, 0.8));
  animation: floatHeart 5s ease-in-out infinite;
  z-index: 1;
}

.mh1 {
  top: 12%;
  left: 4%;
  font-size: 3rem;
}

.mh2 {
  top: 40%;
  left: 3%;
  animation-delay: 1.2s;
}

.mh3 {
  top: 18%;
  right: 5%;
  font-size: 2.6rem;
  animation-delay: 0.6s;
}

.mh4 {
  bottom: 18%;
  right: 4%;
  animation-delay: 1.8s;
}

/* =========================================================
   SCENE 6 — PLAYLIST (VERSI RAPI FLEXBOX HORIZONTAL)
========================================================= */

/* =========================================================
   SCENE 6 — PLAYLIST (VERSI FIX SPOTIFY & FOTO RAPI)
========================================================= */

.playlist {
  position: fixed;
  inset: 0;
  background: radial-gradient(
  ellipse at 30% 20%,
  #4b70a8 0%,
  #29456f 45%,
  #172b4d 100%
);
  overflow: hidden;
  animation: fadeIn 0.8s ease both;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  padding: 40px 4vw;
}

.playlist[hidden] {
  display: none !important;
}

/* KONTEN KIRI (SPOTIFY & IKON NADA) */
.playlist-left {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 30px;
  width: min(40vw, 420px); /* Melebarkan kontainer kiri */
  flex-shrink: 0;
  z-index: 10;
}

.playlist-video {
  position: relative;
  width: 100%;
  height: 152px; /* Tinggi standar player Spotify */
  min-height: 152px;
  border-radius: 12px;
  box-shadow: 0 14px 36px rgba(0, 0, 0, 0.55);
  background: #282828; /* Fallback warna latar jika loading */
  overflow: hidden;
}

.playlist-video iframe {
  width: 100% !important;
  height: 100% !important;
  border: 0;
  display: block;
}

.notes-container {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 40px;
}

.notes {
  position: static;
  font-size: clamp(2.5rem, 5vw, 4rem);
  filter: drop-shadow(0 0 14px rgba(120, 190, 255, 0.9));
  animation: floatHeart 4s ease-in-out infinite alternate;
}

.n2 {
  animation-delay: 1s;
}

/* KONTEN KANAN (3 BINGKAI FOTO SEJAJAR) */
.playlist-photos-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  flex-shrink: 0;
  z-index: 1;
}

.playlist-title {
  font-family: "Great Vibes", "Brush Script MT", cursive;
  font-size: clamp(32px, 7vw, 56px);
  font-weight: 400;
  color: #f3eefc;
  text-shadow: 0 0 18px rgba(255, 255, 255, 0.35);
  text-align: center;
  margin: -20px;
  animation: fadeDown 1s 0.3s ease both;
}

.playlist-photos {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  flex-shrink: 0;
  z-index: 1;
}

.pframe {
  position: relative;
  padding: 10px;
  background: linear-gradient(
    135deg,
    #d9a94e,
    #f6dfa0 40%,
    #b8860b 75%,
    #e8c76a
  );
  border-radius: 6px;
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.55);
  transition: transform 0.3s ease;
}

.pframe img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 3px;
}

.pf1 {
  width: min(16vw, 190px);
  aspect-ratio: 4 / 5;
  transform: rotate(-3deg);
  z-index: 1;
}

.pf2 {
  width: min(16vw, 190px);
  aspect-ratio: 4 / 5;
  transform: rotate(2deg);
  z-index: 2;
}

.pf3 {
  width: min(16vw, 190px);
  aspect-ratio: 4 / 5;
  transform: rotate(-2deg);
  z-index: 1;
}

/* =========================================================
   ANIMATIONS
========================================================= */

@keyframes pulse {
  0%,
  100% {
    transform: translate(-50%, -50%) scale(1);
  }

  50% {
    transform: translate(-50%, -50%) scale(1.12);
  }
}

@keyframes fadeDown {
  from {
    opacity: 0;
    transform: translateY(-24px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(24px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@keyframes blink {
  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: 0.45;
  }
}

@keyframes pop {
  0% {
    opacity: 0;
    transform: scale(0.6);
  }

  70% {
    transform: scale(1.06);
  }

  100% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes popIn {
  from {
    opacity: 0;
    transform: translateY(24px) scale(0.85);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes openEnvelope {
  to {
    transform: scale(1.6) translateY(-30px);
    opacity: 0;
  }
}

@keyframes letterIn {
  from {
    opacity: 0;
    transform: scale(0.4) rotate(-10deg);
  }

  to {
    opacity: 1;
    transform: scale(1) rotate(0);
  }
}

@keyframes floatHeart {
  0%,
  100% {
    transform: translateY(0) scale(1);
  }

  50% {
    transform: translateY(-14px) scale(1.08);
  }
}

@keyframes momentSpin {
  to {
    transform: rotate(360deg);
  }
}

/* =========================================================
   RESPONSIVE
========================================================= */

@media (max-width: 850px) {
  .playlist {
    flex-direction: column;
    justify-content: flex-start;
    padding-top: 80px;
    overflow-y: auto;
    gap: 30px;
  }

  .playlist-left {
    width: 90vw;
    max-width: 400px;
  }

  .playlist-photos {
    width: 100%;
    flex-wrap: wrap;
    justify-content: center;
  }

  .pf1,
  .pf2,
  .pf3 {
    width: 140px;
  }
}

@media (max-width: 700px) {
  /* MOMENT */
  .moment-note {
    width: 80%;
    left: 6%;
    top: 110px;
  }

  .moment-frame {
    width: 42%;
    right: 5%;
    top: auto;
    bottom: 24%;
  }

  .moment-camera {
    display: none;
  }

  /* COLLAGE */
  .love-shape {
    width: 34vw;
    top: 6%;
    left: 2%;
  }

  .polaroid {
    width: 40vw;
    max-width: 240px;
  }

  .photostrip {
    width: 24vw;
  }

  .letter {
    width: 42vw;
  }

  .love-text {
    bottom: 14%;
    left: 6%;
  }
}

@media (max-width: 480px) {
  .scene {
    padding: 18px;
  }

  .title {
    font-size: 2.2rem;
    margin-bottom: 30px;
  }

  .envelope {
    max-width: 340px;
  }

  .hint {
    margin-top: 35px;
    font-size: 1.1rem;
  }

  .choose-title {
    font-size: 42px;
  }

  .choices {
    gap: 18px;
  }

  .choice-img {
    width: 72px;
  }

  .choice-label {
    font-size: 22px;
  }

  /* SCENE 5 MOBILE */
  .moment-name {
    top: 18px;
    font-size: 2.2rem;
  }

  .moment-note {
    top: 85px;
    left: 5%;
    width: 58%;
    padding: 18px 16px;
  }

  .moment-note p {
    font-size: 0.68rem;
    line-height: 1.45;
  }

  .moment-frame {
    top: 120px;
    right: 4%;
    bottom: auto;
    width: 35%;
    padding: 8px;
  }

  .moment-camera {
    display: none;
  }

  .moment-player {
    bottom: 4%;
  }

  .player-disc {
    width: 70px;
    height: 70px;
  }

  .play-btn {
    width: 38px;
    height: 38px;
    font-size: 0.9rem;
  }
}

/* BACK BUTTON */
#backPlaylistBtn,
#backMomentBtn,
#backBtn {
  position: fixed !important;
  top: 16px !important;
  right: 16px !important;
  z-index: 999999 !important;
  pointer-events: auto !important;
  cursor: pointer !important;
}

.playlist-photos {
  pointer-events: none !important;
}

.playlist-photos .pframe {
  pointer-events: auto !important;
}

.moment-love {
  display: inline-block;
  margin-right: 10px;
  margin-top: 360px;
  margin-left: 330px;
  transform: rotate(8deg);
}

.moment-love img {
  width: 200px;
  height: auto;
  vertical-align: middle;
}

.back-btn,
.moment-back {
  position: absolute;
  top: 18px;
  right: 18px;
  z-index: 100;
  background: #7ebcf2;
  color: #1c1440;
  border: none;
  border-radius: 10px;
  padding: 10px 22px;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 1px;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
  transition: transform 0.15s ease;
}

.back-btn:active,
.moment-back:active {
  transform: scale(0.94);
}

/* =========================================================
   MOBILE RESPONSIVE — FINAL
========================================================= */

@media (max-width: 600px) {
  body {
    min-height: 100dvh;
    overflow: hidden;
  }

  /* =========================
     SCENE 1 — ENVELOPE
  ========================= */

  .scene {
    width: 100%;
    max-width: 100%;
    padding: 20px;
  }

  .title {
    font-size: clamp(2rem, 10vw, 2.6rem);
    margin-bottom: 25px;
  }

  .envelope {
    width: 88vw;
    max-width: 330px;
  }

  .hint {
    margin-top: 25px;
    font-size: 1rem;
  }

  .bar {
    width: 110px;
    height: 4px;
    margin-top: 14px;
  }

  /* =========================
     SCENE 2 — COLLAGE
  ========================= */

  .collage {
    width: 100%;
    height: 100dvh;
    overflow: hidden;
  }

  .love-shape {
    width: 45vw;
    max-width: 180px;
    top: 9%;
    left: 5%;
  }

  .polaroid {
    width: 45vw;
    max-width: 165px;
    padding: 7px 7px 25px;
    border-radius: 6px;
  }

  .pos-leftbottom {
    bottom: 16%;
    left: 3%;
    transform: rotate(-7deg);
  }

  .letter {
    width: 48vw;
    max-width: 210px;
    top: 45%;
    left: 45%;
  }

  .photostrip {
    width: 30vw;
    max-width: 120px;
    right: 8%;
    top: 9%;
    padding: 5px;
    gap: 5px;
  }

  .love-text {
    left: 8%;
    bottom: 14%;
    font-size: clamp(1.8rem, 9vw, 2.6rem);
    letter-spacing: 2px;
    -webkit-text-stroke: 1px #1e3a8a;
    text-shadow: 2px 2px 0 #3b6fd4;
  }

  .h1 {
    top: 8%;
    right: 30%;
    font-size: 2.5rem;
  }

  .h2 {
    top: 38%;
    right: 10%;
    font-size: 1.8rem;
  }

  .h3 {
    top: 28%;
    left: 15%;
    font-size: 1.3rem;
  }

  .h4 {
    top: 48%;
    left: 8%;
    font-size: 1.6rem;
  }

  .h5 {
    bottom: 15%;
    right: 5%;
    font-size: 3rem;
  }

  .tap-surprise {
    bottom: 2.5%;
    font-size: 0.9rem;
    letter-spacing: 1px;
    padding: 0 15px;
  }

  /* =========================
     SCENE 3 — CHOOSE
  ========================= */

  .choose,
  .scene3 {
    min-height: 100dvh;
    padding: 20px;
    overflow-y: auto;
  }

  .choose {
    gap: 30px;
  }

  .choose-title {
    font-size: clamp(36px, 11vw, 48px);
    text-align: center;
    line-height: 1.1;
  }

  .choices {
    width: 100%;
    max-width: 360px;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 25px 15px;
    padding: 0;
  }

  .choice {
    gap: 10px;
  }

  .choice-img {
    width: clamp(80px, 24vw, 105px);
  }

  .choice-label {
    font-size: clamp(19px, 6vw, 24px);
  }

  .choice-glow {
    width: 120%;
  }

  .bottom-bar {
    bottom: 10px;
    width: 90px;
    height: 4px;
  }

  /* =========================
     SCENE 4 — JOURNEY
  ========================= */

  .journey {
    height: 100dvh;
    min-height: 100dvh;
    padding: 70px 15px 30px;
    overflow-y: auto;
    overflow-x: hidden;
    align-items: flex-start;
    justify-content: flex-start;
  }

  .journey-collage {
    display: flex;
    flex-direction: column;
    width: 68vw;
    max-width: 360px;
    height: auto;
    margin: 0 auto;
    gap: 20px;
  }

  .strip {
    width: 100%;
    aspect-ratio: 9 / 16;
    height: auto;
    flex: none;
    display: block;
    border-radius: 6px;
    overflow: hidden;
  }

  .strip img {
    width: 100%;
    height: 100%;
    aspect-ratio: 9 / 16;
    object-fit: cover;
    display: block;
  }

  .journey .jh1 {
    top: 24%;
    left: 20%;
    font-size: 45px;
  }

  .journey .jh2 {
    top: 38%;
    right: 18%;
    font-size: 42px;
  }

  .journey .jh3 {
    bottom: 18%;
    left: 55%;
    font-size: 38px;
  }

  /* =========================
     SCENE 5 — MOMENT
  ========================= */

  .moment {
    min-height: 100dvh;
    height: 100dvh;
    overflow: hidden;
  }

  .moment-name {
    top: 60px;
    left: 50%;
    font-size: clamp(1.9rem, 9vw, 2.4rem);
    text-align: center;
  }

  .moment-note {
    top: 300px !important;
    left: 12% !important;
    width: 74% !important;
    min-height: 0px !important;
    padding: 22px 15px;
    border-radius: 12px;
  }

  .moment-note p {
    font-size: 0.85rem !important;
    line-height: 1.55;
  }

  .moment-frame {
    top: 100px !important;
    right: 28% !important;
    width: 45% !important;
    max-width: 140px;
    padding: 7px;
  }

  .moment-camera {
    display: block;
    z-index: 10;
    top: 45%;
    right: 8%;
    bottom: auto;
    width: 32vw;
  }

  .moment-player {
    bottom: 7%;
    left: 50%;
  }

  .player-disc {
    width: 75px;
    height: 75px;
  }

  .play-btn {
    width: 36px;
    height: 36px;
    font-size: 0.85rem;
  }

  .player-label {
    font-size: 0.72rem;
  }

  .mh1 {
    top: 12%;
    left: 2%;
    font-size: 2rem;
  }

  .mh2 {
    top: 43%;
    left: 2%;
    font-size: 1.7rem;
  }

  .mh3 {
    top: 24%;
    right: 2%;
    font-size: 2rem;
  }

  .mh4 {
    bottom: 20%;
    right: 2%;
    font-size: 1.8rem;
  }

  .moment-love {
    margin: 0;
    position: absolute;
    bottom: 40% !important;
    left: 25% !important;
    transform: translateX(-50%) rotate(8deg);
    z-index: 10 !important;
  }

  .moment-love img {
    width: 160px !important;
    max-width: 40vw;
  }

  /* =========================
     SCENE 6 — PLAYLIST
  ========================= */

  /* =========================
   SCENE 6 — PLAYLIST MOBILE
   (3 FOTO DI ATAS, SPOTIFY DI BAWAH)
========================= */

  .playlist {
    min-height: 100dvh;
    height: 100dvh;
    width: 100%;
    display: flex !important;
    flex-direction: column !important;
    justify-content: flex-start !important;
    align-items: center !important;
    gap: 28px;
    padding: 70px 15px 30px;
    overflow-y: auto;
    overflow-x: hidden;
  }

  /* =========================
   3 FOTO DI ATAS
========================= */

  .playlist-photos {
    order: 1 !important;
    position: relative;
    top: -25px !important;
    width: 100%;
    max-width: 360px;
    margin: 0 auto;
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    justify-content: center !important;
    align-items: center !important;
    gap: 10px;
    flex-shrink: 0;
  }

  .playlist-title {
    position: relative !important;
    font-size: 2rem !important;
    line-height: 1.1;
    top: -90px !important;
    text-align: center;
    margin: 0;
  }

  /* =========================
   SPOTIFY DI BAWAH
========================= */

  .playlist-video {
    order: 2 !important;
    width: 92vw !important;
    max-width: 360px;
    margin: 0 auto;
    flex-shrink: 0;
  }

  /* Ukuran 3 foto */
  .pf1,
  .pf2,
  .pf3 {
    width: 28vw !important;
    max-width: 105px !important;
    min-width: 75px !important;
    flex-shrink: 0;
  }

  .pframe {
    padding: 5px !important;
    border-radius: 4px !important;
  }

  /* Spotify */
  .playlist-video {
    width: 100% !important;
    height: 140px !important;
    min-height: 140px !important;
  }

  /* =========================
     BACK BUTTON
  ========================= */

  #backPlaylistBtn,
  #backMomentBtn,
  #backBtn {
    top: 10px !important;
    right: 10px !important;
  }

  .back-btn,
  .moment-back {
    top: 10px;
    right: 10px;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    letter-spacing: 0.5px;
  }
}

/* =========================================================
   VERY SMALL PHONES
========================================================= */

@media (max-width: 380px) {
  .title {
    font-size: 2rem;
  }

  .envelope {
    width: 82vw;
  }

  .choose {
    gap: 22px;
  }

  .choices {
    gap: 20px 10px;
  }

  .choice-img {
    width: 62px;
  }

  .choice-label {
    font-size: 18px;
  }

  .moment-note {
    width: 56%;
    padding: 13px 10px;
  }

  .moment-note p {
    font-size: 0.58rem;
  }

  .moment-frame {
    width: 34%;
  }

  .playlist-video {
    height: 140px;
    min-height: 140px;
  }

  .pf1,
  .pf2,
  .pf3 {
    width: 27vw;
    min-width: 70px;
  }
}

@media (max-width: 600px) {
  .playlist {
    min-height: 100dvh;
    height: 100dvh;
    width: 100%;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    gap: 25px;
    padding: 35px 15px 30px; /* dari 70px jadi 35px */
    overflow-y: auto;
    overflow-x: hidden;
  }

  .playlist-photos {
    order: 1 !important;
    position: relative !important;
    top: 80px !important;
    width: 100% !important;
    max-width: 360px;
    margin: 0 auto !important;
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    justify-content: center !important;
    align-items: center !important;
    gap: 10px;
    flex-shrink: 0;
  }

  .playlist-left {
    order: 2 !important;
    width: 92vw;
    max-width: 360px;
    gap: 18px;
    top: 70px !important;
  }

    .playlist-title {
    position: relative !important;
    font-size: 2rem !important;
    line-height: 1.1;
    top: 80px !important;
    text-align: center;
    margin: 0;
  }

  .playlist-video {
    position: relative !important;
    top: 70px !important;
    height: 152px !important;
    min-height: 152px !important;
  }

  .pf1,
  .pf2,
  .pf3 {
    width: 28vw;
    max-width: 105px;
    min-width: 75px;
  }
}
