/* §3.4 애니메이션 사양 */
@keyframes slideInUp { from{opacity:0;transform:translateY(30px)} to{opacity:1;transform:translateY(0)} }
@keyframes slide-up  { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }
@keyframes fade-in   { from{opacity:0} to{opacity:1} }
@keyframes fade-out  { from{opacity:1} to{opacity:0} }
@keyframes pulse-soft{ 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.9;transform:scale(1.02)} }
@keyframes spin      { to{transform:rotate(360deg)} }
@keyframes highlight { 0%,100%{box-shadow:0 0 0 0 rgba(59,130,246,.5)} 50%{box-shadow:0 0 0 10px rgba(59,130,246,0)} }
@keyframes shake     { 0%,100%{transform:translateX(0)} 25%{transform:translateX(-8px)} 75%{transform:translateX(8px)} }
@keyframes pop-check { 0%{transform:scale(0)} 60%{transform:scale(1.25)} 100%{transform:scale(1)} }
@keyframes countUp   { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }

.card-enter { animation: slideInUp .5s ease both; }
.animate-slide-up{animation:slide-up .4s ease-out forwards}
.animate-fade-in{animation:fade-in .3s ease-out forwards;opacity:0}
.animate-fade-out{animation:fade-out .15s ease-in forwards}
.animate-shake{animation:shake .4s ease-in-out}
.animate-pop{animation:pop-check .4s cubic-bezier(.34,1.56,.64,1)}
.animate-pulse-soft{animation:pulse-soft 2s ease-in-out infinite}
.accordion{transition:max-height .4s cubic-bezier(.4,0,.2,1);overflow:hidden}
.tap-card{transition:all .3s ease}
.tap-card:hover{transform:translateY(-5px)}
.tap-card:active{transform:scale(.97)}
.loading{width:20px;height:20px;border:3px solid rgba(197,63,125,.3);border-top-color:#C53F7D;
  border-radius:50%;animation:spin 1s ease-in-out infinite;display:inline-block}
.loading-white{width:20px;height:20px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;
  border-radius:50%;animation:spin 1s ease-in-out infinite;display:inline-block}

/* 스크롤바 */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#C53F7D;border-radius:10px}
.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}
.scrollbar-hide::-webkit-scrollbar{display:none}

/* 토스트 */
.toast{position:fixed;bottom:24px;right:24px;z-index:9999;padding:12px 20px;border-radius:12px;
  color:#fff;font-weight:500;box-shadow:0 4px 20px rgba(0,0,0,.15);animation:slide-up .4s ease-out forwards}
.toast-success{background:#22c55e}
.toast-error{background:#E8888F}
.toast-warning{background:#f59e0b}
.toast-info{background:#3B82F6}

/* 날짜 칩 가로 스크롤 */
.date-chips{display:flex;gap:8px;overflow-x:auto;padding:4px 0;-ms-overflow-style:none;scrollbar-width:none}
.date-chips::-webkit-scrollbar{display:none}
.date-chip{flex-shrink:0;padding:8px 16px;border-radius:9999px;font-size:14px;font-weight:500;
  cursor:pointer;transition:all .3s ease;border:2px solid #e5e7eb;white-space:nowrap}
.date-chip.active{background:linear-gradient(to right,#C53F7D,#EC4899);color:#fff;border-color:transparent}
.date-chip.completed{background:#fce7f3;color:#C53F7D;border-color:#C53F7D}

/* 진행률 도트 */
.progress-dot{width:12px;height:12px;border-radius:50%;transition:all .3s ease}
.progress-dot.filled{background:#C53F7D}
.progress-dot.empty{background:#e5e7eb}

/* 정원 배지 */
.badge-capacity{font-size:.75rem;padding:2px 10px;border-radius:9999px;font-weight:700}
.badge-available{background:#fce7f3;color:#C53F7D}
.badge-warning{background:#fef3c7;color:#d97706}
.badge-full{background:#e5e7eb;color:#A49696}

/* 관리자 사이드바 */
.sidebar-item{display:flex;align-items:center;padding:10px 16px;border-radius:10px;
  transition:all .2s ease;cursor:pointer;color:#6b7280}
.sidebar-item:hover{background:#eff6ff;color:#3B82F6}
.sidebar-item.active{background:#dbeafe;color:#3B82F6;font-weight:600}

/* reduced motion */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
}
