@keyframes shellIn {
  from { opacity: 0; transform: scale(0.96) translateY(24px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes stepForward {
  from { opacity: 0; transform: translateX(48px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes stepBack {
  from { opacity: 0; transform: translateX(-48px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes cardIn {
  from { opacity: 0; transform: translateY(22px) scale(0.96); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes fieldIn {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes btnUnlock {
  0%   { transform: scale(1); box-shadow: 0 8px 32px rgba(180,240,0,.45); }
  35%  { transform: scale(1.07); box-shadow: 0 12px 44px rgba(180,240,0,.72); }
  65%  { transform: scale(0.97); }
  100% { transform: scale(1); box-shadow: 0 8px 32px rgba(180,240,0,.45); }
}
@keyframes progressPulse {
  0%   { box-shadow: 0 0 0 0 rgba(180,240,0,.5); }
  60%  { box-shadow: 0 0 0 5px rgba(180,240,0,0); }
  100% { box-shadow: 0 0 0 0 rgba(180,240,0,0); }
}
@keyframes resultIn {
  from { opacity: 0; transform: translateY(36px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes priceReveal {
  from { opacity: 0; transform: scale(0.78) translateY(12px); letter-spacing: -.14em; }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes checkSlide {
  from { opacity: 0; transform: translateX(-18px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes checkmarkDraw {
  from { transform: rotate(45deg) scale(0); opacity: 0; }
  to   { transform: rotate(45deg) scale(1); opacity: 1; }
}
@keyframes shimmer {
  from { transform: translateX(-160%) skewX(-20deg); }
  to   { transform: translateX(260%) skewX(-20deg); }
}
@keyframes progressGradient {
  0%   { background-position: 0% 50%; }
  100% { background-position: 200% 50%; }
}
@keyframes noticeIn {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes selectedPulse {
  0%   { box-shadow: 0 16px 36px rgba(180,240,0,.1); }
  50%  { box-shadow: 0 16px 36px rgba(180,240,0,.32); }
  100% { box-shadow: 0 16px 36px rgba(180,240,0,.1); }
}

.estimator-shell { animation: shellIn 0.72s cubic-bezier(.2,.8,.2,1) 0.08s both; }
.progress-bar { transition: width 0.55s cubic-bezier(.4,0,.2,1) !important; background-size: 200% 100%; animation: progressGradient 2.5s linear infinite; }
.progress-bar.progress-pulse { animation: progressGradient 2.5s linear infinite, progressPulse 0.5s ease; }
.question-stage.step-enter-forward { animation: stepForward 0.38s cubic-bezier(.2,.8,.2,1) both; }
.question-stage.step-enter-back { animation: stepBack 0.38s cubic-bezier(.2,.8,.2,1) both; }
.option-card.card-enter { animation: cardIn 0.38s cubic-bezier(.2,.8,.2,1) both; }
.feature-option-card.card-enter { animation: cardIn 0.38s cubic-bezier(.2,.8,.2,1) both; }
.field.field-enter { animation: fieldIn 0.38s cubic-bezier(.2,.8,.2,1) both; }
.form-section { animation: resultIn 0.42s cubic-bezier(.2,.8,.2,1) 0.06s both; }
.contact-intro { animation: stepForward 0.42s cubic-bezier(.2,.8,.2,1) both; }

#next-btn { position: relative; overflow: hidden; transition: box-shadow 0.3s ease, opacity 0.25s ease, transform 0.25s ease !important; }
#next-btn::after {
  content: ''; position: absolute; top: 0; left: 0; width: 45%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.38), transparent);
  transform: translateX(-160%) skewX(-20deg); pointer-events: none;
}
#next-btn:not(:disabled):hover::after { animation: shimmer 0.65s ease forwards; }
#next-btn.btn-unlocked { animation: btnUnlock 0.45s cubic-bezier(.2,.8,.2,1) both; }

.result-cta-hero { animation: resultIn 0.6s cubic-bezier(.2,.8,.2,1) 0.05s both; }
.result-action-block { animation: resultIn 0.6s cubic-bezier(.2,.8,.2,1) 0.18s both; }
.result-detail-row { animation: resultIn 0.6s cubic-bezier(.2,.8,.2,1) 0.30s both; }
#price-range { animation: priceReveal 0.75s cubic-bezier(.2,.8,.2,1) 0.35s both; }

.checklist-item { opacity: 0; animation: checkSlide 0.38s cubic-bezier(.2,.8,.2,1) both; }
.checklist-item .option-check::after { animation: checkmarkDraw 0.28s cubic-bezier(.2,.8,.2,1) both; }
.notice:not(.hidden) { animation: noticeIn 0.35s cubic-bezier(.2,.8,.2,1) both; }
.option-card.selected { animation: selectedPulse 1.8s ease-in-out infinite !important; }
.feature-option-card.selected { animation: selectedPulse 1.8s ease-in-out infinite !important; }

#step-indicator, #step-context { transition: opacity 0.22s ease; }
#step-indicator.fading, #step-context.fading { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
