/* Product scene animations (keyframes and classes used by the scene artwork). */
@keyframes spin { 
  100% { transform: rotate(360deg); }
}
@keyframes vault-in { 
  0% { opacity: 0; transform: scale(0.82); }
  60% { opacity: 1; }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes vault-out { 
  0% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(1.14); }
}
@keyframes vault-spin { 
  100% { transform: rotate(360deg); }
}
@keyframes vault-spin-back { 
  100% { transform: rotate(-360deg); }
}
@keyframes vault-sweep { 
  100% { stroke-dashoffset: -1200; }
}
@keyframes vault-unlock { 
  0%, 55% { transform: translateY(0px); }
  72% { transform: translateY(-2.6px); }
  100% { transform: translateY(-2.2px); }
}
@keyframes vault-pulse { 
  0%, 100% { opacity: 0.25; }
  50% { opacity: 0.6; }
}
@keyframes hub-in { 
  0% { opacity: 0; transform: scale(0.97); }
  100% { opacity: 1; transform: scale(1); }
}
.vault-spin { animation: 9s linear 0s infinite normal none running vault-spin; }
.vault-spin-back { animation: 13s linear 0s infinite normal none running vault-spin-back; }
.vault-sweep { animation: 2.4s linear 0s infinite normal none running vault-sweep; }
.vault-unlock { animation: 1.6s ease-out 0s 1 normal forwards running vault-unlock; }
.vault-pulse { animation: 2.2s ease-in-out 0s infinite normal none running vault-pulse; }
.vault-spin, .vault-spin-back, .vault-unlock { transform-box: fill-box; transform-origin: center center; }
.vault-enter { animation: 0.5s cubic-bezier(0.2, 0.7, 0.3, 1) 0s 1 normal both running vault-in; }
.vault-leave { animation: 0.45s cubic-bezier(0.4, 0, 0.8, 0.4) 0s 1 normal both running vault-out; }
.hub-in { animation: 0.5s cubic-bezier(0.2, 0.7, 0.3, 1) 0s 1 normal both running hub-in; }
@keyframes offer-globe { 
  100% { transform: rotateY(360deg); }
}
@keyframes offer-trace { 
  100% { stroke-dashoffset: -360; }
}
@keyframes offer-float { 
  0%, 100% { transform: translateY(0px); }
  50% { transform: translateY(-7px); }
}
@keyframes offer-pulse { 
  0%, 100% { opacity: 1; transform: scale(1); }
  55% { opacity: 0.35; transform: scale(0.7); }
}
.offer-globe { transform-box: fill-box; transform-origin: center center; animation: 60s linear 0s infinite normal none running offer-globe; }
.offer-trace { animation: 9s linear 0s infinite normal none running offer-trace; }
.offer-trace-slow { animation: 17s linear 0s infinite reverse none running offer-trace; }
@keyframes offer-rain { 
  100% { transform: translateY(46px); }
}
@keyframes offer-scan { 
  0%, 100% { transform: translateY(-206px); }
  50% { transform: translateY(206px); }
}
@keyframes offer-ping { 
  0% { transform: scale(0.35); opacity: 0.9; }
  100% { transform: scale(1.5); opacity: 0; }
}
@keyframes offer-needle { 
  0%, 100% { transform: rotate(-2.4deg); }
  50% { transform: rotate(2.4deg); }
}
.offer-rain-a { animation: 3.4s linear 0s infinite normal none running offer-rain; }
.offer-rain-b { animation: 5.1s linear 0s infinite normal none running offer-rain; }
.offer-rain-c { animation: 4.2s linear 0s infinite normal none running offer-rain; }
.offer-scan { animation: 6s ease-in-out 0s infinite normal none running offer-scan; }
.offer-sweep { animation: 4.5s linear 0s infinite normal none running vault-spin; }
.offer-needle { animation: 5.5s ease-in-out 0s infinite normal none running offer-needle; }
.offer-ping { transform-box: fill-box; transform-origin: center center; animation: 2.8s ease-out 0s infinite normal none running offer-ping; }
.offer-float { animation: 7s ease-in-out 0s infinite normal none running offer-float; }
.offer-pulse { animation: 2.6s ease-out 0s infinite normal none running offer-pulse; }
.offer-ring { animation: 24s linear 0s infinite normal none running vault-spin; }
.offer-ring-back { animation: 16s linear 0s infinite normal none running vault-spin-back; }
.offer-ring, .offer-ring-back { transform-box: fill-box; transform-origin: center center; }
@media (prefers-reduced-motion: reduce) {
  .vault-spin, .vault-spin-back, .vault-sweep, .vault-unlock, .vault-pulse, .vault-enter, .vault-leave, .hub-in, .offer-globe, .offer-trace, .offer-trace-slow, .offer-float, .offer-pulse, .offer-ring, .offer-ring-back, .offer-rain-a, .offer-rain-b, .offer-rain-c, .offer-scan, .offer-sweep, .offer-needle, .offer-ping { animation: auto ease 0s 1 normal none running none; }
  .offer-ping { opacity: 0.6; }
  .hub-mark, .hub-label { transition: none; }
  .hub-node:hover .hub-mark, .hub-node:focus-visible .hub-mark, .hub-node:hover .hub-label, .hub-node:focus-visible .hub-label { transform: none; }
}

/* Scenes only animate while on screen (class set by scenes.js) */
.one-scene:not(.is-live) svg * { animation-play-state: paused !important; }

/* Brand Protection shield: a light sweeps across it */
@keyframes shield-sweep { 0% { transform: translateX(-60px) skewX(-18deg); } 55%, 100% { transform: translateX(300px) skewX(-18deg); } }
.shield-sweep { transform-box: view-box; animation: shield-sweep 3.6s ease-in-out -1s infinite; }
@media (prefers-reduced-motion: reduce) { .shield-sweep { animation: none; } }
