/* 참석 회신 — 플로팅 편지 버튼. 전 템플릿 공통(`_rsvpfloat.jspf`).
   근거: design_handoff_heart_note/UPDATE-rsvp-bus.md §6·§7
   ⚠ 버튼은 지면 무드와 무관하게 **반투명 차콜 + 흰 선 봉투**다(어느 지면에서도 읽히는 한 벌). 템플릿이 색을 덮지 않는다.
   ⚠ 누르면 여는 것은 전체 화면 회신 모달(`.rc--pop`)이다 — 바텀시트는 2026-10-12 에 걷었다. */

/* ── 플로팅 버튼 ── */
.lrf{ position:fixed; z-index:60; }
.lrf[hidden]{ display:none; }
.lrf__btn{
  width:40px; height:40px; padding:0; display:flex; align-items:center; justify-content:center;
  position:relative; border-radius:50%; cursor:pointer;
  background:rgba(59,57,58,.8); -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.22); color:#fff;
  box-shadow:0 8px 16px -8px rgba(0,0,0,.5);
  touch-action:none; -webkit-user-select:none; user-select:none; -webkit-tap-highlight-color:transparent;
}
.lrf__btn svg{ width:20px; height:20px; display:block; }
/* 알림 점 — 봉투 오른쪽 위 모서리에 겹친다. 아직 회신하지 않았으면 은은하게 깜빡인다. */
.lrf__dot{
  position:absolute; top:8px; right:6px; width:7px; height:7px; border-radius:50%;
  background:var(--lrf-dot, #c9736b);
}
.lrf.is-replied .lrf__dot{ display:none; }
.lrf:not(.is-replied) .lrf__dot{ animation:lrfBlink 1.1s ease-in-out infinite; }
@keyframes lrfBlink{ 0%,100%{ opacity:1; } 50%{ opacity:.25; } }
/* 나타남·사라짐 — 살짝 튕긴다 */
.lrf{ opacity:0; transform:scale(.5); pointer-events:none;
      transition:opacity .3s ease, transform .4s cubic-bezier(.34,1.56,.64,1); }
.lrf.is-on{ opacity:1; transform:scale(1); pointer-events:auto; }
/* 놓으면 가까운 가장자리로 미끄러진다(끄는 동안은 즉시 따라온다) */
.lrf.is-snap{ transition:left .25s ease, top .25s ease, opacity .3s ease, transform .4s cubic-bezier(.34,1.56,.64,1); }
@media (prefers-reduced-motion: reduce){
  .lrf, .lrf.is-snap{ transition:opacity .2s linear; transform:none; }
  .lrf:not(.is-replied) .lrf__dot{ animation:none; }
}/* ── 불 들어온 상태 ──
   자동 팝업(봉투 편지)을 회신 없이 닫았다 — "아직 답을 안 하셨어요" 하고 버튼이 은은하게 빛난다.
   ⚠ 새 색을 쓰지 않는다 — 알림 점과 같은 색(`--lrf-dot`)이 번지는 것뿐이다. */
.lrf.is-lit .lrf__btn{
  box-shadow:0 8px 16px -8px rgba(0,0,0,.5), 0 0 0 0 var(--lrf-dot, #c9736b);
  animation:lrfLit 2.2s ease-out infinite;
}
@keyframes lrfLit{
  0%{ box-shadow:0 8px 16px -8px rgba(0,0,0,.5), 0 0 0 0 rgba(201,115,107,.55); }
  70%{ box-shadow:0 8px 16px -8px rgba(0,0,0,.5), 0 0 0 11px rgba(201,115,107,0); }
  100%{ box-shadow:0 8px 16px -8px rgba(0,0,0,.5), 0 0 0 0 rgba(201,115,107,0); }
}
@media (prefers-reduced-motion: reduce){ .lrf.is-lit .lrf__btn{ animation:none; } }
