/* ═══════════════════════════════════════════════════════════════
   ANIMATIONS — все @keyframes в одном месте
   ═══════════════════════════════════════════════════════════════ */

/* Generic fade up — для появления hero-элементов */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(25px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Hero scroll-line — пульсация вертикальной линии */
@keyframes scrollPulse {
  0%, 100% { opacity: 0.3; transform: scaleY(0.6); transform-origin: top; }
  50%      { opacity: 1;   transform: scaleY(1); }
}

/* ─── Calendar heart — пульс сердечка выделенной даты ─── */
@keyframes heartCellPulse {
  0%, 100% {
    transform: scale(1);
    filter: drop-shadow(0 2px 4px rgba(170,20,20,0.5));
  }
  50% {
    transform: scale(1.20);
    filter: drop-shadow(0 3px 8px rgba(214,61,61,0.75));
  }
}

/* ─── Envelope wax seal — золотой пульс свечения ─── */
@keyframes sealPulse {
  0%, 100% {
    box-shadow:
      inset 4px 5px 11px rgba(255,210,150,0.32),
      inset -4px -5px 13px rgba(35,5,5,0.95),
      0 5px  10px rgba(60,10,10,0.55),
      0 14px 32px rgba(40,5,5,0.7),
      0 0    0  0 rgba(232,195,120,0);
  }
  50% {
    box-shadow:
      inset 4px 5px 11px rgba(255,210,150,0.32),
      inset -4px -5px 13px rgba(35,5,5,0.95),
      0 5px  10px rgba(60,10,10,0.55),
      0 14px 32px rgba(40,5,5,0.7),
      0 0   42px 12px rgba(232,170,90,0.4);
  }
}

/* ─── Envelope hint — мягкое плавающее ─── */
@keyframes hintFloat {
  0%, 100% { opacity: 0.45; transform: translateY(0); }
  50%      { opacity: 0.85; transform: translateY(-3px); }
}

/* ─── Music toggle bars ─── */
@keyframes bar {
  0%   { height: 4px; }
  100% { height: 16px; }
}

/* ─── Heart beat — пульс сердечка-индикатора скролла ─── */
/* translateX(-50%) сохраняет горизонтальную центровку, scale() даёт пульс */
@keyframes heartBeat {
  0%, 60%, 100% { transform: translateX(-50%) scale(1); }
  20%           { transform: translateX(-50%) scale(1.18); }
  40%           { transform: translateX(-50%) scale(1.05); }
}

/* ─── Scroll-driven fade — текст проявляется/исчезает по скроллу ─── */
.scroll-pulse {
  /* Стартовое значение — JS выставит фактическое */
  opacity: 0;
  transform: translateY(15px);
  transition:
    opacity   0.5s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}
