*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:'Nunito',sans-serif;
  -webkit-tap-highlight-color:transparent;
  background:#FFF3EE;
  color:#6B4357;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
.hidden{display:none !important}

/* ---- layout ---- */
.page{
  position:relative;
  min-height:100vh;
  width:100%;
  overflow:hidden;
  background:radial-gradient(120% 80% at 50% 0%, #FFE7EE 0%, #FFF3EC 45%, #FDF0E6 100%);
}
.shell{
  position:relative;
  z-index:1;
  max-width:760px;
  margin:0 auto;
  min-height:100vh;
  display:flex;
  flex-direction:column;
  padding:22px 20px 36px;
}
.head{display:flex;flex-direction:column;align-items:center;gap:12px}
.brand{font-family:'Caveat',cursive;font-size:24px;font-weight:700;color:#E8588A;letter-spacing:.3px}
.dots{display:flex;gap:10px;align-items:center}
.dot{
  width:13px;height:13px;border-radius:50%;border:none;cursor:pointer;
  background:#FFE0E6;transition:transform .2s,background .2s;
}
.dot.done{background:#FFC4D2}
.dot.active{background:#FF7BA0;transform:scale(1.35)}

.stage{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:18px 0;
}
.screen{display:none;width:100%;animation:fadeUp .5s ease both}
.screen.active{display:flex;justify-content:center}
.col{display:flex;flex-direction:column;align-items:center;gap:18px;width:100%}

/* ---- type ---- */
.title{font-family:'Fredoka',sans-serif;font-weight:600;font-size:clamp(34px,7vw,52px);margin:0;color:#E8588A;line-height:1.05}
.title.sm{font-size:clamp(28px,5.5vw,44px)}
.lead{font-size:19px;max-width:440px;margin:0;color:#8A6679;line-height:1.5}
.strong{font-size:21px;margin:0;color:#6B4357;font-weight:700}
.muted{margin:0;font-size:16px;color:#9A7385}
.muted.wide{max-width:440px}
.accent{color:#E8628A}
.hand-note{font-family:'Caveat',cursive;font-size:22px;color:#C9A66B}
.big-emoji{font-size:80px;line-height:1}

/* ---- buttons ---- */
.btn{border-radius:999px;font-family:'Fredoka',sans-serif;font-weight:600;transition:transform .15s,filter .15s,background .15s}
.btn:active{transform:scale(.97)}
.btn-primary{
  padding:16px 34px;font-size:20px;color:#fff;
  background:linear-gradient(135deg,#FF7BA0,#FF9D6E);
  box-shadow:0 10px 26px rgba(255,123,160,.42);
}
.btn-primary:hover{filter:brightness(1.06)}
.btn-outline{
  padding:14px 26px;font-size:18px;color:#E8628A;background:#fff;
  border:1.5px solid #FFB7C5;
}
.btn-outline:hover{background:#FFF2F5}
.row{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}

/* ---- love ---- */
.love-field{
  position:relative;width:100%;min-height:360px;margin-top:8px;
  display:flex;align-items:center;justify-content:center;gap:22px;flex-wrap:wrap;
}
#yesBtn{
  padding:14px 30px;font-size:18px;color:#fff;border-radius:999px;
  background:linear-gradient(135deg,#FF7BA0,#FF9D6E);
  box-shadow:0 8px 22px rgba(255,123,160,.42);
  font-family:'Fredoka',sans-serif;font-weight:600;
  transition:transform .2s ease;
}
.btn-ghost-no{
  padding:14px 30px;font-size:18px;border-radius:999px;
  background:#fff;border:1.5px solid #C9C2CC;color:#9A8FA0;
  font-family:'Fredoka',sans-serif;font-weight:600;
  transition:transform .16s ease;
}
.love-answer{display:flex;flex-direction:column;align-items:center;gap:16px;animation:fadeUp .4s ease both}

/* ---- card / reasons ---- */
.card{background:#fff;border:1.5px solid #FFD9E1;border-radius:28px;box-shadow:0 12px 30px rgba(255,140,160,.16)}
.reason-card{position:relative;width:100%;max-width:480px;min-height:170px;display:flex;align-items:center;justify-content:center;padding:30px 26px}
.reason-num{font-family:'Caveat',cursive;position:absolute;top:14px;right:22px;font-size:20px;color:#C9A66B}
.reason-text{font-size:22px;line-height:1.5;margin:0;color:#6B4357;font-weight:600}

/* ---- wheel ---- */
.wheel-wrap{position:relative;width:300px;height:300px;display:flex;align-items:center;justify-content:center}
.wheel-pointer{
  position:absolute;top:-6px;left:50%;transform:translateX(-50%);z-index:4;
  width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;
  border-top:24px solid #FF6F91;filter:drop-shadow(0 2px 2px rgba(0,0,0,.15));
}
.wheel{
  position:absolute;width:300px;height:300px;border-radius:50%;
  border:8px solid #fff;
  box-shadow:0 14px 36px rgba(255,140,160,.3), inset 0 0 0 2px #FFD2DD;
}
.wheel-label{
  position:absolute;left:50%;top:50%;width:94px;height:22px;margin-left:-47px;margin-top:-11px;
  text-align:center;transform-origin:50% 50%;
  font-family:'Fredoka',sans-serif;font-weight:600;font-size:15px;color:#A8506E;pointer-events:none;
}
.wheel-center{
  position:absolute;width:74px;height:74px;border-radius:50%;background:#fff;
  border:3px solid #FF7BA0;color:#E8588A;font-family:'Fredoka',sans-serif;font-weight:600;font-size:15px;
  box-shadow:0 6px 16px rgba(255,123,160,.35);z-index:3;
}
.wheel-center:hover{filter:brightness(1.04)}
.wheel-center:active{transform:scale(.95)}
.wheel-result-slot{min-height:64px;display:flex;align-items:center;justify-content:center}
.wheel-result{
  animation:pulse 1.4s ease-in-out infinite;background:#fff;border:1.5px solid #FFD9E1;border-radius:20px;
  padding:12px 22px;font-family:'Fredoka',sans-serif;font-weight:500;font-size:20px;color:#E8588A;
  box-shadow:0 8px 20px rgba(255,140,160,.16);
}

/* ---- game ---- */
.game-hud{display:flex;gap:22px;align-items:center;font-family:'Fredoka',sans-serif;font-size:20px;color:#6B4357}
.play{
  position:relative;width:100%;max-width:480px;height:380px;
  background:linear-gradient(#FFF7FB,#FFEFF4);border:1.5px solid #FFD9E1;border-radius:28px;
  overflow:hidden;box-shadow:0 12px 30px rgba(255,140,160,.16);
}
.play-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px}
#gameDone{background:rgba(255,247,251,.92)}
.game-final{font-family:'Fredoka',sans-serif;font-size:24px;color:#E8588A}
.game-msg{margin:0;font-size:18px;color:#6B4357;max-width:340px;line-height:1.4}
.catch-item{position:absolute;border:none;background:none;cursor:pointer;padding:6px;line-height:1;touch-action:manipulation;will-change:top,left}
.float-text{position:absolute;font-family:'Fredoka',sans-serif;font-weight:600;font-size:16px;color:#E8628A;pointer-events:none;z-index:5}

/* ---- letter ---- */
.letter{position:relative;width:100%;max-width:500px;padding:34px 30px;text-align:left;box-shadow:0 16px 40px rgba(255,140,160,.2)}
.letter-seal{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:40px}
.letter-body{font-family:'Caveat',cursive;font-size:clamp(22px,4.5vw,28px);line-height:1.5;color:#5B3A4B}
.letter-body p{margin:0 0 14px}
.letter-body .sign{margin:0;text-align:right;font-size:30px;color:#E8588A}

/* ---- fx ---- */
.decor{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.decor span{position:absolute;opacity:.45;animation:floaty ease-in-out infinite}
.burst-layer{position:fixed;inset:0;z-index:60;pointer-events:none;overflow:hidden}
.burst-piece{position:absolute;will-change:transform,opacity}
.pulse{animation:pulse 2s ease-in-out infinite}
.wiggle{animation:wiggle 1.6s ease-in-out infinite}

@keyframes floaty{0%,100%{transform:translateY(0) rotate(-5deg)}50%{transform:translateY(-24px) rotate(5deg)}}
@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}
@keyframes wiggle{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
