/* Captain Alfa animations — shared by every page that uses alfa.js */
.bob { animation: alfa-bob 3.2s ease-in-out infinite; }
@keyframes alfa-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
.blink { transform-box: fill-box; transform-origin: center; animation: alfa-blink 4.6s infinite; }
@keyframes alfa-blink { 0%, 94%, 100% { transform: scaleY(1); } 96.5% { transform: scaleY(.08); } }
.wag { transform-box: fill-box; transform-origin: 50% 80%; animation: alfa-wag 1.1s ease-in-out infinite; }
@keyframes alfa-wag { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(10deg); } }
.salute { transform-box: fill-box; transform-origin: 20% 100%; transition: transform .25s; }
.flagwave { transform-box: fill-box; transform-origin: 0 50%; animation: alfa-wave 1.4s ease-in-out infinite; }
@keyframes alfa-wave { 0%, 100% { transform: skewY(-4deg); } 50% { transform: skewY(4deg); } }
.flutter { transform-box: fill-box; transform-origin: 100% 50%; animation: alfa-flutter .5s ease-in-out infinite alternate; }
@keyframes alfa-flutter { from { transform: skewY(-6deg) scaleX(1); } to { transform: skewY(6deg) scaleX(.94); } }
.conf { transform-box: fill-box; transform-origin: center; animation: alfa-conf 1.8s ease-in-out infinite; }
@keyframes alfa-conf { 0%, 100% { transform: translateY(0) rotate(0); opacity: 1; } 50% { transform: translateY(10px) rotate(25deg); opacity: .75; } }
.alfa-pop { animation: alfa-pop .35s cubic-bezier(.3, 1.6, .5, 1); }
@keyframes alfa-pop { from { transform: scale(.92) translateY(6px); opacity: .4; } to { transform: none; opacity: 1; } }
.glint { animation: alfa-glint 2.4s steps(1) infinite; }
@keyframes alfa-glint { 0%, 70% { opacity: .7; } 71%, 85% { opacity: 0; } 86%, 100% { opacity: .7; } }
/* scenes */
.sc-bar { transform-box: fill-box; transform-origin: 0 50%; animation: sc-grow 1.1s cubic-bezier(.2, .8, .2, 1) .35s both; }
@keyframes sc-grow { from { transform: scaleX(0); } to { transform: none; } }
.sc-float { animation: sc-float 4.2s ease-in-out infinite; }
@keyframes sc-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
.sc-card { animation: sc-card .9s cubic-bezier(.2, .8, .2, 1) .15s both; }
@keyframes sc-card { from { transform: translateY(18px); opacity: 0; } to { transform: none; opacity: 1; } }
.sc-sq { animation: sc-blink 3.6s steps(1) infinite; }
@keyframes sc-blink { 0%, 60% { opacity: 1; } 61%, 100% { opacity: 0; } }
/* flight scene */
.sc-cloud { animation: sc-drift 14s ease-in-out infinite; }
.sc-slow { animation-duration: 20s; animation-direction: alternate-reverse; }
@keyframes sc-drift { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-46px); } }
.sc-streak { animation: sc-streak 1.1s linear infinite; }
.sc-streak2 { animation-duration: 1.7s; animation-delay: -.6s; }
@keyframes sc-streak { 0% { transform: translateX(46px); opacity: 0; } 25% { opacity: 1; } 100% { transform: translateX(-30px); opacity: 0; } }
.sc-sq2 { transform-box: fill-box; transform-origin: center; animation: sc-pulse 2.2s ease-in-out infinite; }
@keyframes sc-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.25); } }
.sc-twinkle { transform-box: fill-box; transform-origin: center; animation: sc-tw 2.6s ease-in-out infinite; }
@keyframes sc-tw { 0%, 100% { transform: scale(.6); opacity: .5; } 50% { transform: scale(1.1); opacity: 1; } }
.sc-msg { transform-box: fill-box; transform-origin: 0 100%; animation: sc-msgin .45s cubic-bezier(.2, .8, .2, 1) both; }
@keyframes sc-msgin { from { transform: translateY(10px) scale(.9); opacity: 0; } to { transform: none; opacity: 1; } }
.sc-steam { animation: sc-steam 2.8s ease-in-out infinite; }
@keyframes sc-steam { 0%, 100% { transform: translateY(0); opacity: .7; } 50% { transform: translateY(-4px); opacity: .35; } }
/* pool scene */
.sc-ripple { animation: sc-rip 3.2s ease-in-out infinite; }
.sc-r2 { animation-delay: -1.4s; animation-duration: 4.1s; }
@keyframes sc-rip { 0%, 100% { transform: translateX(0); opacity: .7; } 50% { transform: translateX(14px); opacity: .25; } }
.sc-sway { transform-box: fill-box; transform-origin: 0 0; animation: sc-sw 6s ease-in-out infinite; }
@keyframes sc-sw { 0%, 100% { transform: translate(8px, 6px) rotate(0); } 50% { transform: translate(8px, 6px) rotate(2.4deg); } }
/* cab scene: the SUV rolls in and settles */
.sc-car { animation: sc-roll 1.1s cubic-bezier(.2, .8, .2, 1) .1s both; }
@keyframes sc-roll { from { transform: translateX(90px); opacity: 0; } to { transform: none; opacity: 1; } }
/* globe */
.sc-spin { animation: sc-spin 22s linear infinite; }
@keyframes sc-spin { from { transform: translateX(0); } to { transform: translateX(-440px); } }
@media (prefers-reduced-motion: reduce) {
  .sc-spin, .sc-car { animation: none; }
  .sc-ripple, .sc-sway, .sc-msg, .sc-steam { animation: none; }
  .sc-twinkle { animation: none; }
  .sc-cloud, .sc-streak, .sc-sq2 { animation: none; }
  .sc-bar, .sc-float, .sc-card, .sc-sq { animation: none; }
  .glint { animation: none; }
  .bob, .blink, .wag, .flagwave, .flutter, .conf, .alfa-pop { animation: none; }
}
