diff --git a/.gitignore b/.gitignore index 5ef6a52..486d912 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# Local backups of pre-optimized GLB source models (not served) +.glb-originals/ diff --git a/public/css/all-inlined-head-styles.css b/public/css/all-inlined-head-styles.css index fece3a5..a326415 100644 --- a/public/css/all-inlined-head-styles.css +++ b/public/css/all-inlined-head-styles.css @@ -24248,7 +24248,7 @@ img.wp-smiley, background: rgba(192, 32, 42, 0.13); } - .init-content {} + /* .init-content {} */ .init-title { font-family: 'Playfair Display', serif; @@ -31925,9 +31925,6 @@ img.wp-smiley, --widgets-spacing-column: 40px; } -{ -} - h1.page-title { display: var(--page-title-display); } @@ -37683,9 +37680,6 @@ img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} --widgets-spacing-column: 40px; } -{ -} - h1.page-title { display: var(--page-title-display); } diff --git a/src/animations/SmoothScroll.tsx b/src/animations/SmoothScroll.tsx index 1bd0625..92114c0 100644 --- a/src/animations/SmoothScroll.tsx +++ b/src/animations/SmoothScroll.tsx @@ -33,7 +33,29 @@ export default function SmoothScroll() { // Mouse/desktop only — touch devices already have good native momentum. const isPointerFine = window.matchMedia("(hover: hover) and (pointer: fine)").matches; - if (routeDisabled || prefersReduced || !isPointerFine) return; + let hashTimer: ReturnType; + + if (routeDisabled || prefersReduced || !isPointerFine) { + if (!window.location.hash) { + window.scrollTo(0, 0); + } else { + const scrollToHash = () => { + try { + const target = document.querySelector(window.location.hash) as HTMLElement | null; + if (target) { + target.scrollIntoView(); + } + } catch (err) { + console.warn(err); + } + }; + scrollToHash(); + hashTimer = setTimeout(scrollToHash, 100); + } + return () => { + if (hashTimer) clearTimeout(hashTimer); + }; + } gsap.registerPlugin(ScrollTrigger); @@ -45,6 +67,24 @@ export default function SmoothScroll() { smoothWheel: true, }); + if (!window.location.hash) { + lenis.scrollTo(0, { immediate: true }); + window.scrollTo(0, 0); + } else { + const scrollToHash = () => { + try { + const target = document.querySelector(window.location.hash) as HTMLElement | null; + if (target) { + lenis.scrollTo(target, { immediate: true }); + } + } catch (err) { + console.warn(err); + } + }; + scrollToHash(); + hashTimer = setTimeout(scrollToHash, 100); + } + lenis.on("scroll", ScrollTrigger.update); const tickerCb = (time: number) => lenis.raf(time * 1000); // ticker is seconds, Lenis wants ms gsap.ticker.add(tickerCb); @@ -52,6 +92,7 @@ export default function SmoothScroll() { ScrollTrigger.refresh(); return () => { + if (hashTimer) clearTimeout(hashTimer); gsap.ticker.remove(tickerCb); lenis.destroy(); }; diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx index 2388d6f..e3e5736 100644 --- a/src/components/layout/Footer.tsx +++ b/src/components/layout/Footer.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; import Link from "next/link"; +import Image from "next/image"; import { ScrollReveal } from "@/animations/Reveal"; export default function Footer() { @@ -79,7 +80,7 @@ export default function Footer() {
- +
@@ -327,7 +328,7 @@ export default function Footer() {
- Doormile Tagline + Doormile Tagline
@@ -468,6 +469,11 @@ export default function Footer() { .elementor-6585 .elementor-element.elementor-element-3f1ba7a .logico-custom-menu-widget { font-family: var(--font-manrope), system-ui, -apple-system, "Segoe UI", sans-serif; } + /* Prevent footer custom navigation menu items from wrapping on hover, + which causes layout shifts, height changes, and cursor flickering loops. */ + .elementor-6585 .logico-custom-menu-widget li a { + white-space: nowrap !important; + } /* The divider widget is a flex child that should grow via Elementor's --container-widget-flex-grow variable, but the base rule wiring that variable to flex-grow lives in elementor-frontend.css (not loaded). */ diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index 4d6feb0..28ef525 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -7,7 +7,7 @@ * Menu open/close + sidebar state is read from HeaderUIProvider so BodyOverlay (sibling at body level) can react. */ -import { useEffect, useState, useRef } from "react"; +import { useEffect, useState } from "react"; import Link from "next/link"; import Image from "next/image"; import { usePathname } from "next/navigation"; @@ -48,7 +48,7 @@ export default function Header() { // - on doc.ready: $('.header-hide-until-scroll').addClass('header-visible-scrolled') // - on scroll: toggleClass('dm-header-scrolled', scrollTop > 50) const [visibleScrolled, setVisibleScrolled] = useState(false); - const isScrolledRef = useRef(false); + const [isScrolled, setIsScrolled] = useState(false); useEffect(() => { const handle = requestAnimationFrame(() => { @@ -63,17 +63,7 @@ export default function Header() { if (rafId !== null) return; rafId = requestAnimationFrame(() => { const scrolled = window.scrollY > 50; - if (isScrolledRef.current !== scrolled) { - isScrolledRef.current = scrolled; - const headerEl = document.querySelector(".header-hide-until-scroll"); - if (headerEl) { - if (scrolled) { - headerEl.classList.add("dm-header-scrolled"); - } else { - headerEl.classList.remove("dm-header-scrolled"); - } - } - } + setIsScrolled(scrolled); rafId = null; }); }; @@ -99,7 +89,7 @@ export default function Header() { "e-parent", "header-hide-until-scroll", visibleScrolled ? "header-visible-scrolled" : "", - isScrolledRef.current ? "dm-header-scrolled" : "", + isScrolled ? "dm-header-scrolled" : "", ] .filter(Boolean) .join(" "); diff --git a/src/components/logisticsbrain/LogisticsBrainSection.tsx b/src/components/logisticsbrain/LogisticsBrainSection.tsx index 670d76d..2a86156 100644 --- a/src/components/logisticsbrain/LogisticsBrainSection.tsx +++ b/src/components/logisticsbrain/LogisticsBrainSection.tsx @@ -287,7 +287,7 @@ const styles = ` .dm-lb.is-after .dm-lb-sticky { position: absolute; top: auto; bottom: 0; } .dm-lb-card { - position: absolute !important; inset: 16px !important; + position: absolute !important; inset: 20px !important; border-radius: 28px !important; overflow: hidden !important; background: radial-gradient(120% 100% at 50% 0%, #12090c 0%, #0a070a 55%, #060507 100%) !important; border: 1px solid rgba(192,18,39,0.16) !important; @@ -300,7 +300,7 @@ const styles = ` the section's bottom so the Innovation card below butts directly against it, reading as one continuous container — mirrors the Optimisation → Performance seam in Workflow 1. */ .dm-lb.is-connected .dm-lb-card { - top: 16px !important; left: 16px !important; right: 16px !important; bottom: 0 !important; + top: 20px !important; left: 20px !important; right: 20px !important; bottom: 0 !important; border-radius: 28px 28px 0 0 !important; border-bottom: none !important; } @media (max-width: 767px) { diff --git a/src/components/optimization/OptimizationSection.tsx b/src/components/optimization/OptimizationSection.tsx index 2e6bb73..166d63e 100644 --- a/src/components/optimization/OptimizationSection.tsx +++ b/src/components/optimization/OptimizationSection.tsx @@ -434,9 +434,9 @@ const styles = ` /* ===== FLOATING CARD — the only colored surface ===== */ .dm-opt-card { position: absolute !important; - top: 110px !important; - left: 40px !important; - right: 40px !important; + top: 96px !important; + left: 20px !important; + right: 20px !important; bottom: 0 !important; /* flat bottom + flush to container so the Performance card butts directly against it, reading as one continuous container (home-page technique) */ diff --git a/src/components/sections/AboutCTA.tsx b/src/components/sections/AboutCTA.tsx index 8aa4172..b6502f1 100644 --- a/src/components/sections/AboutCTA.tsx +++ b/src/components/sections/AboutCTA.tsx @@ -12,7 +12,7 @@ export default function AboutCTA() {

Join our Women Entrepreneurship program and become part of
- India's fastest-growing logistics network. + India's fastest-growing logistics network.

diff --git a/src/components/sections/IndexHero.tsx b/src/components/sections/IndexHero.tsx index ee5acc2..2fb124f 100644 --- a/src/components/sections/IndexHero.tsx +++ b/src/components/sections/IndexHero.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useState, useEffect, useRef } from "react"; -import Link from "next/link"; import gsap from "gsap"; import { ShimmerText } from "@/animations/Reveal"; diff --git a/src/components/sections/IndustrySolutions.tsx b/src/components/sections/IndustrySolutions.tsx index b647928..d963899 100644 --- a/src/components/sections/IndustrySolutions.tsx +++ b/src/components/sections/IndustrySolutions.tsx @@ -11,7 +11,45 @@ export default function IndustrySolutions() {
-
+
+