import { AbsoluteFill, useCurrentFrame, useVideoConfig, interpolate, spring, Img, staticFile, Sequence, } from "remotion"; import { Audio } from "@remotion/media"; import { AnimatedLogo } from "../../../components/AnimatedLogo"; import { BitcoinEffect } from "../../../components/BitcoinEffect"; // Spring configurations from PRD const SMOOTH = { damping: 200 }; /** * PortalIntroSceneMobile - Scene 1: Logo Reveal for Mobile (6 seconds / 180 frames @ 30fps) * * Mobile layout adaptations: * - Smaller logo (280px vs 350px) * - Adjusted text sizes for portrait orientation * - Vertical centering optimized for 1080x1920 */ export const PortalIntroSceneMobile: React.FC = () => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); // Background zoom animation - starts zoomed in, zooms out const backgroundZoom = interpolate(frame, [0, 3 * fps], [1.2, 1.0], { extrapolateRight: "clamp", }); // Logo entrance spring animation - delayed slightly for dramatic effect const logoEntranceDelay = Math.floor(0.5 * fps); const logoSpring = spring({ frame: frame - logoEntranceDelay, fps, config: { damping: 15, stiffness: 80 }, }); const logoScale = interpolate(logoSpring, [0, 1], [0, 1]); const logoOpacity = interpolate(logoSpring, [0, 0.5], [0, 1], { extrapolateRight: "clamp", }); // Outer glow pulse effect const glowIntensity = interpolate( Math.sin((frame - logoEntranceDelay) * 0.08), [-1, 1], [0.4, 0.8] ); const glowScale = interpolate( Math.sin((frame - logoEntranceDelay) * 0.06), [-1, 1], [1.0, 1.15] ); // Title text entrance - appears after logo const titleDelay = Math.floor(2 * fps); const titleSpring = spring({ frame: frame - titleDelay, fps, config: SMOOTH, }); const titleOpacity = interpolate(titleSpring, [0, 1], [0, 1]); const titleY = interpolate(titleSpring, [0, 1], [30, 0]); // Subtitle entrance const subtitleDelay = Math.floor(2.8 * fps); const subtitleSpring = spring({ frame: frame - subtitleDelay, fps, config: SMOOTH, }); const subtitleOpacity = interpolate(subtitleSpring, [0, 1], [0, 1]); // Center position for logo (adjusts as text appears) const contentY = interpolate(frame, [titleDelay, titleDelay + fps], [0, -40], { extrapolateLeft: "clamp", extrapolateRight: "clamp", }); return ( {/* Audio: logo-reveal when logo appears */} {/* Wallpaper Background with zoom effect */}
{/* Dark gradient overlay for depth */}
{/* Bitcoin particle effect in background */} {/* Content container with vertical centering */}
{/* Outer glow effect behind logo */}
{/* AnimatedLogo with entrance animation - smaller for mobile */}
{/* Title text - smaller for mobile */}

EINUNDZWANZIG

{/* Subtitle */}

Das Portal

{/* Vignette overlay */}
); };