|
Server IP : 217.21.85.138 / Your IP : 216.73.216.103 Web Server : LiteSpeed System : Linux in-mum-web906.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u915722082 ( 915722082) PHP Version : 7.4.33 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/u915722082/.nvm/../public_html/rkeventandmedia/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<!DOCTYPE html>
<html lang="zxx">
<head>
<!-- Meta Tags -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
<meta name="description" content="RK MEDIA Photography Agency">
<meta name="author" content="">
<!-- Favicon and touch Icons -->
<!-- <link href="./assets/img/favicon.png" rel="shortcut icon" type="image/png">
<link href="./assets/img/apple-touch-icon.html" rel="apple-touch-icon">
<link href="./assets/img/apple-touch-icon-72x72.html" rel="apple-touch-icon" sizes="72x72">
<link href="./assets/img/apple-touch-icon-114x114.html" rel="apple-touch-icon" sizes="114x114">
<link href="./assets/img/apple-touch-icon-144x144.html" rel="apple-touch-icon" sizes="144x144"> -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.1.1/assets/owl.carousel.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.1.1/assets/owl.theme.default.min.css"> -->
<!-- Page Title -->
<title>RK Media & Events</title>
<!-- Styles Include -->
<link rel="stylesheet" href="./assets/css/main.css">
<style>
/* Basic styling for the testimonials */
.slider-container {
position: fixed; /* Fix it so it doesn't move */
top: 50%;
left: 0;
width: 100vw;
height: 300px;
display: flex;
align-items: center;
overflow: hidden;
background: #f5f5f5;
}
.slider {
display: flex;
gap: 20px;
width: max-content;
transition: transform 0.3s ease-out;
}
.slide {
width: 250px;
height: 250px;
background-size: cover;
background-position: center;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.room-card {
width: 100%;
height: 500px;
background: white;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
position: absolute;
transform-origin: center bottom;
backface-visibility: hidden;
transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1),
opacity 0.8s cubic-bezier(0.215, 0.610, 0.355, 1);
overflow: hidden;
will-change: transform, opacity;
}
/* Enhance drop shadow for better stacking visual */
.room-card {
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15),
0 2px 8px rgba(0, 0, 0, 0.1),
0 0 1px rgba(0, 0, 0, 0.2);
}
.room-image-container {
position: relative;
height: 55%;
overflow: hidden;
}
.room-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.room-title {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
background: linear-gradient(to top, rgba(0,0,0,0.7), transparent);
color: white;
padding: 15px;
margin: 0;
font-size: 22px;
}
.room-description {
padding: 20px;
height: 35%;
}
.room-description p {
color: #666;
font-size: 14px;
line-height: 1.5;
}
.know-more {
display: inline-block;
margin: 0 20px 20px;
color: #b90808;
text-decoration: none;
font-weight: bold;
font-size: 14px;
}
@media (min-width: 768px) {
.hotel-slider-container.mobile-only {
display: none;
}
}
.wptb-heading-banner {
position: absolute;
top: 50%;
/* left: 50%; */
left: 35% !important;
transform: translate(-50%, -50%);
text-align: center;
color: white;
z-index: 10;
}
</style>
</head>
<body class="theme-style--light">
<!-- Preloader -->
<!-- <div id="preloader">
<div class="preloader-inner">
<div class="spinner">
<img src="./assets/img/preloader-logo.svg" alt="img">
<img src="./assets/img/preloader-wheel.svg" alt="img" class="wheel">
</div>
</div>
</div> -->
<!-- pointer start -->
<div class="pointer bnz-pointer" id="bnz-pointer"></div>
<div class="grid_lines">
<div class="grid_line"></div>
<div class="grid_line"></div>
<div class="grid_line"></div>
<div class="grid_line"></div>
<div class="grid_line"></div>
<div class="grid_line"></div>
<div class="grid_line"></div>
</div>
<!-- Main Header -->
<header class="header color-fixed">
<!-- Lower Bar -->
<div class="header-inner">
<div class="container-fluid pe-0">
<div class="d-flex align-items-center justify-content-between">
<!-- Left Part -->
<div class="header_left_part d-flex align-items-center">
<div class="logo">
<!-- <a href="#" class="light_logo"><img src="./assets/img/logo.svg" alt="logo"></a>
<a href="#" class="dark_logo"><img src="./assets/img/logo-dark.svg" alt="logo"></a> -->
<a href="index.html" class="light_logo" style="color: #fff;">RK MEDIA</a>
<!-- <a href="#" class="dark_logo">RK MEDIA</a> -->
</div>
</div>
<!-- Center Part -->
<div class="header_center_part d-none d-xl-block">
<div class="mainnav">
<ul class="main-menu">
<li class="menu-item menu-item-has-children active"><a href="#">Our Work</a>
<ul class="sub-menu" data-lenis-prevent="">
<li class="menu-item"><a href="wedding.html">Wedding</a></li>
<li class="menu-item"><a href="event.html">Event</a></li>
<li class="menu-item"><a href="commercial.html">Commercial</a></li>
</ul>
</li>
<li class="menu-item"><a href="#"><i class="bi bi-instagram" style="color: #B90808;"></i> Instagram</a></li>
<li class="menu-item "><a href="contact.html">Contact us</a>
</li>
</ul>
</div>
</div>
<div class="header_right_part d-flex align-items-center">
<div class="aside_open wptb-element">
<div class="aside-open--inner">
<span></span>
<span></span>
<span></span>
</div>
</div>
<button type="button" class="mr_menu_toggle wptb-element d-xl-none">
<i class="bi bi-list"></i>
</button>
</div>
</div>
</div>
</div>
</header>
<div class="mr_menu" data-lenis-prevent>
<button type="button" class="mr_menu_close"><i class="bi bi-x-lg"></i></button>
<div class="logo"></div>
<h6>Menu</h6>
<div class="mr_navmenu"></div>
<h6>Contact Us</h6>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-envelope"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="mailto:rkmedia@gmail.com">rkmedia@gmail.com</a></p>
</div>
</div>
</div>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-geo-alt"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="#">Lorem ipsum dolor sit.</a></p>
</div>
</div>
</div>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-phone"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="tel:+1234567899">+91 123 4567 889</a></p>
</div>
</div>
</div>
<h6>Find Our Page</h6>
<div class="social-box">
<ul>
<li><a href="#"><i class="bi bi-facebook"></i></a></li>
<li><a href="#"><i class="bi bi-instagram"></i></a></li>
<li><a href="#"><i class="bi bi-linkedin"></i></a></li>
<li><a href="#"><i class="bi bi-youtube"></i></a></li>
</ul>
</div>
</div>
<div class="aside_info_wrapper" data-lenis-prevent>
<button class="aside_close">Close <i class="bi bi-x-lg"></i></button>
<div class="aside_logo logo">
<a href="#" class="light_logo">RK MEDIA</a>
<a href="#" class="dark_logo">RK MEDIA</a>
</div>
<div class="aside_info_inner">
<h6> Instagram</h6>
<div class="insta-logo">
<i class="bi bi-instagram"></i>Lorem, ipsum.
</div>
<div class="wptb-instagram--gallery">
<div class="wptb-item--inner d-flex align-items-center justify-content-center flex-wrap">
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-insta-01.png" alt="instagram-gallery-img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-insta-02.png" alt="instagram-gallery-img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-brand-insta-03.png" alt="instagram-gallery-img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-brand-insta-04.png" alt="instagram-gallery-img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-brand-insta-05.png" alt="instagram-gallery-img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image">
<img src="./assets/images/rk-weds-brand-insta-06.png" alt="instagram-gallery-img">
</div>
</div>
</div>
</div>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-envelope"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="mailto:rkmedia@gmail.com">rkmedia@gmail.com</a></p>
</div>
</div>
</div>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-geo-alt"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="#">28 Street, ABC colony</a></p>
</div>
</div>
</div>
<div class="wptb-icon-box1 style2">
<div class="wptb-item--inner flex-start">
<div class="wptb-item--icon"><i class="bi bi-phone"></i></div>
<div class="wptb-item--holder">
<p class="wptb-item--description"><a href="tel:+1234567890">+1234567890</a></p>
</div>
</div>
</div>
<h6>Follow Us</h6>
<div class="social-box style-square">
<ul>
<li><a href="#"><i class="bi bi-facebook"></i></a></li>
<li><a href="#"><i class="bi bi-instagram"></i></a></li>
<li><a href="#"><i class="bi bi-linkedin"></i></a></li>
<li><a href="#"><i class="bi bi-youtube"></i></a></li>
</ul>
</div>
</div>
</div>
<!-- Modal Search -->
<div class="search-modal">
<div class="modal fade" id="modalSearch">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="search_overlay">
<form class="credential-form" method="post">
<div class="form-group">
<input type="text" name="search" class="keyword form-control" placeholder="Search Here">
</div>
<button type="submit" class="btn-search">
<span class="text-first"> <i class="bi bi-arrow-right"></i> </span>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
<main class="wrapper">
<!-- <section class="wptb-slider style19 position-relative overflow-hidden">
<div class="localvideo-bg">
<video autoplay muted loop playsinline>
<source src="./assets/images/3.mp4" type="video/mp4">
</video>
</div>
<div class="wptb-heading-banner">
<h1 class="wptb-title text-white">Capturing Wedding</h1>
</div>
</section> -->
<section class="wptb-slider style19 position-relative overflow-hidden">
<div class="localvideo-bg">
<!-- <video autoplay muted loop playsinline>
<source src="./assets/images/3.mp4" type="video/mp4">
</video> -->
<video class="background-video" autoplay="" muted="" playsinline="" loop="" preload="auto">
<source src="./assets/images/6633a6e3e958d471a6439b57_DnM_EditorialBook_02_HOR-transcode.mp4" type="video/mp4">
</video>
</div>
<div class="wptb-heading-banner">
<figure class="home-header_title-wrapper"><h1 data-w-id="d1dc7f72-8252-9274-2611-7bc388ca54d4" style="opacity: 1;" class="heading-h1-display padding-global"><span class="opacity-0">O</span>Insatiable</h1><h1 data-w-id="4913eac6-e5d2-d2ca-69ff-727ad2af9b5e" style="opacity: 1;" class="heading-h1-display padding-global">Impactful</h1><h1 data-w-id="82596644-c880-9d37-3e50-fb6df936be2d" style="opacity: 1;" class="heading-h1-display padding-global"><span class="opacity-0">O</span>Intentional</h1></figure>
<div class="header_right_part ">
<a class="btn btn-two white" href="#">
<span class="btn-wrap">
<span class="text-first">Book Kimono</span>
<span class="text-second"> <i class="bi bi-arrow-up-right"></i> <i class="bi bi-arrow-up-right"></i> </span>
</span>
</a>
</div>
</div>
</section>
<section class="section-photobook-photos pt-200px pb-200px">
<div class="container">
<div class="photobook-photos-wrapper">
<div class="photobook-intro-title-container">
<h1 class="headline_medium_h3">THE ESSENCE OF YOUR LOVE</h1>
<p class="body_text_normal">
<span class="drop_cap">W</span>e want your Album to be eternal, transcending time and fashion, a little piece of art that never ages just like the memories it captures.<br><br>
A contemporary and clean design fused with emotions and storytelling narrative, printed on <strong>Fine Art Lustre</strong> paper, bound in sleek white cover and finished with personalised typography.<br><br>
Every book is handcrafted and delivered with care instructions. They are great volumes for staying present in Your day.
</p>
</div>
<div class="photobook-photos">
<div class="photobook-photos-left-column" id="leftColumn">
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/rk-weds-brand-05.png" alt="White eco leather cover" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">white eco leather cover</h1>
</div>
</a>
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/rk-weds-brand-02.png" alt="Luxury magazine look" class="project-image">
<!-- <video class="background-video" autoplay muted playsinline loop preload="auto">
<source src="./assets/images/6633a62e7cc6180784adcadf_DnM_EditorialBook_02_VER-transcode.mp4" type="video/mp4">
</video> -->
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">luxury magazine look</h1>
</div>
</a>
<!--
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/661ebd44a926c8ca2ca89702_Editorial_Album_017.jpg" alt="Personalised pages" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">PERSONALISED PAGES</h1>
</div>
</a> -->
<!-- <a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="https://images.unsplash.com/photo-1544716278-ca5e3f4abd8c?w=800&h=1200&fit=crop" alt="Contemporary and clean design" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">contemporary and clean design</h1>
</div>
</a> -->
<!-- <a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="https://images.unsplash.com/photo-1513475382585-d06e58bcb0e0?w=800&h=1200&fit=crop" alt="Up to 180 images" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">UP TO 180 IMAGES</h1>
</div>
</a> -->
</div>
<div class="photobook-photos-right-column" id="rightColumn">
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/rk-weds-brand-01.png" alt="25x32cm portrait size" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">25x32cm portrait size</h1>
</div>
</a>
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/rk-weds-brand-03.png" alt="Black canvas box" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">black canvas box</h1>
</div>
</a>
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="./assets/images/rk-weds-brand-04.png" alt="Paperback binding" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">paperback binding</h1>
</div>
</a>
<!-- <a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="https://images.unsplash.com/photo-1519904981063-b0cf448d479e?w=800&h=1200&fit=crop" alt="Your memories lasting forever" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">your memories lasting forever</h1>
</div>
</a>
<a href="#" class="project-link-block">
<div class="project-image-wrapper-2">
<img src="https://images.unsplash.com/photo-1544716278-e513176f20a5?w=800&h=1200&fit=crop" alt="White print embossing" class="project-image">
</div>
<div class="project-content-wrapper">
<h1 class="photobook_image_title">WHITE PRINT EMBOSSING</h1>
</div>
</a> -->
</div>
</div>
</div>
</div>
</section>
<script>
// Parallax effect for the right column
function handleParallax() {
const rightColumn = document.getElementById('rightColumn');
const scrolled = window.pageYOffset;
const parallaxSpeed = 0.3;
if (window.innerWidth > 768) {
const yPos = -(scrolled * parallaxSpeed);
rightColumn.style.transform = `translate3d(0, ${yPos}px, 0)`;
} else {
rightColumn.style.transform = 'none';
}
}
// Optimized scroll listener
let ticking1 = false;
function requestTick() {
if (!ticking1) {
requestAnimationFrame(handleParallax);
ticking1 = true;
}
}
window.addEventListener('scroll', function() {
requestTick();
ticking1 = false;
});
// Handle window resize
window.addEventListener('resize', function() {
handleParallax();
});
// Initialize parallax on load
window.addEventListener('load', handleParallax);
</script>
<section class="gallery-section pt-200px pb-200px" id="gallery">
<!-- <div class="body_text_wrapper is-custom"><div data-w-id="97abc975-32ba-1e0f-edba-c0ac7d9518cd" style="opacity: 1;" class="body_text_big"><span class="drop_cap">R </span>ecognised as worldwide-acclaimed photographers, we are Daniele and Marilia, a real-life duo who compose images that artfully evoke emotion while securing moments in time. The epitome of alchemy, our photography style is sought after by couples who follow the bold and embrace the extraordinary. </div></div> -->
<div class="event-bar-container container">
<div class="contact-bar" style="background-color: rgb(231, 231, 231) !important;">
<div class="event-message " style="color: rgb(25, 25, 25) !important;">
Need assistance? We're just a click away!
</div>
<div class="contact-number">
<div class="phone-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57a1.02 1.02 0 00-1.02.24l-2.2 2.2a15.045 15.045 0 01-6.59-6.59l2.2-2.21a.96.96 0 00.25-1A11.36 11.36 0 018.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z"></path>
</svg>
</div>
<div class="phone-number" ><a href="tel:00001111000" style="color: #b90808 !important;">Call Now</a></div>
</div>
</div>
</div>
<div class="container">
<h2 class="gallery-title">Wedding Gallery</h2>
<!-- Filter Controls -->
<div class="filter-container">
<button class="filter-btn active" data-filter="all">
All <span class="filter-count">11</span>
</button>
<button class="filter-btn" data-filter="ceremony">
Ceremony <span class="filter-count">3</span>
</button>
<button class="filter-btn" data-filter="reception">
Reception <span class="filter-count">3</span>
</button>
<button class="filter-btn" data-filter="portraits">
Portraits <span class="filter-count">3</span>
</button>
<button class="filter-btn" data-filter="details">
Details <span class="filter-count">2</span>
</button>
</div>
<div class="gallery-grid ">
<div class="gallery-item" data-category="ceremony">
<img src="assets/images/rk-wedding-g-01.png" alt="Wedding ceremony">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">👰</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="portraits">
<img src="assets/images/rk-wedding-g-11.png" alt="Couple portrait">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">💕</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="reception">
<img src="assets/images/rk-wedding-g-03.png" alt="Wedding reception">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">🎉</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="details">
<img src="assets/images/rk-wedding-g-10.png" alt="Wedding rings">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">💍</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="ceremony">
<img src="assets/images/rk-wedding-g-02.png" alt="Bridal party">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">👰</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="details">
<img src="assets/images/rk-wedding-g-04.png" alt="Wedding flowers">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">🌸</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="reception">
<img src="assets/images/rk-wedding-g-07.png" alt="Wedding dance">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">💃</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="reception">
<img src="assets/images/rk-wedding-g-06.png" alt="Wedding dance">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">🎉</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="portraits">
<img src="assets/images/rk-wedding-g-08.png" alt="Wedding details">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">💕</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
<div class="gallery-item" data-category="ceremony">
<img src="assets/images/rk-wedding-g-09.png" alt="Happy couple">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">👰</div> -->
<div class="overlay-category">Ceremony</div>
</div>
</div>
<div class="gallery-item" data-category="portraits">
<img src="assets/images/Rk-wedding-10.png" alt="Happy couple">
<div class="gallery-overlay">
<!-- <div class="overlay-icon">💕</div> -->
<div class="overlay-category">lorem</div>
</div>
</div>
</div>
</div>
</section>
<!-- Lightbox Modal -->
<div class="lightbox-modal" id="lightboxModal">
<div class="lightbox-content">
<button class="lightbox-close" id="lightboxClose">×</button>
<button class="lightbox-nav lightbox-prev" id="lightboxPrev">
<svg class="wedding-carousel-arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
</svg>
</button>
<div class="lightbox-loading" id="lightboxLoading" style="display: none;">
<div class="loading-spinner"></div>
</div>
<img class="lightbox-image" id="lightboxImage" src="" alt="">
<button class="lightbox-nav lightbox-next" id="lightboxNext">
<svg class="wedding-carousel-arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path>
</svg>
</button>
<div class="lightbox-counter" id="lightboxCounter">1 / 11</div>
<div class="lightbox-info" id="lightboxInfo" style="display: none;">
<span class="lightbox-category-icon">👰</span>
<span class="lightbox-category-text">Ceremony</span>
</div>
</div>
</div>
<script>
// Gallery filtering functionality
class GalleryFilter {
constructor() {
this.filterButtons = document.querySelectorAll('.filter-btn');
this.galleryItems = document.querySelectorAll('.gallery-item');
this.currentFilter = 'all';
// Initialize lightbox
this.lightbox = new LightboxGallery(this.galleryItems);
this.init();
}
init() {
// Add click event listeners to filter buttons
this.filterButtons.forEach(btn => {
btn.addEventListener('click', (e) => {
const filter = e.target.dataset.filter;
this.filterGallery(filter);
this.updateActiveButton(e.target);
});
});
// Initialize intersection observer for animations
this.initIntersectionObserver();
}
filterGallery(filter) {
this.currentFilter = filter;
// First, fade out items that will be hidden
const itemsToHide = [];
const itemsToShow = [];
this.galleryItems.forEach(item => {
const category = item.dataset.category;
if (filter === 'all' || category === filter) {
itemsToShow.push(item);
} else {
itemsToHide.push(item);
}
});
// Fade out items that need to be hidden
itemsToHide.forEach(item => {
item.classList.add('filter-fade-out');
});
// After fade out animation, hide them completely and show filtered items
setTimeout(() => {
itemsToHide.forEach(item => {
item.classList.add('filtered-out');
item.classList.remove('filter-fade-out');
});
itemsToShow.forEach((item, index) => {
item.classList.remove('filtered-out', 'filter-fade-out');
// Add fade in animation with stagger
setTimeout(() => {
item.classList.add('filter-fade-in');
}, index * 50);
// Remove animation class after animation completes
setTimeout(() => {
item.classList.remove('filter-fade-in');
}, 600 + (index * 50));
});
// Update counts after layout change
this.updateFilterCounts();
// Update lightbox with current visible items
this.lightbox.updateVisibleItems();
}, 200);
}
updateActiveButton(activeBtn) {
this.filterButtons.forEach(btn => {
btn.classList.remove('active');
});
activeBtn.classList.add('active');
}
updateFilterCounts() {
const counts = {
all: this.galleryItems.length,
ceremony: 0,
reception: 0,
portraits: 0,
details: 0
};
this.galleryItems.forEach(item => {
const category = item.dataset.category;
if (counts.hasOwnProperty(category)) {
counts[category]++;
}
});
this.filterButtons.forEach(btn => {
const filter = btn.dataset.filter;
const countSpan = btn.querySelector('.filter-count');
if (countSpan && counts.hasOwnProperty(filter)) {
countSpan.textContent = counts[filter];
}
});
}
initIntersectionObserver() {
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, index) => {
if (entry.isIntersecting && !entry.target.classList.contains('filtered-out')) {
setTimeout(() => {
entry.target.classList.add('animate');
}, index * 100);
observer.unobserve(entry.target);
}
});
}, observerOptions);
this.galleryItems.forEach(item => {
observer.observe(item);
});
}
}
// Lightbox Gallery Class
class LightboxGallery {
constructor(galleryItems) {
this.galleryItems = Array.from(galleryItems);
this.currentIndex = 0;
this.visibleItems = [...this.galleryItems];
// DOM elements
this.modal = document.getElementById('lightboxModal');
this.image = document.getElementById('lightboxImage');
this.closeBtn = document.getElementById('lightboxClose');
this.prevBtn = document.getElementById('lightboxPrev');
this.nextBtn = document.getElementById('lightboxNext');
this.counter = document.getElementById('lightboxCounter');
this.info = document.getElementById('lightboxInfo');
this.loading = document.getElementById('lightboxLoading');
this.categoryIcons = {
ceremony: '👰',
portraits: '💕',
reception: '🎉',
details: '💍'
};
this.init();
}
init() {
// Add click listeners to gallery items
this.galleryItems.forEach((item, index) => {
item.addEventListener('click', () => {
this.openLightbox(index);
});
});
// Modal controls
this.closeBtn.addEventListener('click', () => this.closeLightbox());
this.prevBtn.addEventListener('click', () => this.showPrevious());
this.nextBtn.addEventListener('click', () => this.showNext());
// Keyboard navigation
document.addEventListener('keydown', (e) => {
if (this.modal.classList.contains('active')) {
switch(e.key) {
case 'Escape':
this.closeLightbox();
break;
case 'ArrowLeft':
this.showPrevious();
break;
case 'ArrowRight':
this.showNext();
break;
}
}
});
// Close on backdrop click
this.modal.addEventListener('click', (e) => {
if (e.target === this.modal) {
this.closeLightbox();
}
});
}
updateVisibleItems() {
this.visibleItems = this.galleryItems.filter(item =>
!item.classList.contains('filtered-out')
);
}
openLightbox(index) {
// Find the actual index in visible items
const clickedItem = this.galleryItems[index];
this.currentIndex = this.visibleItems.indexOf(clickedItem);
if (this.currentIndex === -1) {
// Item is not visible, use first visible item
this.currentIndex = 0;
}
this.showImage();
this.modal.classList.add('active');
document.body.style.overflow = 'hidden';
}
closeLightbox() {
this.modal.classList.remove('active');
document.body.style.overflow = '';
}
showPrevious() {
this.currentIndex = (this.currentIndex - 1 + this.visibleItems.length) % this.visibleItems.length;
this.showImage();
}
showNext() {
this.currentIndex = (this.currentIndex + 1) % this.visibleItems.length;
this.showImage();
}
showImage() {
const currentItem = this.visibleItems[this.currentIndex];
const img = currentItem.querySelector('img');
const category = currentItem.dataset.category;
// Show loading
this.loading.style.display = 'block';
this.image.style.opacity = '0';
// Create new image to preload
const newImg = new Image();
newImg.onload = () => {
this.image.src = img.src;
this.image.alt = img.alt;
this.loading.style.display = 'none';
this.image.style.opacity = '1';
};
newImg.src = img.src;
// Update counter
this.counter.textContent = `${this.currentIndex + 1} / ${this.visibleItems.length}`;
// Update info
const categoryIcon = this.info.querySelector('.lightbox-category-icon');
const categoryText = this.info.querySelector('.lightbox-category-text');
categoryIcon.textContent = this.categoryIcons[category] || '📸';
categoryText.textContent = category.charAt(0).toUpperCase() + category.slice(1);
// Update navigation button states
this.updateNavigationState();
}
updateNavigationState() {
// Show/hide navigation buttons based on number of items
const hasMultipleItems = this.visibleItems.length > 1;
this.prevBtn.style.display = hasMultipleItems ? 'flex' : 'none';
this.nextBtn.style.display = hasMultipleItems ? 'flex' : 'none';
}
}
// Initialize gallery filter when DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
new GalleryFilter();
});
</script>
<section class=" pb-0px sm-pt-100px sm-pb-0px" style="background-color: #F7F7F7;">
<div class="container-fluid">
<div class=" ">
<!-- <span class="photo-text sm-mb-none">
<i class="fa-solid fa-circle"></i>
Available for Freelance
</span> -->
<div class="wptb-item--inner wptb-top text-center md-position-top">
<div class="wptb-heading mb-0 ">
<div class="wptb-item--inner ">
<!-- <h6 class="wptb-item--subtitle"><span>02 //</span> Photo Albums</h6> -->
<div class="hero-photostudio__info1">
<span class="photo-text1">
<i class="fa-solid fa-circle"></i>
Lorem ipsum dolor
</span>
</div>
</div>
</div>
<!-- <h1 class="wptb-item--title ">Rk Media captures all of your <br> <span>beautiful memories </span></h1> -->
<div class="wptb-heading pt-100px pb-100px sm-pt-20px sm-pb-20px">
<h1 class="big-title wptb-item--title">Case Studies </h1>
</div>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Vel autem laudantium similique nobis <br> suscipit ratione reiciendis laboriosam, officiis eveniet deleniti?</p>
</div>
<!-- <span class="photo-text sm-mb-none">
<i class="fa-solid fa-circle"></i>
Located in London, UK
</span> -->
</div>
</div>
<style>
.wedding-card-content {
/* padding: 1.5rem; */
padding-top: 1.5rem;
flex-grow: 1;
}
.wedding-card {
border-radius: 0px !important;
box-shadow: none !important;
background-color: unset !important;
}
.wedding-card-image img {
width: 100%;
height: 100%;
border-radius: 7px;
object-fit: cover;
object-position: center;
}
</style>
<div class="sticky_parent">
<div class="sticky">
<div class="wedding-carousel-wrapper">
<!-- Item 1 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-01.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
<!-- Item 2 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-02.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
<!-- Item 3 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-03.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
<!-- Item 4 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-04.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
<!-- Item 5 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-05.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
<!-- Item 6 -->
<div class="wedding-carousel-item">
<div class="wedding-card">
<div class="wedding-card-image">
<img src="assets/images/rk-wedding-m-06.png" alt="services-image">
</div>
<div class="wedding-card-content text-center justify-content-center">
<h3 class="wedding-card-title">Lorem ipsum dolor sit.</h3>
<p class="wedding-card-description">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Minus provident officia beatae vitae ex. Dolores nostrum, provident alias ab expedita recusandae. Minus, veniam.</p>
<div class=" col-lg-12 d-flex text-center justify-content-center">
<a href="#" class="know-more m-0">View More</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<style>
.testimonial-content {
background-color: #ffffff !important;
padding: 50px;}
.couple-name {
color: #000 !important;
font-family: var(--bs-body-font-family);
}
</style>
<section class="wptb-testimonial-one position-relative overflow-hidden" style="background-color: #F7F7F7;padding-top: 0 !important;">
<div class="container">
<div class="row">
<div class="testimonial-showcase">
<div class="testimonial-track">
<!-- Panel 1 -->
<div class="testimonial-panel active">
<div class="panel-section testimonial-content">
<h2 style="color: #000;">KIND WORDS</h2>
<img src="assets/images/NEW_IMAGE/SMALL_TESTIM_01.png" alt="wedding-testimonial-image" class="couple-portrait">
<p class="client-quote">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet nam perspiciatis veniam, magnam aperiam vitae deserunt reprehenderit praesentium minus. Pariatur!</p>
<h3 class="couple-name">Lorem ipsum</h3>
</div>
<div class="panel-section">
<img src="assets/images/NEW_IMAGE/Rk-testimonial-01.png" alt="wedding-testimonial-image" class="wedding-photo">
</div>
</div>
<!-- Panel 2 -->
<div class="testimonial-panel">
<div class="panel-section testimonial-content">
<h2 style="color: #000;">TESTIMONIALS</h2>
<img src="assets/images/NEW_IMAGE/Rk-testimonial-02.png" alt="wedding-testimonial-image" class="couple-portrait">
<p class="client-quote">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet nam perspiciatis veniam, magnam aperiam vitae deserunt reprehenderit praesentium minus. Pariatur!</p>
<h3 class="couple-name">Lorem ipsum</h3>
</div>
<div class="panel-section">
<img src="assets/images/NEW_IMAGE/TESTMONIAL_02.png" alt="wedding-testimonial-image" class="wedding-photo">
</div>
</div>
<!-- Panel 3 -->
<div class="testimonial-panel">
<div class="panel-section testimonial-content">
<h2 style="color:#000;">LOVE STORIES</h2>
<img src="assets/images/NEW_IMAGE/Rk-testimonial-03.png" alt="wedding-testimonial-image" class="couple-portrait">
<p class="client-quote">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet nam perspiciatis veniam, magnam aperiam vitae deserunt reprehenderit praesentium minus. Pariatur!</p>
<h3 class="couple-name">Lorem ipsum</h3>
</div>
<div class="panel-section">
<img src="assets/images/NEW_IMAGE/TESTMONIAL_03.png" alt="wedding-testimonial-image" class="wedding-photo">
</div>
</div>
<!-- Panel 4 -->
<!-- <div class="testimonial-panel">
<div class="panel-section testimonial-content">
<h2 style="color: white;">MOMENTS</h2>
<img src="assets/images/NEW_IMAGE/SMALL_TESTIM_01.png" alt="wedding-testimonial-image" class="couple-portrait">
<p class="client-quote">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet nam perspiciatis veniam, magnam aperiam vitae deserunt reprehenderit praesentium minus. Pariatur!</p>
<h3 class="couple-name">Lorem ipsum</h3>
</div>
<div class="panel-section">
<img src="assets/images/NEW_IMAGE/TESTMONIAL_02.png" alt="wedding-testimonial-image" class="wedding-photo">
</div>
</div> -->
</div>
<div class="testimonial-controls">
<button class="control-btn prev-btn"><svg class="wedding-carousel-arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
</svg></button>
<button class="control-btn next-btn"><svg class="wedding-carousel-arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
</svg></button>
</div>
</div>
</div>
</div>
</section>
<style>
/* Main section styling */
.cta-footer {
position: relative;
width: 100%;
max-width: 2500px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
/* padding: 0 1rem; */
min-height: 50vmax;
background: white;
color: black;
overflow: hidden;
}
@media (min-width: 1024px) {
.cta-footer {
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 1.5rem;
padding: 0 1.5rem;
}
}
/* CTA Button */
.cta-link {
position: relative;
height: 100%;
width: 100%;
grid-column: span 2;
min-height: 25rem;
z-index: 50;
display: flex;
align-items: center;
text-decoration: none;
}
@media (min-width: 768px) {
.cta-link {
grid-column: 3 / span 2;
}
}
@media (min-width: 1024px) {
.cta-link {
grid-column: 9 / span 5;
}
}
.tile-item {
position: absolute;
height: 100%;
width: 100%;
display: flex;
flex-direction: column-reverse;
align-items: center;
justify-content: center;
gap: 2.5rem;
border-radius: 0.125rem;
/* border-bottom: 4px solid #312114; */
/* padding: 2.5rem; */
text-align: center;
transition: all 0.7s cubic-bezier(0.19, 1, 0.22, 1);
background-color: #B90808;
color: white;
max-width: 35rem;
max-height: 30rem;
}
/* @media (min-width: 1024px) {
.tile-item {
border-radius: 0.375rem;
gap: 5rem;
}
} */
.tile-item:hover {
border-bottom: 0;
border-bottom-color: transparent;
}
.arrow-icon {
position: absolute;
right: 3vw;
top: 3vw;
width: 25px;
height: 25px;
transform: rotate(-45deg);
stroke: currentColor;
stroke-width: 2;
fill: none;
}
.icon-image {
height: 8rem;
width: 8rem;
max-height: 15rem;
max-width: 15rem;
}
.icon-image svg{
height: 30px;
width: 30px;
}
@media (min-width: 1024px) {
.icon-image {
height: 13vw;
width: 13vw;
}
}
.headline-xl {
font-family: serif;
font-size: clamp(2rem, 4vw, 3rem);
line-height: 1.2;
letter-spacing: -0.04em;
text-transform: uppercase;
max-width: 6em;
white-space: pre-wrap;
}
.text-large {
font-size: 1.125rem;
line-height: 1.2;
letter-spacing: -0.02em;
text-transform: uppercase;
font-weight: bold;
}
/* Cream overlay */
.cream-overlay {
position: absolute;
inset: 0;
z-index: 20;
background-color: #fff;
mix-blend-mode: multiply;
}
/* Text container */
.text-container {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
justify-content: center;
padding: 2rem 0;
transform: translateX(-1%);
}
@media (min-width: 768px) {
.text-container {
justify-content: center;
padding: 0;
}
}
.headline-5xl {
/* font-family: serif; */
font-family: var(--font-family-base);
font-size: clamp(4rem, 10vw, 20rem);
line-height: 0.88;
letter-spacing: -0.09em;
text-transform: uppercase;
white-space: nowrap;
width: 100vw;
font-weight: 700;
color: black;
transition: transform 0.1s ease-out;
}
/* Media frame */
.media-frame {
position: absolute;
inset: 0;
z-index: 10;
/* z-index: 999; */
grid-column: span 6;
height: 100%;
width: 100%;
mix-blend-mode: screen;
}
.media-content {
position: absolute;
inset: 0;
z-index: 20;
height: 100%;
width: 100%;
object-fit: cover;
}
.video-container {
position: absolute;
height: 100%;
width: 100%;
overflow: hidden;
}
.video-wrapper {
position: absolute;
z-index: -1;
width: 100%;
height: 120%;
transform: translateY(-10.79%);
}
.video-overlay {
position: absolute;
inset: 0;
z-index: 20;
height: 100%;
width: 100%;
background-color: black;
object-fit: cover;
opacity: 0.2;
}
.video-element {
position: absolute;
inset: 0;
z-index: 10;
height: 100%;
width: 100%;
object-fit: cover;
}
.fallback-image {
position: absolute;
inset: 0;
z-index: 0;
height: 100%;
width: 100%;
object-fit: cover;
}
/* Noise animation */
.noise {
position: absolute;
inset: 0;
height: 100%;
width: 100%;
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><defs><filter id="noise"><feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="4" stitchTiles="stitch"/><feColorMatrix type="saturate" values="0"/></filter></defs><rect width="100%" height="100%" filter="url(%23noise)" opacity="0.4"/></svg>');
opacity: 0.1;
pointer-events: none;
z-index: 9999;
background-repeat: repeat;
background-position: 0% 0%;
animation: noise 2s steps(3) infinite;
}
@keyframes noise {
0% { background-position: 0% 0%; }
33% { background-position: 11.67% 1%; }
66% { background-position: 23.33% 6%; }
100% { background-position: 35% 2%; }
}
/* Letter animation styles */
.letter {
display: inline-block;
position: relative;
}
</style>
<section class="cta-footer sm-pt-70px" id="cta-footer">
<a href="#" class="cta-link">
<div class="tile-item">
<svg class="arrow-icon" xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none">
<path stroke="currentColor" stroke-width="2" d="M.87 12.314h21.757m0 0L11.314 1m11.313 11.314L11.314 23.627"></path>
</svg>
<div class="icon-image" style="width: 8rem; height: 8rem; background: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: #8a2432;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57a1.02 1.02 0 00-1.02.24l-2.2 2.2a15.045 15.045 0 01-6.59-6.59l2.2-2.21a.96.96 0 00.25-1A11.36 11.36 0 018.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z"></path>
</svg>
</div>
<div style="display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem;">
<p class="headline-xl">Inquire Today</p>
</div>
<p class="text-large">Let's Talk</p>
</div>
</a>
<div class="cream-overlay"></div>
<div class="text-container">
<p class="headline-5xl" id="moments">
<span class="word" data-word="Moments">
<span class="letter" data-letter="M">M</span>
<span class="letter" data-letter="o">o</span>
<span class="letter" data-letter="m">m</span>
<span class="letter" data-letter="e">e</span>
<span class="letter" data-letter="n">n</span>
<span class="letter" data-letter="t">t</span>
<span class="letter" data-letter="s">s</span>
</span>
</p>
<p class="headline-5xl" id="start">
<span class="word" data-word="Start">
<span class="letter" data-letter="S">S</span>
<span class="letter" data-letter="t">t</span>
<span class="letter" data-letter="a">a</span>
<span class="letter" data-letter="r">r</span>
<span class="letter" data-letter="t">t</span>
</span>
</p>
<p class="headline-5xl" id="here">
<span class="word" data-word="Here">
<span class="letter" data-letter="H">H</span>
<span class="letter" data-letter="e">e</span>
<span class="letter" data-letter="r">r</span>
<span class="letter" data-letter="e">e</span>
</span>
</p>
</div>
<div class="media-frame">
<div class="media-content">
<div class="video-container">
<div class="video-wrapper">
<div style="position: absolute; inset: 0;">
<div class="video-overlay"></div>
<video class="video-element" autoplay loop muted playsinline>
<source src="./assets/images/Footer Peak 15s (1)--final.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<div style="position: absolute; inset: 0; z-index: 0; height: 100%; width: 100%;">
<img class="fallback-image" src="https://via.placeholder.com/1920x1080/333333/ffffff?text=Video+Background" alt="Background">
</div>
</div>
</div>
</div>
</div>
<div class="noise"></div>
</div>
</section>
<script>
function initScrollAnimation() {
const section = document.getElementById('cta-footer');
const headlines = document.querySelectorAll('.headline-5xl');
function updateTextPosition() {
const rect = section.getBoundingClientRect();
const windowHeight = window.innerHeight;
const sectionHeight = rect.height;
// Calculate scroll progress through the section
let scrollProgress = 0;
if (rect.top <= windowHeight && rect.bottom >= 0) {
const visibleTop = Math.max(0, windowHeight - rect.top);
const visibleHeight = Math.min(visibleTop, sectionHeight);
scrollProgress = visibleHeight / sectionHeight;
}
// Calculate translateX based on scroll progress
// Start at 0% and move to 20.4135% as example
const maxTranslateX = 20.4135;
const translateX = scrollProgress * maxTranslateX;
headlines.forEach((headline) => {
headline.style.transform = `translateX(${translateX}%) translateY(0em) scale(1) translateZ(0px)`;
headline.style.opacity = '1';
});
}
// Throttled scroll handler
let ticking = false;
function handleScroll() {
if (!ticking) {
requestAnimationFrame(() => {
updateTextPosition();
ticking = false;
});
ticking = true;
}
}
// Initialize and add event listener
updateTextPosition();
window.addEventListener('scroll', handleScroll, { passive: true });
window.addEventListener('resize', updateTextPosition);
}
// Initialize when DOM is loaded
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initScrollAnimation);
} else {
initScrollAnimation();
}
</script>
</div>
</main>
<!-- Footer -->
<!-- Footer -->
<footer class="footer style1 bg-image-2 footer__common footer-area before-shape" style="z-index: 0 !important;">
<div class="footer-top">
<div class="container">
<div class="footer--inner">
<div class=" widget-left-area">
<div class="widget-left-title">
<h3>@inforkmedia.com</h3>
</div>
<div class="wptb-instagram--gallery ">
<div class="wptb-item--inner d-flex align-items-center justify-content-center flex-wrap flex-md-nowrap">
<div class="wptb-item">
<div class="wptb-item--image2">
<img src="assets/images/NEW_IMAGE/Rk-insta-01.png" alt="img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image2">
<img src="assets/images/NEW_IMAGE/Rk-insta-02.png" alt="img">
</div>
</div>
<div class="wptb-item">
<div class="wptb-item--image2">
<img src="assets/images/NEW_IMAGE/Rk-insta-03.png" alt="img">
</div>
</div>
</div>
<div class="wptb-item--button">
<a class="btn btn-two" href="#" style="background: none !important;">
<span class="btn-wrap">
<span class="text-first" style="height: 50px;">Follow Us on Instagram</span>
<span class="text-second"> <i class="bi bi-instagram"></i> <i class="bi bi-instagram"></i> </span>
</span>
</a>
</div>
</div>
</div>
<div class="">
<div class=" footer-center-block mb-5 mb-md-0 order-1 order-md-0">
<div class="footer-widget ">
<div class="logo mr-bottom-20">
<!-- <a href="#" class=""><img src="./assets/img/logo.svg" alt="logo"></a> -->
<a href="#" class="" style="color: #FFF;font-family: var(--font-family-base);
font-size: 40px;">RK MEDIA</a>
</div>
<div class="hero-photostudio__info " style="display: block !important;">
<div class="mr-bottom-20 ">
<div class="wptb-item--inner ">
<div class="hero-photostudio__info2">
<span class="photo-text text-white">
<i class="fa-solid fa-circle"></i>
Lorem ipsum
</span>
</div>
</div>
</div>
</div>
<h6 class="widget-title">Sign up for all the latest <br> news and offers </h6>
<div class="col-md-12">
<div class="row">
<!-- <div class="col-md-3"></div> -->
<div class="col-md-12">
<form class="newsletter-form" method="post">
<div class="form-group">
<input type="email" name="email" class="form-control" placeholder="Enter your email" required>
</div>
<button type="submit" class="btn btn-two" style="border: 0 !important;">
<span class="btn-wrap">
<span class="text-first">Subscribe</span>
<span class="text-second"><i class="bi bi-arrow-up-right"></i> <i class="bi bi-arrow-up-right"></i></span>
</span>
</button>
</form>
</div>
<!-- <div class="col-md-3"></div> -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Footer Bottom Part -->
<div class="footer-bottom">
<div class="container">
<div class="footer-bottom-inner">
<div class="copyright">
<p >RK Media All Rights Reserved.Designed with <i class="fa fa-heart" style="color:red !important;"></i> by <a href="https://thedotstudios.com/" class=" text-primary-hover" target="_blank">TheDotStudios.com</a> </p>
</div>
<div class="social-box social-mb style-oval">
<ul>
<li><a href="#">Our Work</a></li>
<li><a href="#">Instagram</a></li>
<li><a href="#">Contact us</a></li>
</ul>
</div>
</div>
</div>
</div>
</footer>
<div class="totop">
<a href="#"><i class="bi bi-chevron-up"></i></a>
</div>
<!-- Core JS -->
<script src="./assets/js/jquery-3.6.0.min.js"></script>
<!-- Framework -->
<script src="./assets/js/bootstrap.min.js"></script>
<!-- WOW Scroll Effect -->
<script src="./plugins/wow/wow.min.js"></script>
<!-- Swiper Slider -->
<script src="./plugins/swiper/swiper-bundle.min.js"></script>
<script src="./plugins/swiper/swiper-gl.min.js"></script>
<!-- Odometer Counter -->
<!-- <script src="./plugins/odometer/appear.js"></script>
<script src="./plugins/odometer/odometer.js"></script> -->
<!-- Projects -->
<script src="./plugins/isotope/isotope.pkgd.min.js"></script>
<script src="./plugins/isotope/imagesloaded.pkgd.min.js"></script>
<script src="./plugins/isotope/tilt.jquery.js"></script>
<script src="./plugins/isotope/isotope-init.js"></script>
<!-- Fancybox -->
<!-- <script src="./plugins/fancybox/jquery.fancybox.min.js"></script> -->
<!-- Flatpickr -->
<!-- <script src="./plugins/flatpickr/flatpickr.min.js"></script> -->
<!-- Nice Select -->
<script src="./plugins/nice-select/jquery.nice-select.min.js"></script>
<script src="./assets/js/smooth-s.js"></script>
<!-- Cursor Effect -->
<script src="./plugins/cursor-effect/cursor-effect.js"></script>
<!-- Theme Custom JS -->
<script src="./assets/js/theme.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.2/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.1.1/owl.carousel.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/ScrollTrigger.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
function adjustSectionHeight() {
let section = document.querySelector(".overtext-area");
let stickySection = document.querySelector(".sticky-section");
if (section && stickySection) {
let sectionHeight = section.offsetHeight;
stickySection.style.height = `800px`;
}
}
// Run on load and on window resize
adjustSectionHeight();
window.addEventListener("resize", adjustSectionHeight);
});
document.addEventListener('DOMContentLoaded', function () {
const cards = document.querySelectorAll('.room-card');
const totalCards = cards.length;
// Configuration
const stackGap = 5; // px gap between stacked cards
const scrollSectionHeight = window.innerHeight * 0.7; // Each card appears every 70% of viewport height
const totalScrollHeight = scrollSectionHeight * (totalCards - 1); // Total scroll distance needed
// Dynamically set the container height based on the number of cards
const containerHeight = window.innerHeight + totalScrollHeight;
document.querySelector('.hotel-slider-container').style.height = `${containerHeight}px`;
// Get container's top position relative to page
let containerTop = document.querySelector('.hotel-slider-container').getBoundingClientRect().top + window.scrollY;
// Initial Setup: First card visible, others below
cards.forEach((card, index) => {
if (index === 0) {
card.style.transform = 'translateY(0) scale(1)';
card.style.zIndex = '1';
} else {
card.style.transform = `translateY(${window.innerHeight}px) scale(1)`;
card.style.zIndex = (index + 1).toString(); // Higher index means higher stacking order
}
});
window.addEventListener('scroll', function () {
const scrollY = window.scrollY;
const relativeScrollY = Math.max(0, scrollY - containerTop);
if (scrollY < containerTop) return;
// First card remains fully visible
cards[0].style.transform = `translateY(0) scale(1)`;
for (let i = 1; i < totalCards; i++) {
const card = cards[i];
// Define when each card starts appearing
const cardStartPoint = scrollSectionHeight * (i - 1);
const cardEndPoint = scrollSectionHeight * i;
if (relativeScrollY < cardStartPoint) {
// Card is below the viewport (hidden)
card.style.transform = `translateY(${window.innerHeight}px) scale(1)`;
} else if (relativeScrollY >= cardStartPoint && relativeScrollY <= cardEndPoint) {
// Card is in transition
const progress = (relativeScrollY - cardStartPoint) / scrollSectionHeight;
const easedProgress = easeOutQuad(progress);
const startY = window.innerHeight;
const endY = -(stackGap * i); // Uniform gap stacking
const currentY = startY - (startY - endY) * easedProgress;
card.style.transform = `translateY(${currentY}px) scale(1)`;
} else {
// Fully stacked above the previous card with equal gap
card.style.transform = `translateY(-${stackGap * i}px) scale(1)`;
}
}
});
// Smooth animation function
function easeOutQuad(x) {
return 1 - Math.pow(1 - x, 2);
}
// Update container and recalculate heights on window resize
window.addEventListener('resize', function () {
// Recalculate container height
const containerHeight = window.innerHeight + (window.innerHeight * 0.7) * (totalCards - 1);
document.querySelector('.hotel-slider-container').style.height = `${containerHeight}px`;
// Update container top position
containerTop = document.querySelector('.hotel-slider-container').getBoundingClientRect().top + window.scrollY;
});
// Trigger scroll event on load
window.dispatchEvent(new Event('scroll'));
});
</script>
<script>
// Accordion functionality
document.addEventListener('DOMContentLoaded', function() {
const accordionItems = document.querySelectorAll('.accordion-wrapper .item');
accordionItems.forEach(item => {
const title = item.querySelector('.title');
title.addEventListener('click', function() {
// Close all other items
accordionItems.forEach(otherItem => {
if (otherItem !== item) {
otherItem.classList.remove('active');
}
});
// Toggle current item
item.classList.toggle('active');
});
});
// Play button functionality (optional)
const playBtn = document.getElementById('playVideo');
const video = document.querySelector('video');
if (playBtn && video) {
playBtn.addEventListener('click', function() {
if (video.paused) {
video.play();
playBtn.style.opacity = '0';
} else {
video.pause();
playBtn.style.opacity = '1';
}
});
// Hide play button when video is playing
video.addEventListener('play', function() {
playBtn.style.opacity = '0';
});
video.addEventListener('pause', function() {
playBtn.style.opacity = '1';
});
}
});
</script>
<!-- Swiper JS -->
<script>
document.addEventListener('DOMContentLoaded', function() {
function initializeResortSlider() {
if (window.innerWidth >= 768) {
if (!window.resortSwiper) {
window.resortSwiper = new Swiper(".resort-swiper", {
slidesPerView: 3,
spaceBetween: 20,
loop: true,
speed: 1200,
autoplay: {
delay: 2000,
disableOnInteraction: false,
},
effect: "slide"
});
}
document.querySelector(".resort-slider-container").style.display = "block";
} else {
if (window.resortSwiper && window.resortSwiper.destroy) {
window.resortSwiper.destroy(true, true);
window.resortSwiper = null;
}
document.querySelector(".resort-slider-container").style.display = "none";
}
}
initializeResortSlider();
window.addEventListener("resize", initializeResortSlider);
});
</script>
<script>
document.addEventListener("DOMContentLoaded", () => {
const carouselWrapper = document.querySelector(".wedding-carousel-wrapper");
const stickyParent = document.querySelector(".sticky_parent");
// Get all carousel items
const carouselItems = document.querySelectorAll(".wedding-carousel-item");
const isMobile = () => window.innerWidth < 768;
const itemWidth = () => isMobile() ? 315 : 420; // 300px + 15px margin for mobile, 400px + 20px for desktop
// Calculate total scroll width
const getTotalScrollWidth = () => carouselItems.length * itemWidth();
let isScrolling = false;
let ticking = false;
function updateScroll() {
if (!ticking) {
requestAnimationFrame(() => {
const stickyRect = stickyParent.getBoundingClientRect();
const stickyStart = Math.max(0, -stickyRect.top);
const stickyHeight = stickyParent.offsetHeight - window.innerHeight;
// Calculate scroll progress (0 to 1)
const scrollProgress = Math.min(1, stickyStart / stickyHeight);
// Calculate maximum scroll distance
const maxScrollDistance = getTotalScrollWidth() - window.innerWidth + (isMobile() ? 50 : 100);
// Direct linear mapping - no smoothing to prevent glitches
const targetPosition = scrollProgress * maxScrollDistance;
// Apply transform directly
carouselWrapper.style.transform = `translateX(${-targetPosition}px)`;
ticking = false;
});
ticking = true;
}
}
function updateStickyParentHeight() {
if (isMobile()) {
stickyParent.style.height = "3000px";
} else {
stickyParent.style.height = "2500px";
}
}
// Throttled scroll event
let scrollTimeout;
function handleScroll() {
isScrolling = true;
clearTimeout(scrollTimeout);
updateScroll();
scrollTimeout = setTimeout(() => {
isScrolling = false;
}, 100);
}
// Initial setup
updateStickyParentHeight();
carouselWrapper.style.width = `${getTotalScrollWidth()}px`;
// Add scroll listener
window.addEventListener("scroll", handleScroll, { passive: true });
// Handle window resize
let resizeTimeout;
window.addEventListener("resize", () => {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => {
// Reset and recalculate
carouselWrapper.style.transform = 'translateX(0)';
updateStickyParentHeight();
carouselWrapper.style.width = `${getTotalScrollWidth()}px`;
updateScroll();
}, 250);
});
// Initial scroll update
updateScroll();
});
</script>
<script>
let currentSlide = 2; // Start with slide index 2 as active (matching original)
const slides = document.querySelectorAll('.cycle-slide');
const totalSlides = slides.length;
function changeSlide() {
// Remove active class from current slide
slides.forEach(slide => {
slide.classList.remove('cycle-slide-active');
});
// Move to next slide
currentSlide = (currentSlide + 1) % totalSlides;
// Add active class to new current slide
slides[currentSlide].classList.add('cycle-slide-active');
}
// Auto-slide every 3 seconds
setInterval(changeSlide, 3000);
</script>
<script>
// Add this JavaScript to your page
document.addEventListener('DOMContentLoaded', function() {
// Get the section element
const section = document.querySelector('.bg-black');
// Initial colors (dark theme)
const initialColors = {
backgroundColor: '#151515',
textColor: '#ffffff',
borderColor: '#333333',
filterValue: 'invert(1)'
};
// Target colors (light theme)
const targetColors = {
backgroundColor: '#f5f5f5',
textColor: '#151515',
borderColor: '#dad7d7',
filterValue: 'invert(0)'
};
// Function to handle scroll events
function handleScroll() {
// Get the section's position relative to the viewport
const rect = section.getBoundingClientRect();
const windowHeight = window.innerHeight;
// Calculate how far the section is into the viewport (as a percentage)
let scrollPercentage = 0;
// Start the transition when the section enters the viewport
if (rect.top < windowHeight && rect.bottom > 0) {
// Calculate progress based on section position
const startPoint = windowHeight / 3; // Start transition when section is 1/3 into viewport
const endPoint = -100; // End transition when section has moved up 100px past the top
if (rect.top <= endPoint) {
scrollPercentage = 1; // Fully transitioned to light theme
} else if (rect.top <= startPoint) {
scrollPercentage = (startPoint - rect.top) / (startPoint - endPoint);
}
// Apply the transition with easing
applyColorTransition(scrollPercentage);
}
}
// Function to apply color transition
function applyColorTransition(percentage) {
// Apply easing function for smoother transition
percentage = easeInOutCubic(percentage);
// Interpolate between initial and target colors
const backgroundColor = interpolateColor(initialColors.backgroundColor, targetColors.backgroundColor, percentage);
const textColor = interpolateColor(initialColors.textColor, targetColors.textColor, percentage);
const borderColor = interpolateColor(initialColors.borderColor, targetColors.borderColor, percentage);
const filterValue = interpolateFilter(initialColors.filterValue, targetColors.filterValue, percentage);
// Method 1: Use inline style with !important to override the CSS
// This is more aggressive but necessary to override !important CSS rules
section.setAttribute('style', `background-color: ${backgroundColor} !important; transition: background-color 0.4s ease !important;`);
// Class toggle method - toggle between classes based on percentage
if (percentage > 0.5) {
// If we're more than halfway through the transition, change the class
section.classList.remove('bg-black');
section.classList.add('bg-gray');
} else {
section.classList.remove('bg-gray');
section.classList.add('bg-black');
}
const logoWrappers = section.querySelectorAll('.client-logo-wrapper');
if (percentage > 0.5) {
logoWrappers.forEach(wrapper => {
wrapper.style.filter = 'invert(0)';
});
} else {
logoWrappers.forEach(wrapper => {
wrapper.style.filter = 'invert(1)';
});
}
// Update text colors
const titles = section.querySelectorAll('.project-title, .project-year, .photo-text');
titles.forEach(element => {
element.setAttribute('style', `color: ${textColor} !important; transition: color 0.4s ease !important;`);
});
// Update border colors
const cards = section.querySelectorAll('.project-card');
cards.forEach(card => {
card.setAttribute('style', `border-color: ${borderColor} !important; transition: border-color 0.4s ease !important;`);
});
// Update photo-text border
const photoText = section.querySelector('.photo-text');
if (photoText) {
photoText.setAttribute('style', `color: ${textColor} !important; border-color: ${textColor} !important; transition: all 0.4s ease !important;`);
}
// Update filter on client logo wrappers
// const logoWrappers = section.querySelectorAll('.client-logo-wrapper');
// logoWrappers.forEach(wrapper => {
// wrapper.setAttribute('style', `filter: ${filterValue} !important; transition: filter 0.4s ease !important;`);
// });
// Update main title color
const mainTitle = section.querySelector('.wptb-item--title');
if (mainTitle) {
// Transition from white to dark
const titleColor = interpolateColor('#ffffff', '#151515', percentage);
mainTitle.setAttribute('style', `color: ${titleColor} !important; transition: color 0.4s ease !important;`);
}
}
// Color interpolation function
function interpolateColor(color1, color2, percentage) {
// Handle hex colors
if (color1.startsWith('#') && color2.startsWith('#')) {
// Convert hex to RGB
const r1 = parseInt(color1.substring(1, 3), 16);
const g1 = parseInt(color1.substring(3, 5), 16);
const b1 = parseInt(color1.substring(5, 7), 16);
const r2 = parseInt(color2.substring(1, 3), 16);
const g2 = parseInt(color2.substring(3, 5), 16);
const b2 = parseInt(color2.substring(5, 7), 16);
// Interpolate RGB values
const r = Math.round(r1 + (r2 - r1) * percentage);
const g = Math.round(g1 + (g2 - g1) * percentage);
const b = Math.round(b1 + (b2 - b1) * percentage);
// Convert back to hex
return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
}
return percentage >= 0.5 ? color2 : color1;
}
// Add this new interpolation function for filter values
function interpolateFilter(filter1, filter2, percentage) {
// Extract numeric values from filter strings
const value1 = parseFloat(filter1.match(/[\d.]+/)[0]);
const value2 = parseFloat(filter2.match(/[\d.]+/)[0]);
// Interpolate between the values
const interpolatedValue = value1 + (value2 - value1) * percentage;
// Return the complete filter string
return `invert(${interpolatedValue})`;
}
// Easing function for smoother transition
function easeInOutCubic(x) {
return x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2;
}
// Add scroll event listener
window.addEventListener('scroll', handleScroll);
// Initialize colors on page load
handleScroll();
// Make sure CSS for bg-gray exists
if (!document.getElementById('dynamic-styles')) {
const styleElement = document.createElement('style');
styleElement.id = 'dynamic-styles';
styleElement.innerHTML = `
.bg-gray {
--bs-bg-opacity: 1;
background-color: #f5f5f5 !important;
}
`;
document.head.appendChild(styleElement);
}
});
</script>
<script>
// Get DOM elements
const steps = document.querySelectorAll('.step');
const navItems = document.querySelectorAll('.nav-item');
const howItWorksSection = document.getElementById('howItWorks');
// Function to show specific step
function showStep(index) {
// Hide all steps
steps.forEach(step => {
step.classList.remove('active');
});
// Show the selected step
if (steps[index]) {
steps[index].classList.add('active');
}
// Update nav active state
navItems.forEach(nav => nav.classList.remove('active'));
if (navItems[index]) {
navItems[index].classList.add('active');
}
}
// Add click event listeners to navigation items
navItems.forEach((item, index) => {
item.addEventListener('click', (e) => {
e.preventDefault();
showStep(index);
});
});
// Background color animation - simple black to white transition
const backgroundObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting && entry.intersectionRatio > 0.1) {
// Add inverted class for white background and black text
entry.target.classList.add('inverted');
} else if (!entry.isIntersecting) {
// Remove inverted class to return to black background
entry.target.classList.remove('inverted');
}
});
}, {
threshold: [0, 0.1, 0.5, 1],
rootMargin: '0px 0px -20% 0px'
});
backgroundObserver.observe(howItWorksSection);
// Subtle parallax effect only for images
function updateParallax() {
const stepImages = document.querySelectorAll('.step-image img');
stepImages.forEach(image => {
const rect = image.getBoundingClientRect();
const windowHeight = window.innerHeight;
// Only apply parallax when image is in viewport
if (rect.bottom >= 0 && rect.top <= windowHeight) {
// Calculate parallax offset with much slower speed for subtle effect
const speed = 0.1; // Reduced from 0.5 to 0.1 for subtle movement
const yPos = -(rect.top * speed);
// Limit the movement range to prevent excessive displacement
const maxMovement = 30; // Maximum 30px movement
const clampedYPos = Math.max(-maxMovement, Math.min(maxMovement, yPos));
image.style.setProperty('--parallax-offset', `${clampedYPos}px`);
}
});
}
// Throttled scroll handler
let ticking = false;
function handleScroll() {
if (!ticking) {
requestAnimationFrame(() => {
updateParallax();
ticking = false;
});
ticking = true;
}
}
window.addEventListener('scroll', handleScroll);
// Initialize with first step
showStep(0);
updateParallax();
// Add smooth scrolling
document.documentElement.style.scrollBehavior = 'smooth';
// Optional: Auto-advance steps every 5 seconds (disabled by default)
let currentStepIndex = 0;
const autoAdvanceSteps = false; // Set to true if you want auto-advance
if (autoAdvanceSteps) {
setInterval(() => {
currentStepIndex = (currentStepIndex + 1) % steps.length;
showStep(currentStepIndex);
}, 5000);
}
</script>
<script>
// Intersection Observer for viewport detection
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, index) => {
if (entry.isIntersecting) {
// Add a small delay for staggered effect
setTimeout(() => {
entry.target.classList.add('animate');
}, index * 100);
// Stop observing once animated
observer.unobserve(entry.target);
}
});
}, observerOptions);
// Observe all gallery items
document.addEventListener('DOMContentLoaded', () => {
const galleryItems = document.querySelectorAll('.gallery-item');
galleryItems.forEach(item => {
observer.observe(item);
});
});
// Optional: Click handler for gallery items
document.querySelectorAll('.gallery-item').forEach(item => {
item.addEventListener('click', () => {
// You can add lightbox functionality here
console.log('Gallery item clicked!');
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const panels = document.querySelectorAll('.testimonial-panel');
const prevBtn = document.querySelector('.prev-btn');
const nextBtn = document.querySelector('.next-btn');
let currentPanel = 0;
const maxPanels = panels.length - 1;
function showPanel(panelIndex) {
// Hide all panels
panels.forEach(panel => {
panel.classList.remove('active');
});
// Show the current panel
panels[panelIndex].classList.add('active');
}
function goToPanel(panelIndex) {
if (panelIndex < 0) {
panelIndex = maxPanels;
} else if (panelIndex > maxPanels) {
panelIndex = 0;
}
currentPanel = panelIndex;
showPanel(currentPanel);
}
prevBtn.addEventListener('click', () => {
goToPanel(currentPanel - 1);
});
nextBtn.addEventListener('click', () => {
goToPanel(currentPanel + 1);
});
let panelInterval = setInterval(() => {
goToPanel(currentPanel + 1);
}, 6000);
panels.forEach(panel => {
panel.addEventListener('mouseenter', () => {
clearInterval(panelInterval);
});
panel.addEventListener('mouseleave', () => {
panelInterval = setInterval(() => {
goToPanel(currentPanel + 1);
}, 6000);
});
});
let touchStartX = 0;
let touchEndX = 0;
panels.forEach(panel => {
panel.addEventListener('touchstart', (e) => {
touchStartX = e.touches[0].clientX;
clearInterval(panelInterval);
}, false);
panel.addEventListener('touchend', (e) => {
touchEndX = e.changedTouches[0].clientX;
handleSwipe();
panelInterval = setInterval(() => {
goToPanel(currentPanel + 1);
}, 6000);
}, false);
});
function handleSwipe() {
if (touchEndX < touchStartX - 50) {
// Swipe left
goToPanel(currentPanel + 1);
}
if (touchEndX > touchStartX + 50) {
// Swipe right
goToPanel(currentPanel - 1);
}
}
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Select the section and elements we need to modify
const photoSection = document.querySelector('.bg-gray');
const photoTexts = document.querySelectorAll('.photo-text1');
const title = document.querySelector('.wptb-item--title');
const paragraph = document.querySelector('.wptb-item--inner p');
const buttons = document.querySelectorAll('.common-btn');
const contactBar = document.querySelector('.contact-bar');
const contactMessage = document.querySelector('.contact-message');
const phoneNumber = document.querySelector('.phone-number');
// Create a background div to handle the transition
const backgroundDiv = document.createElement('div');
backgroundDiv.className = 'section-background';
photoSection.prepend(backgroundDiv);
// Add transition classes to the section
photoSection.classList.add('transition-section');
// Add CSS for transitions
const styleElement = document.createElement('style');
styleElement.textContent = `
/* Base styles for transition */
.transition-section {
position: relative;
}
.section-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #f5f5f5;
transition: background-color 0.6s ease;
z-index: 0;
}
/* Content positioning */
.transition-section .container-fluid,
.transition-section .hero-photostudio__slider,
.transition-section .contact-bar-container {
position: relative;
z-index: 1;
}
/* Text transition styles */
.text-transition {
transition: color 0.6s ease, border-color 0.6s ease !important;
}
/* Button transition styles */
.button-transition {
transition: background-color 0.6s ease, color 0.6s ease !important;
}
/* Contact bar transition styles */
.contact-bar {
transition: background-color 0.6s ease !important;
}
/* Dark theme class for when scrolled */
.dark-theme .hero-photostudio__info1 .photo-text1 {
border-color: #ffffff !important;
color: #ffffff !important;
}
.dark-theme .wptb-item--inner .wptb-item--title {
color: #ffffff !important;
}
.dark-theme .wptb-item--inner p {
color: #cccccc !important;
}
.dark-theme .common-btn {
background-color: #ffffff !important;
color: #000000 !important;
}
/* Contact bar color changes */
.dark-theme .contact-bar {
background-color: #ffffff !important;
}
.dark-theme .contact-message,
.dark-theme .phone-number {
color: #151515 !important;
}
/* Preserve the red color for the circle icon */
.hero-photostudio__info1 .photo-text1 i.fa-circle {
color: #b90808 !important;
}
`;
document.head.appendChild(styleElement);
// Add transition classes to elements
photoTexts.forEach(text => text.classList.add('text-transition'));
if (title) title.classList.add('text-transition');
if (paragraph) paragraph.classList.add('text-transition');
buttons.forEach(button => button.classList.add('button-transition'));
if (contactMessage) contactMessage.classList.add('text-transition');
if (phoneNumber) phoneNumber.classList.add('text-transition');
// Function to calculate scroll progress
function getScrollProgress(element) {
const rect = element.getBoundingClientRect();
const windowHeight = window.innerHeight || document.documentElement.clientHeight;
// Start transition when element enters viewport
const startPoint = windowHeight;
// Complete transition when element reaches 20% from top of viewport
const endPoint = windowHeight * 0.8;
if (rect.top >= startPoint) {
return 0; // Not started
} else if (rect.top <= endPoint) {
return 1; // Completed
} else {
// Calculate progress between 0 and 1
return (startPoint - rect.top) / (startPoint - endPoint);
}
}
// Function to update colors based on scroll progress
function updateColors(progress) {
// Background color transition from gray (#f5f5f5) to black (#151515)
const r = Math.floor(245 - (245 - 21) * progress);
const g = Math.floor(245 - (245 - 21) * progress);
const b = Math.floor(245 - (245 - 21) * progress);
backgroundDiv.style.backgroundColor = `rgb(${r}, ${g}, ${b})`;
// Apply dark theme class when transition is nearly complete
if (progress >= 0.95) {
photoSection.classList.add('dark-theme');
} else if (progress < 0.95) {
photoSection.classList.remove('dark-theme');
}
// For smoother transition, apply direct styles during transition
if (progress > 0 && progress < 0.95) {
// Text color transition (dark to light)
const textR = Math.floor(21 + (255 - 21) * progress);
const textG = Math.floor(21 + (255 - 21) * progress);
const textB = Math.floor(21 + (255 - 21) * progress);
const textColor = `rgb(${textR}, ${textG}, ${textB})`;
// Paragraph color transition (gray to light gray)
const paragraphR = Math.floor(88 + (204 - 88) * progress);
const paragraphG = Math.floor(88 + (204 - 88) * progress);
const paragraphB = Math.floor(88 + (204 - 88) * progress);
const paragraphColor = `rgb(${paragraphR}, ${paragraphG}, ${paragraphB})`;
// Button background transition (dark to light)
const buttonBgR = Math.floor(51 + (255 - 51) * progress);
const buttonBgG = Math.floor(51 + (255 - 51) * progress);
const buttonBgB = Math.floor(51 + (255 - 51) * progress);
const buttonBgColor = `rgb(${buttonBgR}, ${buttonBgG}, ${buttonBgB})`;
// Button text transition (light to dark)
const buttonTextR = Math.floor(255 - (255) * progress);
const buttonTextG = Math.floor(255 - (255) * progress);
const buttonTextB = Math.floor(255 - (255) * progress);
const buttonTextColor = `rgb(${buttonTextR}, ${buttonTextG}, ${buttonTextB})`;
// Contact bar background transition (dark to light)
const contactBgR = Math.floor(21 + (255 - 21) * progress);
const contactBgG = Math.floor(21 + (255 - 21) * progress);
const contactBgB = Math.floor(21 + (255 - 21) * progress);
const contactBgColor = `rgb(${contactBgR}, ${contactBgG}, ${contactBgB})`;
// Contact text transition (light to dark)
const contactTextR = Math.floor(255 - (255) * progress);
const contactTextG = Math.floor(255 - (255) * progress);
const contactTextB = Math.floor(255 - (255) * progress);
const contactTextColor = `rgb(${contactTextR}, ${contactTextG}, ${contactTextB})`;
// Apply styles
photoTexts.forEach(text => {
text.style.setProperty('color', textColor, 'important');
text.style.setProperty('border-color', textColor, 'important');
});
if (title) title.style.setProperty('color', textColor, 'important');
if (paragraph) paragraph.style.setProperty('color', paragraphColor, 'important');
buttons.forEach(button => {
button.style.setProperty('background-color', buttonBgColor, 'important');
button.style.setProperty('color', buttonTextColor, 'important');
});
if (contactBar) contactBar.style.setProperty('background-color', contactBgColor, 'important');
if (contactMessage) contactMessage.style.setProperty('color', contactTextColor, 'important');
if (phoneNumber) phoneNumber.style.setProperty('color', contactTextColor, 'important');
}
}
// Listen for scroll events
window.addEventListener('scroll', function() {
const progress = getScrollProgress(photoSection);
updateColors(progress);
});
// Initial check on page load
setTimeout(function() {
const initialProgress = getScrollProgress(photoSection);
updateColors(initialProgress);
}, 1000);
});
</script>
</body>
</html>