/* ============================================================
   ANIMATIONS
   ============================================================ */

/* Keyframes */
@keyframes fadeUp { from { opacity:0; transform:translateY(30px); } to { opacity:1; transform:translateY(0); } }
@keyframes fadeDown { from { opacity:0; transform:translateY(-30px); } to { opacity:1; transform:translateY(0); } }
@keyframes fadeLeft { from { opacity:0; transform:translateX(-40px); } to { opacity:1; transform:translateX(0); } }
@keyframes fadeRight { from { opacity:0; transform:translateX(40px); } to { opacity:1; transform:translateX(0); } }
@keyframes popIn { from { opacity:0; transform:scale(0.8); } to { opacity:1; transform:scale(1); } }
@keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.5; } }
@keyframes float { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-10px); } }
@keyframes glow { 0%,100% { box-shadow:0 0 20px rgba(232,99,43,0.2); } 50% { box-shadow:0 0 40px rgba(232,99,43,0.4); } }
@keyframes heroGlowPulse { 0%,100% { opacity:0.4; transform:scale(1); } 50% { opacity:0.7; transform:scale(1.15); } }
@keyframes heroGlowRotate { 0% { transform:rotate(0deg); } 100% { transform:rotate(360deg); } }
@keyframes textShimmer { 0% { background-position:-200% center; } 100% { background-position:200% center; } }
@keyframes scrollLogos { 0% { transform:translateX(0); } 100% { transform:translateX(-50%); } }
@keyframes ticker { 0% { transform:translateX(0); } 100% { transform:translateX(-50%); } }

/* Puzzle assembly keyframes */
@keyframes puzzleFromTop { from { opacity:0; transform:translateY(-50px) scale(0.95); } to { opacity:1; transform:translateY(0) scale(1); } }
@keyframes puzzleFromLeft { from { opacity:0; transform:translateX(-60px) scale(0.95); } to { opacity:1; transform:translateX(0) scale(1); } }
@keyframes puzzleFromRight { from { opacity:0; transform:translateX(60px) scale(0.95); } to { opacity:1; transform:translateX(0) scale(1); } }
@keyframes puzzleFromBottom { from { opacity:0; transform:translateY(50px) scale(0.95); } to { opacity:1; transform:translateY(0) scale(1); } }
@keyframes puzzlePopIn { from { opacity:0; transform:scale(0.6); } to { opacity:1; transform:scale(1); } }
@keyframes puzzleFade { from { opacity:0; } to { opacity:1; } }

/* Reveal system */
.reveal { opacity:0; transform:translateY(30px); transition:opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
.reveal.visible { opacity:1; transform:translateY(0); }
.reveal-left { opacity:0; transform:translateX(-40px); transition:opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
.reveal-left.visible { opacity:1; transform:translateX(0); }
.reveal-right { opacity:0; transform:translateX(40px); transition:opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
.reveal-right.visible { opacity:1; transform:translateX(0); }

.delay-1 { transition-delay:0.1s; }
.delay-2 { transition-delay:0.2s; }
.delay-3 { transition-delay:0.3s; }
.delay-4 { transition-delay:0.4s; }
.delay-5 { transition-delay:0.5s; }

/* Puzzle pieces - hidden until dashboard enters viewport */
.puzzle-piece { opacity:0; }
.puzzle-piece.assembled { animation-duration:0.7s; animation-fill-mode:forwards; animation-timing-function:var(--ease-out); }
.puzzle-piece.assembled.from-top { animation-name:puzzleFromTop; }
.puzzle-piece.assembled.from-left { animation-name:puzzleFromLeft; }
.puzzle-piece.assembled.from-right { animation-name:puzzleFromRight; }
.puzzle-piece.assembled.from-bottom { animation-name:puzzleFromBottom; }
.puzzle-piece.assembled.pop-in { animation-name:puzzlePopIn; }
.puzzle-piece.assembled.fade-slot { animation-name:puzzleFade; }
