@keyframes float-soft { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-16px); } }
@keyframes scan { 0% { top: 20%; } 50% { top: 80%; } 100% { top: 20%; } }
@keyframes shimmer { 0% { transform: translateX(-120%); } 100% { transform: translateX(120%); } }
@keyframes pop { 0% { transform: scale(.8); opacity: 0; } 70% { transform: scale(1.06); } 100% { transform: scale(1); opacity: 1; } }
@keyframes rotate-twin { from { transform: translate(-50%,-50%) rotateX(7deg) rotateY(-16deg); } to { transform: translate(-50%,-50%) rotateX(7deg) rotateY(344deg); } }
.floating-note { animation: float-soft 6s ease-in-out infinite; }
.floating-note.two { animation-delay: 1.2s; }
.scan-line { animation: scan 2s linear infinite; }
.pop { animation: pop .25s ease-out; }
.twin-stage.auto-rotate .twin-model { animation: rotate-twin 18s linear infinite; }
.story-card::before { content: ''; position: absolute; inset: 0; width: 35%; background: linear-gradient(110deg,transparent,rgba(255,255,255,.45),transparent); transform: translateX(-120%); animation: shimmer 8s ease-in-out infinite; pointer-events: none; }
@keyframes scanMove{0%{top:20%}50%{top:80%}100%{top:20%}}
@keyframes twinFloat{0%,100%{transform:translate(-50%,-50%) rotateX(7deg) rotateY(-16deg) translateY(0)}50%{transform:translate(-50%,-50%) rotateX(4deg) rotateY(-8deg) translateY(-12px)}}
@keyframes fadeRise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.twin-float{animation:twinFloat 7s ease-in-out infinite}.page>*{animation:fadeRise .35s ease both}.page>*:nth-child(2){animation-delay:.04s}.page>*:nth-child(3){animation-delay:.08s}.page>*:nth-child(4){animation-delay:.12s}

@keyframes tracePulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.72);opacity:.68}}

@keyframes intelligenceSweep{0%{transform:translateX(-140%);opacity:0}20%{opacity:1}100%{transform:translateX(260%);opacity:0}}
