inital commit
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,65 @@
|
||||
@media only screen and (max-width : 2500px) {
|
||||
.page-wrapper{
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 1200px) and (max-width: 1399px){
|
||||
.stat-number {
|
||||
font-size: 3rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:44px;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 992px) and (max-width: 1199px){
|
||||
.stat-number {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:44px;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width : 1199px) {
|
||||
.mt-xl-40{
|
||||
margin-top:40px;
|
||||
}
|
||||
.mb-xl-40{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width : 991px) {
|
||||
.mt-lg-40{
|
||||
margin-top:40px;
|
||||
}
|
||||
.mb-lg-40{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
.stat-number {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:36px;
|
||||
letter-spacing:0;
|
||||
line-height:1.3;
|
||||
}
|
||||
|
||||
}
|
||||
@media only screen and (max-width: 767px) {
|
||||
|
||||
.mt-lg-40{
|
||||
margin-top:25px;
|
||||
}
|
||||
.mb-lg-40{
|
||||
margin-bottom:25px;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 320px) and (max-width: 575px){
|
||||
.faq-question {
|
||||
font-size: 1.2rem ! important;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}
|
||||
/*# sourceMappingURL=slick.min.css.map */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+5
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,255 @@
|
||||
/*
|
||||
|-----------------------------------------------------
|
||||
| Template Name: NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template
|
||||
| Developer: Themesfamily
|
||||
| Version: 1.0.0
|
||||
|-----------------------------------------------------
|
||||
*/
|
||||
/***************************************************
|
||||
==================== JS ======================
|
||||
****************************************************
|
||||
00. Configuration Check
|
||||
01. GSAP Plugin Registration
|
||||
02. LENIS SMOOTH SCROLLING
|
||||
03. TEAM Social Icon Toggle
|
||||
04. GSAP Custom Cursor Implementation
|
||||
05. GSAP Text Split Animation
|
||||
06. GSAP Image Spread / Reveal Animation
|
||||
07. GSAP 3D Scale and Fade Animation
|
||||
08. GSAP Dynamic Fade-In Animations (General)
|
||||
09. GSAP Parallax Zoom Animation
|
||||
10. MAIN INITIALIZATION FUNCTION
|
||||
****************************************************/
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
// 00. Configuration Check
|
||||
if (typeof gsap === 'undefined' || typeof jQuery === 'undefined' || typeof Lenis === 'undefined') {
|
||||
console.error("Required libraries (GSAP, jQuery, or Lenis) are not loaded. Skipping all animations.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 01. GSAP Plugin Registration
|
||||
if (typeof SplitText !== 'undefined' && typeof ScrollTrigger !== 'undefined') {
|
||||
gsap.registerPlugin(ScrollTrigger, SplitText);
|
||||
} else {
|
||||
console.warn("GSAP plugins (SplitText or ScrollTrigger) are not loaded. Some animations may be skipped.");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 02. LENIS SMOOTH SCROLLING
|
||||
// ----------------------------------------------------------------------------------
|
||||
new Lenis({
|
||||
autoRaf: true
|
||||
});
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 05. GSAP Text Split Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initSplitTextAnimations() {
|
||||
const st = $(".split-content");
|
||||
if (st.length > 0 && typeof SplitText !== 'undefined') {
|
||||
st.each(function (index, el) {
|
||||
el.split = new SplitText(el, {
|
||||
type: "lines,words,chars",
|
||||
linesClass: "atf-split-line",
|
||||
});
|
||||
|
||||
// Set initial position based on class (end, start, up, down)
|
||||
let initialProps = { opacity: 0 };
|
||||
if ($(el).hasClass("end")) initialProps.x = "50";
|
||||
else if ($(el).hasClass("start")) initialProps.x = "-50";
|
||||
else if ($(el).hasClass("up")) initialProps.y = "80";
|
||||
else if ($(el).hasClass("down")) initialProps.y = "-80";
|
||||
|
||||
gsap.set(el.split.chars, initialProps);
|
||||
gsap.set(el, { perspective: 400 });
|
||||
|
||||
// Create ScrollTrigger animation timeline
|
||||
gsap.to(el.split.chars, {
|
||||
scrollTrigger: {
|
||||
trigger: el,
|
||||
start: "top 85%",
|
||||
end: "bottom 65%",
|
||||
scrub: 1,
|
||||
},
|
||||
x: "0",
|
||||
y: "0",
|
||||
rotateX: "0",
|
||||
scale: 1,
|
||||
opacity: 1,
|
||||
autoAlpha: 1,
|
||||
duration: 1,
|
||||
ease: 'power2.out',
|
||||
stagger: 0.03,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 06. GSAP Image Spread / Reveal Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initImageSpreadAnimations() {
|
||||
document.querySelectorAll(".spread").forEach((container) => {
|
||||
let image = container.querySelector("img");
|
||||
if (!image) return;
|
||||
|
||||
let tl = gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: container,
|
||||
toggleActions: "play none none none",
|
||||
},
|
||||
});
|
||||
|
||||
tl.set(container, { autoAlpha: 1 });
|
||||
|
||||
if (container.classList.contains("zoom-out")) {
|
||||
tl.from(image, { duration: 1.5, scale: 1.4, ease: "power2.out" });
|
||||
} else if (container.classList.contains("start") || container.classList.contains("end")) {
|
||||
let xPercent = container.classList.contains("start") ? -100 : 100;
|
||||
|
||||
tl.from(container, {
|
||||
duration: 1.5,
|
||||
xPercent,
|
||||
ease: Power2.out,
|
||||
});
|
||||
tl.from(image, {
|
||||
duration: 1.5,
|
||||
xPercent: -xPercent,
|
||||
scale: 1,
|
||||
delay: -1.5,
|
||||
ease: Power2.out,
|
||||
});
|
||||
}
|
||||
else if (container.classList.contains("up") || container.classList.contains("down")) {
|
||||
let yPercent = container.classList.contains("up") ? 100 : -100;
|
||||
|
||||
tl.from(container, {
|
||||
duration: 1.5,
|
||||
yPercent,
|
||||
ease: Power2.out,
|
||||
});
|
||||
tl.from(image, {
|
||||
duration: 1.5,
|
||||
yPercent: -yPercent,
|
||||
scale: 1,
|
||||
delay: -1.5,
|
||||
ease: Power2.out,
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 07. GSAP 3D Scale and Fade Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initScale3DAnimations() {
|
||||
gsap.utils.toArray(".item-3d").forEach((el) => {
|
||||
// Initial 3D transform set
|
||||
gsap.set(el, {
|
||||
opacity: 0.7,
|
||||
transform: "perspective(2500px) translate3d(0,0,0) rotateX(90deg) scale(0.5)",
|
||||
});
|
||||
|
||||
// ScrollTrigger timeline to reveal 3D item
|
||||
gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: el,
|
||||
start: "top bottom+=50",
|
||||
end: "bottom center",
|
||||
scrub: 2,
|
||||
},
|
||||
}).to(el, {
|
||||
scale: 1,
|
||||
rotateX: 0,
|
||||
opacity: 1,
|
||||
duration: 1.3,
|
||||
ease: "power2.out",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 08. GSAP Dynamic Fade-In Animations (General)
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initDynamicFadeAnimations() {
|
||||
[
|
||||
".fadeInUp", ".fadeInLeft", ".fadeInRight", ".zoomIn", ".zoomOut", ".bounceIn"
|
||||
].forEach((selector) => {
|
||||
gsap.utils.toArray(selector).forEach((el) => {
|
||||
let offset = el.getAttribute("data-fade-offset") || 40;
|
||||
let duration = el.getAttribute("data-duration") || 0.8;
|
||||
let from = el.getAttribute("data-fade-from") || (
|
||||
selector === ".fadeInLeft" ? "left" :
|
||||
selector === ".fadeInRight" ? "right" :
|
||||
selector.includes("zoom") || selector === ".bounceIn" ? "center" :
|
||||
"bottom"
|
||||
);
|
||||
let onScroll = el.getAttribute("data-on-scroll") || 1;
|
||||
let delay = el.getAttribute("data-delay") || 0.15;
|
||||
|
||||
let props = {
|
||||
opacity: 0,
|
||||
duration,
|
||||
delay,
|
||||
ease: el.getAttribute("data-ease") || (
|
||||
selector === ".bounceIn" ? "bounce.out" : "power2.out"
|
||||
),
|
||||
x: from === "left" ? -offset : from === "right" ? offset : 0,
|
||||
y: from === "top" ? -offset : from === "bottom" ? offset : 0,
|
||||
scale: selector === ".zoomIn" ? 0.5 : selector === ".zoomOut" ? 1.5 : 1,
|
||||
};
|
||||
|
||||
// Add ScrollTrigger if onScroll is enabled
|
||||
if (onScroll == 1) {
|
||||
props.scrollTrigger = { trigger: el, start: "top 85%" };
|
||||
}
|
||||
|
||||
gsap.from(el, props);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 09. GSAP Parallax Zoom Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initParallaxZoom() {
|
||||
document.querySelectorAll(".item-up-image").forEach((wrap) => {
|
||||
gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: wrap,
|
||||
start: "top center",
|
||||
end: "bottom center",
|
||||
scrub: 1,
|
||||
},
|
||||
}).to(wrap.querySelector(".item-up"), {
|
||||
scale: 1.10,
|
||||
duration: 1,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 10. MAIN INITIALIZATION FUNCTION
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initAllScripts() {
|
||||
// Initialize all DOM-dependent functions
|
||||
initSplitTextAnimations();
|
||||
initImageSpreadAnimations();
|
||||
initScale3DAnimations();
|
||||
initDynamicFadeAnimations();
|
||||
initParallaxZoom();
|
||||
|
||||
console.log("All NeuralSync animations initialized successfully.");
|
||||
}
|
||||
|
||||
// Execute the main function (assuming script is placed before </body>)
|
||||
initAllScripts();
|
||||
|
||||
|
||||
|
||||
|
||||
})(jQuery);
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,238 @@
|
||||
/* =====================================================
|
||||
NovaAI - Premium Template Script
|
||||
Clean | Optimized | Reviewer Ready
|
||||
===================================================== */
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
/* ===============================
|
||||
Helper: Safe Query Selector
|
||||
=============================== */
|
||||
const $select = (selector) => document.querySelector(selector);
|
||||
const $selectAll = (selector) => document.querySelectorAll(selector);
|
||||
|
||||
/* ===============================
|
||||
Sticky Navbar + Scroll Top
|
||||
=============================== */
|
||||
const navbar = $select('.navbar');
|
||||
const scrollTopBtn = $select('.scroll-top');
|
||||
|
||||
window.addEventListener('scroll', function () {
|
||||
|
||||
// Sticky Navbar
|
||||
if (navbar) {
|
||||
if (window.scrollY > 50) {
|
||||
navbar.classList.add('scrolled');
|
||||
} else {
|
||||
navbar.classList.remove('scrolled');
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll Top Button Visibility
|
||||
if (scrollTopBtn) {
|
||||
if (window.scrollY > 300) {
|
||||
scrollTopBtn.classList.add('visible');
|
||||
} else {
|
||||
scrollTopBtn.classList.remove('visible');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Scroll To Top Click
|
||||
if (scrollTopBtn) {
|
||||
scrollTopBtn.addEventListener('click', function () {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Preloader
|
||||
=============================== */
|
||||
$(window).on("load", function () {
|
||||
$(".status").fadeOut();
|
||||
$(".preloader").delay(300).fadeOut("slow");
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Smooth Scroll (Anchor Links)
|
||||
=============================== */
|
||||
$selectAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener('click', function (e) {
|
||||
|
||||
const targetID = this.getAttribute('href');
|
||||
|
||||
if (targetID.length > 1) {
|
||||
const target = $select(targetID);
|
||||
|
||||
if (target) {
|
||||
e.preventDefault();
|
||||
target.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'start'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Fade In Animation (IntersectionObserver)
|
||||
=============================== */
|
||||
const fadeElements = $selectAll('.fade-in');
|
||||
|
||||
if (fadeElements.length) {
|
||||
const fadeObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.classList.add('visible');
|
||||
fadeObserver.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: 0.15
|
||||
});
|
||||
|
||||
fadeElements.forEach(el => fadeObserver.observe(el));
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
FAQ Toggle
|
||||
=============================== */
|
||||
$selectAll('.faq-question').forEach(question => {
|
||||
question.addEventListener('click', function () {
|
||||
|
||||
const answer = this.nextElementSibling;
|
||||
const icon = this.querySelector('i');
|
||||
|
||||
if (!answer) return;
|
||||
|
||||
// Close others
|
||||
$selectAll('.faq-answer').forEach(item => {
|
||||
if (item !== answer) {
|
||||
item.classList.remove('active');
|
||||
}
|
||||
});
|
||||
|
||||
$selectAll('.faq-question i').forEach(i => {
|
||||
if (i !== icon) {
|
||||
i.classList.remove('bi-chevron-up');
|
||||
i.classList.add('bi-chevron-down');
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle current
|
||||
answer.classList.toggle('active');
|
||||
|
||||
if (icon) {
|
||||
icon.classList.toggle('bi-chevron-up');
|
||||
icon.classList.toggle('bi-chevron-down');
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Newsletter Form
|
||||
=============================== */
|
||||
const newsletterForm = $select('.newsletter-form');
|
||||
|
||||
if (newsletterForm) {
|
||||
newsletterForm.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
const emailInput = this.querySelector('input[type="email"]');
|
||||
if (!emailInput) return;
|
||||
|
||||
alert("Thank you! We'll keep you updated.");
|
||||
this.reset();
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Contact Form
|
||||
=============================== */
|
||||
const contactForm = $select('.contact-form');
|
||||
|
||||
if (contactForm) {
|
||||
contactForm.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
alert("Message sent successfully!");
|
||||
this.reset();
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Close Mobile Menu on Link Click
|
||||
=============================== */
|
||||
$selectAll('.navbar-nav .nav-link').forEach(link => {
|
||||
link.addEventListener('click', () => {
|
||||
const navbarCollapse = $select('.navbar-collapse');
|
||||
if (navbarCollapse && navbarCollapse.classList.contains('show')) {
|
||||
const bsCollapse = new bootstrap.Collapse(navbarCollapse);
|
||||
bsCollapse.hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
/*--------------------------------------------------------------
|
||||
START counter JS
|
||||
--------------------------------------------------------------*/
|
||||
$('.counter-value').counterUp({
|
||||
delay: 10,
|
||||
time: 1000
|
||||
});
|
||||
|
||||
/*Start Blog Design*/
|
||||
$('.atf_client-slider').slick({
|
||||
arrows: true,
|
||||
dots: false,
|
||||
infinite: true,
|
||||
speed: 300,
|
||||
slidesToShow: 3,
|
||||
slidesToScroll: 1,
|
||||
prevArrow: '<a class="slick-prev"><i class="fa-light fa-arrow-left" alt="Arrow Icon"></i></a>',
|
||||
nextArrow: '<a class="slick-next"><i class="fa-light fa-arrow-right" alt="Arrow Icon"></i></a>',
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1200,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 992,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 580,
|
||||
settings: {
|
||||
arrows: false,
|
||||
dots: true,
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user