/* === Custom Styles for "Joined at the Hip" === */ /* Smooth scrolling */ html { scroll-behavior: smooth; } /* Animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes scrollBounce { 0%, 100% { transform: translateY(0); opacity: 0.6; } 50% { transform: translateY(12px); opacity: 1; } } @keyframes answerReveal { from { opacity: 0; transform: scale(0.95) translateY(-10px); } to { opacity: 1; transform: scale(1) translateY(0); } } @keyframes float { 0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0.3; } 25% { transform: translateY(-20px) rotate(5deg); opacity: 0.6; } 50% { transform: translateY(-35px) rotate(-3deg); opacity: 0.4; } 75% { transform: translateY(-15px) rotate(2deg); opacity: 0.7; } } @keyframes pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(129, 212, 250, 0.4); } 50% { box-shadow: 0 0 0 15px rgba(129, 212, 250, 0); } } .animate-fadeInUp { animation: fadeInUp 1s ease forwards; } .animate-scrollBounce { animation: scrollBounce 2s ease-in-out infinite; } .animate-answerReveal { animation: answerReveal 0.5s ease forwards; } /* Polaroid frame effect */ .polaroid-frame { background: white; padding: 8px 8px 16px; border-radius: 4px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08); transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1.2); } .polaroid-frame:hover { box-shadow: 0 12px 30px rgba(0, 0, 0, 0.18), 0 4px 8px rgba(0, 0, 0, 0.1); } .polaroid-frame-sm { background: white; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06); transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1.2); } .polaroid-frame-sm:hover { box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15), 0 3px 6px rgba(0, 0, 0, 0.08); } /* Timeline dot pulse on scroll */ .timeline-item.visible .absolute.left-4, .timeline-item.visible .absolute.md\\:left-1\\/2 { animation: pulse 2s ease-in-out 1; } /* Fade in on scroll */ .fade-in-on-scroll { opacity: 0; transform: translateY(30px); transition: opacity 0.8s ease, transform 0.8s ease; } .fade-in-on-scroll.visible { opacity: 1; transform: translateY(0); } /* Navbar scrolled state */ #navbar.scrolled { background: rgba(13, 27, 62, 0.85); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid rgba(255, 255, 255, 0.08); } #navbar.scrolled #navLogo { opacity: 1; } /* Nav link hover effect */ .nav-link { position: relative; } .nav-link::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 1.5px; background: #81d4fa; transition: width 0.3s ease; border-radius: 1px; } .nav-link:hover::after { width: 100%; } /* Floating particles */ .particle { position: absolute; pointer-events: none; animation: float 6s ease-in-out infinite; opacity: 0; } .particle:nth-child(odd) { animation-duration: 8s; animation-delay: 1s; } .particle:nth-child(3n) { animation-duration: 7s; animation-delay: 2s; } .particle:nth-child(5n) { animation-duration: 9s; animation-delay: 0.5s; } /* Scrapbook hover */ .scrapbook-item { transition: transform 0.3s ease; } .scrapbook-item:hover { transform: translateY(-4px); } /* Mobile menu */ #mobileMenu { animation: slideDown 0.3s ease forwards; } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* Responsive polaroid adjustments */ @media (max-width: 768px) { .polaroid-frame img, .polaroid-frame-sm img { height: 140px; } .timeline-item .polaroid-frame { max-width: 85%; } } @media (max-width: 480px) { .polaroid-frame-sm img { height: 120px; } #countdownDays, #countdownHours, #countdownMinutes, #countdownSeconds { font-size: 2rem; } } /* Spotify embed styling */ iframe[src*="spotify"] { border-radius: 12px !important; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: #fdf6e3; } ::-webkit-scrollbar-thumb { background: #b3e5fc; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #81d4fa; } /* Prose adjustments for letter */ .prose p { margin-bottom: 1.2em; } /* Quiz button active */ #revealAnswer:active { transform: scale(0.95); } /* Smooth transition for all interactive elements */ a, button, .polaroid-frame, .polaroid-frame-sm, .scrapbook-item { -webkit-tap-highlight-color: transparent; } /* Reduced motion */ @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .animate-fadeInUp, .animate-scrollBounce, .animate-answerReveal, .particle { animation: none !important; } .fade-in-on-scroll { opacity: 1; transform: none; transition: none; } }