// ========================================================================== // Feature Slider Component // ========================================================================== .c-feature-slider { position: relative; width: 100%; height: 80vh; min-height: 600px; overflow: hidden; background: #000; @media (max-width: 768px) { height: 60vh; } // Container for slides &__container { position: relative; width: 100%; height: 100%; } // Track that holds all slides &__track { display: flex; width: 100%; height: 100%; transition: transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); will-change: transform; } // Individual slide &__slide { position: relative; flex: 0 0 100%; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; } // Background media container with parallax &__background { position: absolute; top: 0; left: 0; width: 100%; height: 110%; // Extra height for parallax movement z-index: 1; will-change: transform; } // Background image &__image { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; } // Background video &__video { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; } // Video fallback image &__fallback { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; } // Overlay &__overlay { position: absolute; bottom: -20px; left: 0; z-index: 2; mix-blend-mode: multiply; svg { width: 100%; height: 100%; bottom: 0; left: 0; } } // Content wrapper &__content-wrapper { position: relative; z-index: 3; width: 100%; height: 100%; display: flex; align-items: flex-end; justify-content: center; padding: 2rem; @media (max-width: 768px) { padding: 1rem; } } // Content container &__content { color: white; animation: slideInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.3s both; @media (max-width: 768px) { max-width: 100%; } } // Text content &__text { text-shadow: 0 0 5px rgba(0, 0, 0, 0.3); animation: slideInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.6s both; width: 100%; font-weight: 100; margin-bottom: 60px; @media (min-width: 1100px) { width: 60%; } @media (min-width: 1480px) { width: 40%; } p { font-size: 24px; font-family: var(--font-tertiary); font-weight: var(--font-weight-semibold); text-transform: uppercase; line-height: 0.75; letter-spacing: 0; color: var(--light-color); @media (max-width: 768px) { font-size: 18px; } &:last-child { margin-bottom: 0; } } h1 { line-height: 0.75; font-size: 132px; @media (max-width: 768px) { font-size: 80px; } } } // Actions container &__actions { animation: slideInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.7s both; } // CTA Button &__cta { display: inline-flex; align-items: center; gap: 0.5rem; padding: 1rem 2rem; background: rgba(255, 255, 255, 0.2); color: white; text-decoration: none; border-radius: 50px; font-weight: 600; font-size: 1.1rem; backdrop-filter: blur(10px); border: 2px solid rgba(255, 255, 255, 0.3); transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); text-shadow: none; &:hover { background: rgba(255, 255, 255, 0.3); border-color: rgba(255, 255, 255, 0.5); transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2); } &:active { transform: translateY(0); } } // Navigation Arrows &__arrows { position: absolute; bottom: 2rem; left: 0; right: 0; padding: 0 2rem; z-index: 4; display: flex; gap: 1rem; justify-content: flex-end; align-items: center; pointer-events: none; // Allow clicks to pass through container &.center { justify-content: center; } @media (max-width: 768px) { bottom: 1rem; padding: 0 1rem; } } &__arrow { width: 60px; height: 30px; background: var(--primary-color); color: white; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); font-family: var(--font-heading); font-size: 30px; border: none; pointer-events: auto; // Re-enable clicks on buttons &:hover { transform: translateY(-2px); background: var(--primary-strong); } @media (max-width: 768px) { width: 50px; height: 50px; font-size: 24px; } svg { width: 24px; height: 24px; transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); @media (max-width: 768px) { width: 20px; height: 20px; } } &:hover svg { transform: scale(1.2); } } // Dot Indicators &__dots { position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); z-index: 4; display: flex; gap: 0.75rem; @media (max-width: 768px) { bottom: 1rem; gap: 0.5rem; } } &__dot { width: 12px; height: 12px; border-radius: 50%; background: rgba(255, 255, 255, 0.4); border: 2px solid rgba(255, 255, 255, 0.6); cursor: pointer; transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); backdrop-filter: blur(5px); &:hover { background: rgba(255, 255, 255, 0.6); transform: scale(1.2); } &--active { background: white; border-color: white; transform: scale(1.3); } @media (max-width: 768px) { width: 10px; height: 10px; } } // Progress Bar &__progress { position: absolute; bottom: 0; left: 0; width: 100%; height: 4px; background: rgba(255, 255, 255, 0.2); z-index: 4; } &__progress-bar { height: 100%; background: white; transition: width 0.1s linear; } } // Animations @keyframes slideInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } // Bouncy slide transitions .c-feature-slider--bouncy { .c-feature-slider__track { transition: transform 1s cubic-bezier(0.68, -0.55, 0.265, 1.55); } } // Fade transition variant .c-feature-slider--fade { .c-feature-slider__track { transition: none; } .c-feature-slider__slide { position: absolute; top: 0; left: 0; opacity: 0; transition: opacity 0.8s ease-in-out; &--active { opacity: 1; } } } // Accessibility improvements @media (prefers-reduced-motion: reduce) { .c-feature-slider { &__track { transition: none; } &__content, &__title, &__subtitle, &__text, &__actions { animation: none; } &__arrow, &__dot { transition: none; } } }