/* Ikigai Traveler — motion (iOS-style transitions) */

/* iOS push: content slides in fully-opaque; opacity/visibility snap (no fade) for reliable paint */
.screen{transition:transform var(--dur) var(--ease)}

/* reticle pulse */
.reticle{animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{transform:translate(-50%,-50%) scale(1)}50%{transform:translate(-50%,-50%) scale(1.03)}}

/* scan sweep + lock */
.scanbox.scanning .scanline{animation:sweep 1.2s var(--ease) infinite}
@keyframes sweep{0%{top:0}100%{top:100%}}
.scanbox.locked{animation:lock .4s var(--ease)}
@keyframes lock{0%{box-shadow:0 0 0 0 rgba(168,192,48,0)}50%{box-shadow:0 0 0 6px rgba(168,192,48,.3)}100%{box-shadow:0 0 0 0 rgba(168,192,48,0)}}

/* success check pop */
.screen.is-active .success-check{animation:pop .5s var(--ease)}
@keyframes pop{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.1)}100%{transform:scale(1);opacity:1}}

/* gift float + unwrap */
.gift{animation:float 3s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-8px) rotate(2deg)}}
.gift.opening{animation:unwrap .6s var(--ease) forwards}
@keyframes unwrap{0%{transform:scale(1)}40%{transform:scale(1.15) rotate(6deg)}100%{transform:scale(0);opacity:0}}

/* shutter flash */
.flash.go{animation:flash .35s ease-out}
@keyframes flash{0%{opacity:0}30%{opacity:.85}100%{opacity:0}}

/* voice wave shimmer */
.wave{animation:shimmer 1.4s linear infinite}
@keyframes shimmer{0%{background-position:0 0}100%{background-position:24px 0}}

@media (prefers-reduced-motion: reduce){
  *{animation:none !important;transition:opacity .12s linear !important}
}
