update doormile wings dropdown
This commit is contained in:
@@ -2,6 +2,15 @@ import type { NextConfig } from "next";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
|
async redirects() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
source: "/air-freight",
|
||||||
|
destination: "/doormile-wings",
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
turbopack: {
|
turbopack: {
|
||||||
root: path.resolve(__dirname),
|
root: path.resolve(__dirname),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,62 +1,15 @@
|
|||||||
import AirFreightHero from "@/components/sections/AirFreightHero";
|
import { permanentRedirect } from "next/navigation";
|
||||||
import AirFreightServices from "@/components/sections/AirFreightServices";
|
|
||||||
import AirFreightAdvantages from "@/components/sections/AirFreightAdvantages";
|
|
||||||
import AirFreightCoverage from "@/components/sections/AirFreightCoverage";
|
|
||||||
import AirFreightWorkflow from "@/components/sections/AirFreightWorkflow";
|
|
||||||
import AirFreightFleet from "@/components/sections/AirFreightFleet";
|
|
||||||
import AirFreightBenefits from "@/components/sections/AirFreightBenefits";
|
|
||||||
import AirFreightBanner from "@/components/sections/AirFreightBanner";
|
|
||||||
import AirFreightFAQ from "@/components/sections/AirFreightFAQ";
|
|
||||||
import AirFreightCTA from "@/components/sections/AirFreightCTA";
|
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Air Freight – Doormile",
|
|
||||||
description: "Doormile Air Freight delivers precision cargo solutions — express air cargo, charter freight, cold chain, and customs clearance — across domestic and international trade lanes.",
|
|
||||||
alternates: {
|
alternates: {
|
||||||
canonical: "https://doormile.com/air-freight",
|
canonical: "https://doormile.com/doormile-wings",
|
||||||
},
|
},
|
||||||
openGraph: {
|
robots: {
|
||||||
title: "Air Freight – Doormile",
|
index: false,
|
||||||
description: "Precision air cargo solutions across India and 60+ countries. Guaranteed transit times, real-time tracking, and full customs management from a single partner.",
|
follow: true,
|
||||||
url: "https://doormile.com/air-freight",
|
|
||||||
siteName: "Doormile",
|
|
||||||
type: "website",
|
|
||||||
images: [
|
|
||||||
{
|
|
||||||
url: "https://doormile.com/images/air-freight-slide-1.jpg",
|
|
||||||
width: 1200,
|
|
||||||
height: 630,
|
|
||||||
alt: "Doormile Air Freight – precision cargo solutions",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
twitter: {
|
|
||||||
card: "summary_large_image",
|
|
||||||
title: "Air Freight – Doormile",
|
|
||||||
description: "Precision air cargo solutions across India and 60+ countries. Guaranteed transit times, real-time tracking, full customs management.",
|
|
||||||
images: ["https://doormile.com/images/air-freight-slide-1.jpg"],
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function AirFreightPage() {
|
export default function AirFreightRedirectPage() {
|
||||||
return (
|
permanentRedirect("/doormile-wings");
|
||||||
<div id="air-freight" className="content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none">
|
|
||||||
<div className="content">
|
|
||||||
<div className="content-inner">
|
|
||||||
<div data-elementor-type="wp-page" data-elementor-id="95" className="elementor elementor-95 elementor-59">
|
|
||||||
<AirFreightHero />
|
|
||||||
<AirFreightServices />
|
|
||||||
<AirFreightAdvantages />
|
|
||||||
<AirFreightCoverage />
|
|
||||||
<AirFreightWorkflow />
|
|
||||||
<AirFreightFleet />
|
|
||||||
<AirFreightBenefits />
|
|
||||||
<AirFreightBanner />
|
|
||||||
<AirFreightFAQ />
|
|
||||||
<AirFreightCTA />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
62
src/app/doormile-wings/page.tsx
Normal file
62
src/app/doormile-wings/page.tsx
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import AirFreightHero from "@/components/sections/AirFreightHero";
|
||||||
|
import AirFreightServices from "@/components/sections/AirFreightServices";
|
||||||
|
import AirFreightAdvantages from "@/components/sections/AirFreightAdvantages";
|
||||||
|
import AirFreightCoverage from "@/components/sections/AirFreightCoverage";
|
||||||
|
import AirFreightWorkflow from "@/components/sections/AirFreightWorkflow";
|
||||||
|
import AirFreightFleet from "@/components/sections/AirFreightFleet";
|
||||||
|
import AirFreightBenefits from "@/components/sections/AirFreightBenefits";
|
||||||
|
import AirFreightBanner from "@/components/sections/AirFreightBanner";
|
||||||
|
import AirFreightFAQ from "@/components/sections/AirFreightFAQ";
|
||||||
|
import AirFreightCTA from "@/components/sections/AirFreightCTA";
|
||||||
|
|
||||||
|
export const metadata = {
|
||||||
|
title: "Doormile Wings – Doormile",
|
||||||
|
description: "Doormile Wings delivers precision cargo solutions — express air cargo, charter capacity, cold chain, and customs clearance — across domestic and international trade lanes.",
|
||||||
|
alternates: {
|
||||||
|
canonical: "https://doormile.com/doormile-wings",
|
||||||
|
},
|
||||||
|
openGraph: {
|
||||||
|
title: "Doormile Wings – Doormile",
|
||||||
|
description: "Precision air cargo solutions across India and 60+ countries. Guaranteed transit times, real-time tracking, and full customs management from a single partner.",
|
||||||
|
url: "https://doormile.com/doormile-wings",
|
||||||
|
siteName: "Doormile",
|
||||||
|
type: "website",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "https://doormile.com/images/air-freight-slide-1.jpg",
|
||||||
|
width: 1200,
|
||||||
|
height: 630,
|
||||||
|
alt: "Doormile Wings precision cargo solutions",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
card: "summary_large_image",
|
||||||
|
title: "Doormile Wings – Doormile",
|
||||||
|
description: "Precision air cargo solutions across India and 60+ countries. Guaranteed transit times, real-time tracking, full customs management.",
|
||||||
|
images: ["https://doormile.com/images/air-freight-slide-1.jpg"],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function AirFreightPage() {
|
||||||
|
return (
|
||||||
|
<div id="doormile-wings" className="content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none">
|
||||||
|
<div className="content">
|
||||||
|
<div className="content-inner">
|
||||||
|
<div data-elementor-type="wp-page" data-elementor-id="95" className="elementor elementor-95 elementor-59">
|
||||||
|
<AirFreightHero />
|
||||||
|
<AirFreightServices />
|
||||||
|
<AirFreightAdvantages />
|
||||||
|
<AirFreightCoverage />
|
||||||
|
<AirFreightWorkflow />
|
||||||
|
<AirFreightFleet />
|
||||||
|
<AirFreightBenefits />
|
||||||
|
<AirFreightBanner />
|
||||||
|
<AirFreightFAQ />
|
||||||
|
<AirFreightCTA />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
133
src/app/express/page.tsx
Normal file
133
src/app/express/page.tsx
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Express – Doormile",
|
||||||
|
description: "Doormile Express — a fast-lane logistics service for time-critical shipments. Coming soon.",
|
||||||
|
alternates: {
|
||||||
|
canonical: "https://doormile.com/express",
|
||||||
|
},
|
||||||
|
robots: {
|
||||||
|
index: false,
|
||||||
|
follow: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ExpressPage() {
|
||||||
|
return (
|
||||||
|
<div id="express" className="content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none">
|
||||||
|
<div className="content">
|
||||||
|
<div className="content-inner">
|
||||||
|
<section className="express-coming-soon">
|
||||||
|
<div className="express-coming-soon-inner">
|
||||||
|
<span className="express-coming-soon-eyebrow">Solutions / Express</span>
|
||||||
|
<h1 className="express-coming-soon-heading">
|
||||||
|
Doormile Express is <span className="express-coming-soon-accent">on its way</span>
|
||||||
|
</h1>
|
||||||
|
<p className="express-coming-soon-text">
|
||||||
|
We're building a fast-lane logistics service for time-critical shipments.
|
||||||
|
Check back soon, or explore what Doormile already delivers today.
|
||||||
|
</p>
|
||||||
|
<div className="express-coming-soon-actions">
|
||||||
|
<Link href="/doormile-wings" prefetch className="logico-alter-button">
|
||||||
|
Explore Doormile Wings
|
||||||
|
</Link>
|
||||||
|
<Link href="/contact" className="express-coming-soon-link">
|
||||||
|
Get notified when we launch →
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Self-contained placeholder styling, scoped to .express-coming-soon.
|
||||||
|
Re-declares --logico-dark-text-color/--logico-light-text-color/
|
||||||
|
--logico-accent-color locally: the sitewide :root fallback is the
|
||||||
|
light-theme value (dark text on white), which would render near-
|
||||||
|
black text on this dark section without the override. */}
|
||||||
|
<style
|
||||||
|
suppressHydrationWarning
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `
|
||||||
|
.express-coming-soon {
|
||||||
|
--logico-dark-text-color: #ffffff;
|
||||||
|
--logico-light-text-color: #bebebe;
|
||||||
|
--logico-accent-color: #C01227;
|
||||||
|
min-height: calc(100vh - 160px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: clamp(48px, 8vw, 120px) 24px;
|
||||||
|
background: radial-gradient(120% 120% at 50% 0%, rgba(192, 18, 39, 0.18) 0%, rgba(26, 26, 26, 0.98) 55%, #111111 100%);
|
||||||
|
}
|
||||||
|
.express-coming-soon-inner {
|
||||||
|
max-width: 720px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.express-coming-soon-eyebrow {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.14em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--logico-accent-color);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.express-coming-soon-heading {
|
||||||
|
font-family: 'Manrope', sans-serif;
|
||||||
|
font-size: clamp(32px, 5vw, 56px);
|
||||||
|
line-height: 1.15em;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--logico-dark-text-color);
|
||||||
|
margin: 0 0 20px;
|
||||||
|
}
|
||||||
|
.express-coming-soon-accent {
|
||||||
|
color: var(--logico-accent-color);
|
||||||
|
}
|
||||||
|
.express-coming-soon-text {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.75em;
|
||||||
|
color: var(--logico-light-text-color);
|
||||||
|
margin: 0 auto 36px;
|
||||||
|
max-width: 520px;
|
||||||
|
}
|
||||||
|
.express-coming-soon-actions {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
.express-coming-soon .logico-alter-button {
|
||||||
|
color: #ffffff !important;
|
||||||
|
border-color: rgba(255, 255, 255, 0.45) !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
.express-coming-soon .logico-alter-button:hover {
|
||||||
|
background: #ffffff !important;
|
||||||
|
color: #1a1a1a !important;
|
||||||
|
border-color: #ffffff !important;
|
||||||
|
}
|
||||||
|
.express-coming-soon-link {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--logico-light-text-color);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 4px;
|
||||||
|
}
|
||||||
|
.express-coming-soon-link:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.express-coming-soon-actions {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -980,9 +980,9 @@ body {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Air Freight hero frame: the generic vendor CSS assigns 32px padding to
|
/* Doormile Wings hero frame: the generic vendor CSS assigns 32px padding to
|
||||||
.elementor-element-741f56c on all pages; Home's frame is 20px (scoped
|
.elementor-element-741f56c on all pages; Home's frame is 20px (scoped
|
||||||
to .elementor-61). Scope the same 20px frame to the Air Freight hero so
|
to .elementor-61). Scope the same 20px frame to the Doormile Wings hero so
|
||||||
the card alignment matches Home and Solutions exactly. */
|
the card alignment matches Home and Solutions exactly. */
|
||||||
@media (min-width: 1025px) {
|
@media (min-width: 1025px) {
|
||||||
.af-hero-page.elementor-element-741f56c {
|
.af-hero-page.elementor-element-741f56c {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
|||||||
priority: 0.8,
|
priority: 0.8,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: `${BASE_URL}/air-freight`,
|
url: `${BASE_URL}/doormile-wings`,
|
||||||
lastModified: now,
|
lastModified: now,
|
||||||
changeFrequency: "monthly",
|
changeFrequency: "monthly",
|
||||||
priority: 0.8,
|
priority: 0.8,
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ export default function Footer() {
|
|||||||
<div className="elementor-widget-container">
|
<div className="elementor-widget-container">
|
||||||
<ul className="logico-custom-menu-widget">
|
<ul className="logico-custom-menu-widget">
|
||||||
<li>
|
<li>
|
||||||
<Link href="/air-freight">Doormile Wings</Link>
|
<Link href="/doormile-wings">Doormile Wings</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Link href="/about-us">About Us</Link>
|
<Link href="/about-us">About Us</Link>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
* Menu open/close + sidebar state is read from HeaderUIProvider so BodyOverlay (sibling at body level) can react.
|
* Menu open/close + sidebar state is read from HeaderUIProvider so BodyOverlay (sibling at body level) can react.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { MouseEvent, useEffect, useState } from "react";
|
import { KeyboardEvent, FocusEvent, MouseEvent, useEffect, useState } from "react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { usePathname } from "next/navigation";
|
import { usePathname } from "next/navigation";
|
||||||
@@ -19,7 +19,8 @@ const CURRENT_PAGE_MAP: Record<string, string> = {
|
|||||||
"/how-it-works": "how-it-works",
|
"/how-it-works": "how-it-works",
|
||||||
"/miletruth": "miletruth",
|
"/miletruth": "miletruth",
|
||||||
"/solutions": "solutions",
|
"/solutions": "solutions",
|
||||||
"/air-freight": "air-freight",
|
"/doormile-wings": "doormile-wings",
|
||||||
|
"/express": "express",
|
||||||
"/about-us": "about",
|
"/about-us": "about",
|
||||||
"/blog": "blogs",
|
"/blog": "blogs",
|
||||||
};
|
};
|
||||||
@@ -29,8 +30,9 @@ const CURRENT_PAGE_ALIASES: Record<string, string[]> = {
|
|||||||
home: ["home"],
|
home: ["home"],
|
||||||
"how-it-works": ["how-it-works", "how-its-works"],
|
"how-it-works": ["how-it-works", "how-its-works"],
|
||||||
miletruth: ["miletruth"],
|
miletruth: ["miletruth"],
|
||||||
solutions: ["solutions"],
|
// Solutions is a normal nav page and also owns the Wings/Express dropdown.
|
||||||
"air-freight": ["air-freight"],
|
solutions: ["solutions", "doormile-wings", "express"],
|
||||||
|
"doormile-wings": ["doormile-wings"],
|
||||||
about: ["about", "about-us", "women"],
|
about: ["about", "about-us", "women"],
|
||||||
blogs: ["blogs"],
|
blogs: ["blogs"],
|
||||||
};
|
};
|
||||||
@@ -62,7 +64,7 @@ export default function Header() {
|
|||||||
targetId: string,
|
targetId: string,
|
||||||
shouldCloseMenu = false,
|
shouldCloseMenu = false,
|
||||||
) => {
|
) => {
|
||||||
if (shouldCloseMenu) closeAll();
|
if (shouldCloseMenu) closeMobileMenu();
|
||||||
|
|
||||||
if (pathname !== targetPath) return;
|
if (pathname !== targetPath) return;
|
||||||
|
|
||||||
@@ -80,6 +82,23 @@ export default function Header() {
|
|||||||
const [visibleScrolled, setVisibleScrolled] = useState(false);
|
const [visibleScrolled, setVisibleScrolled] = useState(false);
|
||||||
const [isScrolled, setIsScrolled] = useState(false);
|
const [isScrolled, setIsScrolled] = useState(false);
|
||||||
|
|
||||||
|
// Solutions dropdown (desktop) / accordion (mobile). Local to Header —
|
||||||
|
// unlike isMenuOpen/isSidebarOpen (HeaderUIProvider), no sibling component
|
||||||
|
// needs to read this.
|
||||||
|
const [isDesktopSolutionsOpen, setDesktopSolutionsOpen] = useState(false);
|
||||||
|
const [isMobileSolutionsOpen, setMobileSolutionsOpen] = useState(false);
|
||||||
|
|
||||||
|
// Collapse the accordion whenever the off-canvas menu closes, so it isn't
|
||||||
|
// left expanded the next time the menu opens.
|
||||||
|
const closeMobileMenu = () => {
|
||||||
|
setMobileSolutionsOpen(false);
|
||||||
|
closeAll();
|
||||||
|
};
|
||||||
|
const toggleMobileMenu = () => {
|
||||||
|
setMobileSolutionsOpen(false);
|
||||||
|
toggleMenu();
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handle = requestAnimationFrame(() => {
|
const handle = requestAnimationFrame(() => {
|
||||||
setVisibleScrolled(true);
|
setVisibleScrolled(true);
|
||||||
@@ -444,11 +463,44 @@ export default function Header() {
|
|||||||
<li id="menu-item-10510" className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${dmHeaderActive("miletruth")}`}>
|
<li id="menu-item-10510" className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${dmHeaderActive("miletruth")}`}>
|
||||||
<Link href="/miletruth#miletruth" onClick={(event) => handleNavClick(event, "/miletruth", "miletruth")}>MileTruth™ AI</Link>
|
<Link href="/miletruth#miletruth" onClick={(event) => handleNavClick(event, "/miletruth", "miletruth")}>MileTruth™ AI</Link>
|
||||||
</li>
|
</li>
|
||||||
<li id="menu-item-10511" className={`menu-item menu-item-type-custom menu-item-10511${dmHeaderActive("solutions")}`}>
|
<li
|
||||||
<Link href="/solutions#solutions" onClick={(event) => handleNavClick(event, "/solutions", "solutions")}>Solutions</Link>
|
id="menu-item-10511"
|
||||||
</li>
|
className={`menu-item menu-item-type-custom menu-item-has-children menu-item-10511${dmHeaderActive("solutions")}`}
|
||||||
<li id="menu-item-10513" className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10513${dmHeaderActive("air-freight")}`}>
|
onMouseEnter={() => setDesktopSolutionsOpen(true)}
|
||||||
<Link href="/air-freight" prefetch>Doormile wings</Link>
|
onMouseLeave={() => setDesktopSolutionsOpen(false)}
|
||||||
|
onKeyDown={(event: KeyboardEvent<HTMLLIElement>) => {
|
||||||
|
if (event.key !== "Escape") return;
|
||||||
|
setDesktopSolutionsOpen(false);
|
||||||
|
event.currentTarget.querySelector<HTMLAnchorElement>(":scope > a")?.focus();
|
||||||
|
}}
|
||||||
|
onBlur={(event: FocusEvent<HTMLLIElement>) => {
|
||||||
|
if (!event.currentTarget.contains(event.relatedTarget as Node)) {
|
||||||
|
setDesktopSolutionsOpen(false);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
href="/solutions"
|
||||||
|
prefetch
|
||||||
|
aria-haspopup="true"
|
||||||
|
aria-expanded={isDesktopSolutionsOpen}
|
||||||
|
onFocus={() => setDesktopSolutionsOpen(true)}
|
||||||
|
onClick={() => setDesktopSolutionsOpen(false)}
|
||||||
|
>
|
||||||
|
Solutions
|
||||||
|
</Link>
|
||||||
|
<ul className="dm-solutions-dropdown">
|
||||||
|
<li className={currentPage === "doormile-wings" ? "dm-child-active" : ""}>
|
||||||
|
<Link href="/doormile-wings" prefetch onClick={() => setDesktopSolutionsOpen(false)}>
|
||||||
|
Doormile Wings
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
<li className={currentPage === "express" ? "dm-child-active" : ""}>
|
||||||
|
<Link href="/express" prefetch onClick={() => setDesktopSolutionsOpen(false)}>
|
||||||
|
Express
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li id="menu-item-10512" className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10512${dmHeaderActive("about")}`}>
|
<li id="menu-item-10512" className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10512${dmHeaderActive("about")}`}>
|
||||||
<Link href="/about-us#about" onClick={(event) => handleNavClick(event, "/about-us", "about")}>About</Link>
|
<Link href="/about-us#about" onClick={(event) => handleNavClick(event, "/about-us", "about")}>About</Link>
|
||||||
@@ -459,7 +511,7 @@ export default function Header() {
|
|||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div className="menu-trigger" data-id="0b7bf6f" onClick={toggleMenu}>
|
<div className="menu-trigger" data-id="0b7bf6f" onClick={toggleMobileMenu}>
|
||||||
<span className="menu-trigger-icon">
|
<span className="menu-trigger-icon">
|
||||||
<span className="hamburger">
|
<span className="hamburger">
|
||||||
<span></span>
|
<span></span>
|
||||||
@@ -479,7 +531,7 @@ export default function Header() {
|
|||||||
<div className="header-icon login-logout">
|
<div className="header-icon login-logout">
|
||||||
<a href="#" title="Login/Register" className="link-login"></a>
|
<a href="#" title="Login/Register" className="link-login"></a>
|
||||||
</div>
|
</div>
|
||||||
<div className="header-icon menu-close" onClick={closeAll}>
|
<div className="header-icon menu-close" onClick={closeMobileMenu}>
|
||||||
<span className="menu-close-icon"></span>
|
<span className="menu-close-icon"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -495,11 +547,32 @@ export default function Header() {
|
|||||||
<li className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${dmHeaderActive("miletruth")}`}>
|
<li className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10510${dmHeaderActive("miletruth")}`}>
|
||||||
<Link href="/miletruth#miletruth" onClick={(event) => handleNavClick(event, "/miletruth", "miletruth", true)}>MileTruth™ AI</Link>
|
<Link href="/miletruth#miletruth" onClick={(event) => handleNavClick(event, "/miletruth", "miletruth", true)}>MileTruth™ AI</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className={`menu-item menu-item-type-custom menu-item-10511${dmHeaderActive("solutions")}`}>
|
<li
|
||||||
<Link href="/solutions#solutions" onClick={(event) => handleNavClick(event, "/solutions", "solutions", true)}>Solutions</Link>
|
className={`menu-item menu-item-type-custom menu-item-10511 dm-mobile-solutions${dmHeaderActive("solutions")}${isMobileSolutionsOpen ? " dm-accordion-open" : ""}`}
|
||||||
</li>
|
>
|
||||||
<li className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-10513${dmHeaderActive("air-freight")}`}>
|
<div className="dm-mobile-solutions-row">
|
||||||
<Link href="/air-freight" prefetch onClick={() => closeAll()}>Air Freight</Link>
|
<Link href="/solutions" prefetch onClick={closeMobileMenu}>
|
||||||
|
Solutions
|
||||||
|
</Link>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="dm-mobile-solutions-toggle"
|
||||||
|
aria-label={isMobileSolutionsOpen ? "Close Solutions menu" : "Open Solutions menu"}
|
||||||
|
aria-haspopup="true"
|
||||||
|
aria-expanded={isMobileSolutionsOpen}
|
||||||
|
onClick={() => setMobileSolutionsOpen((open) => !open)}
|
||||||
|
>
|
||||||
|
<span className="dm-accordion-chevron" aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<ul className="dm-mobile-solutions-panel">
|
||||||
|
<li className={currentPage === "doormile-wings" ? "dm-child-active" : ""}>
|
||||||
|
<Link href="/doormile-wings" prefetch onClick={closeMobileMenu}>Doormile Wings</Link>
|
||||||
|
</li>
|
||||||
|
<li className={currentPage === "express" ? "dm-child-active" : ""}>
|
||||||
|
<Link href="/express" prefetch onClick={closeMobileMenu}>Express</Link>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-10512${dmHeaderActive("about")}`}>
|
<li className={`menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-10512${dmHeaderActive("about")}`}>
|
||||||
<Link href="/about-us#about" onClick={(event) => handleNavClick(event, "/about-us", "about", true)}>About</Link>
|
<Link href="/about-us#about" onClick={(event) => handleNavClick(event, "/about-us", "about", true)}>About</Link>
|
||||||
@@ -879,6 +952,282 @@ export default function Header() {
|
|||||||
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E");
|
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E");
|
||||||
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E");
|
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5' y1='5' x2='19' y2='19'/%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3C/svg%3E");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Solutions dropdown (desktop) / accordion (mobile) ──
|
||||||
|
Solutions remains linked to /solutions while the nested menu opens
|
||||||
|
independently. It reuses site.css's dead .menu-item-has-children chevron (fontello
|
||||||
|
glyph, already coloured white for this exact header widget) instead
|
||||||
|
of inventing a new arrow, so it matches the site's existing premium
|
||||||
|
nav styling. Desktop opens on hover/focus; mobile is a
|
||||||
|
height-collapsing accordion controlled by the chevron button. */
|
||||||
|
@media (min-width: 1025px) {
|
||||||
|
#masthead .header-menu-container nav {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu {
|
||||||
|
display: inline-flex !important;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li > a {
|
||||||
|
display: inline-flex !important;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding-top: 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
min-height: 48px;
|
||||||
|
line-height: 1.2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 50%;
|
||||||
|
width: 100%;
|
||||||
|
min-width: 360px;
|
||||||
|
height: 24px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown {
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, 34px);
|
||||||
|
width: 380px;
|
||||||
|
min-width: 380px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 24px 22px;
|
||||||
|
list-style: none;
|
||||||
|
background: linear-gradient(180deg, rgba(31, 31, 31, 0.98) 0%, rgba(18, 18, 18, 0.98) 100%);
|
||||||
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.08);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.09);
|
||||||
|
border-radius: 18px;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s;
|
||||||
|
z-index: 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .main-menu li:not(:last-of-type) (site.css) is a descendant
|
||||||
|
selector that also matches these nested <li>s, pushing every
|
||||||
|
row but the last 12px to the right. Cancel it here. */
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li {
|
||||||
|
margin-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li + li {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: 12px;
|
||||||
|
height: 76px;
|
||||||
|
padding: 0 34px;
|
||||||
|
border-radius: 12px;
|
||||||
|
/* Hardcoded rather than var(--logico-dark-text-color): that
|
||||||
|
variable is only overridden to white inside a few unrelated
|
||||||
|
scoped contexts (e.g. #side-panel-2f31137) and otherwise
|
||||||
|
falls back to the sitewide light-theme value (#111111),
|
||||||
|
which would be invisible on this dark glass panel. */
|
||||||
|
color: rgba(255, 255, 255, 0.85);
|
||||||
|
font-family: var(--font-manrope), "Manrope", sans-serif;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.25;
|
||||||
|
letter-spacing: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: background-color 0.25s ease, color 0.25s ease, padding-left 0.25s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:before {
|
||||||
|
content: "";
|
||||||
|
width: 11px;
|
||||||
|
height: 11px;
|
||||||
|
margin-left: -23px;
|
||||||
|
flex: 0 0 11px;
|
||||||
|
background-color: #c01227;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateX(-10px);
|
||||||
|
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12 12 4'/%3E%3Cpath d='M5 4h7v7'/%3E%3C/svg%3E");
|
||||||
|
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12 12 4'/%3E%3Cpath d='M5 4h7v7'/%3E%3C/svg%3E");
|
||||||
|
-webkit-mask-repeat: no-repeat;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
-webkit-mask-position: center;
|
||||||
|
mask-position: center;
|
||||||
|
-webkit-mask-size: contain;
|
||||||
|
mask-size: contain;
|
||||||
|
transition: opacity 0.25s ease-in-out, transform 0.25s ease-in-out, background-color 0.25s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:hover,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:focus-visible {
|
||||||
|
background-color: rgba(255, 255, 255, 0.08);
|
||||||
|
color: #ffffff;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:hover:before,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li > a:focus-visible:before {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateX(0);
|
||||||
|
background-color: #c01227;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children .dm-solutions-dropdown li.dm-child-active > a {
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children:hover .dm-solutions-dropdown,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children:focus-within .dm-solutions-dropdown,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children > a[aria-expanded="true"] ~ .dm-solutions-dropdown {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
pointer-events: auto;
|
||||||
|
transform: translate(-50%, 24px);
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children:hover > a:after,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children:focus-within > a:after,
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children > a[aria-expanded="true"]:after {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Outlines are globally suppressed for .main-menu>li>a above;
|
||||||
|
restore a visible focus ring scoped only to this trigger. */
|
||||||
|
#masthead .header-menu-container .main-menu > li.menu-item-has-children > a:focus-visible {
|
||||||
|
outline: 2px solid var(--logico-dark-text-color, #ffffff);
|
||||||
|
outline-offset: 6px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-row {
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-row > a {
|
||||||
|
display: block;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
padding: 0.75em 0;
|
||||||
|
color: var(--logico-default-text-color);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-toggle {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
flex: 0 0 44px;
|
||||||
|
border: 0;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--logico-default-text-color);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-toggle:focus-visible {
|
||||||
|
outline: 2px solid currentColor;
|
||||||
|
outline-offset: 2px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-accordion-chevron {
|
||||||
|
display: inline-block;
|
||||||
|
width: 0.7em;
|
||||||
|
height: 0.7em;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
background-color: currentColor;
|
||||||
|
-webkit-mask-repeat: no-repeat;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
-webkit-mask-position: center;
|
||||||
|
mask-position: center;
|
||||||
|
-webkit-mask-size: contain;
|
||||||
|
mask-size: contain;
|
||||||
|
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
||||||
|
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions.dm-accordion-open .dm-accordion-chevron {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel {
|
||||||
|
max-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
padding-left: 18px;
|
||||||
|
transition: max-height 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions.dm-accordion-open .dm-mobile-solutions-panel {
|
||||||
|
max-height: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .mobile-header-menu-container ul.main-menu>li>a (site.css) only
|
||||||
|
matches direct children of .main-menu, so these nested links
|
||||||
|
fall through to the sitewide generic underlined-anchor default.
|
||||||
|
Restore the plain sibling-item look explicitly. */
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li > a {
|
||||||
|
display: block;
|
||||||
|
padding: 0.35em 0;
|
||||||
|
color: var(--logico-default-text-color);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A vendor li:before rule (checkmark bullet, likely intended for a
|
||||||
|
feature-list style elsewhere) leaks through here since the reset
|
||||||
|
at .mobile-header-menu-container ul.main-menu>li:before only
|
||||||
|
matches direct children of .main-menu, not this nested li.
|
||||||
|
Suppress it on both the <li> and <a> — these child rows aren't
|
||||||
|
top-level nav items and shouldn't carry any bullet/indicator. */
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li:before,
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li > a:before {
|
||||||
|
content: none !important;
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#masthead .mobile-header-menu-container .dm-mobile-solutions-panel > li.dm-child-active > a {
|
||||||
|
color: var(--logico-light-text-color);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ export default function AirFreightAdvantages() {
|
|||||||
<div className="afa-feature-inner dm-section-container">
|
<div className="afa-feature-inner dm-section-container">
|
||||||
<ScrollReveal delay={0.05} yOffset={40}>
|
<ScrollReveal delay={0.05} yOffset={40}>
|
||||||
<h3 className="afa-feature-heading">
|
<h3 className="afa-feature-heading">
|
||||||
Doormile is India's leading air freight partner
|
Doormile Wings is India's leading air cargo partner
|
||||||
</h3>
|
</h3>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<ScrollReveal delay={0.15} yOffset={40}>
|
<ScrollReveal delay={0.15} yOffset={40}>
|
||||||
@@ -166,7 +166,7 @@ export default function AirFreightAdvantages() {
|
|||||||
<p className="afa-feature-text">
|
<p className="afa-feature-text">
|
||||||
<strong>Our integrated air and ground network delivers cargo from major Indian airports to final destinations — domestic or international — without subcontractor gaps or tracking blind spots.</strong>
|
<strong>Our integrated air and ground network delivers cargo from major Indian airports to final destinations — domestic or international — without subcontractor gaps or tracking blind spots.</strong>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
Every air freight booking comes with binding SLA commitments, real-time milestone tracking, and in-house customs management — eliminating the need for third-party brokers and reducing total transit risk.
|
Every Doormile Wings booking comes with binding SLA commitments, real-time milestone tracking, and in-house customs management — eliminating the need for third-party brokers and reducing total transit risk.
|
||||||
</p>
|
</p>
|
||||||
<Link href="/about-us" className="logico-alter-button" style={{ textDecoration: "none", display: "inline-block" }}>
|
<Link href="/about-us" className="logico-alter-button" style={{ textDecoration: "none", display: "inline-block" }}>
|
||||||
More About Us
|
More About Us
|
||||||
|
|||||||
@@ -100,11 +100,11 @@ export default function AirFreightBanner() {
|
|||||||
|
|
||||||
<section className="afb-section">
|
<section className="afb-section">
|
||||||
<div className="afb-wrap dm-section-container">
|
<div className="afb-wrap dm-section-container">
|
||||||
<div className="afb-image" role="img" aria-label="Air freight cargo terminal" />
|
<div className="afb-image" role="img" aria-label="Doormile Wings cargo terminal" />
|
||||||
<div className="afb-card-anchor">
|
<div className="afb-card-anchor">
|
||||||
<ScrollReveal delay={0.1} yOffset={30}>
|
<ScrollReveal delay={0.1} yOffset={30}>
|
||||||
<div className="afb-card">
|
<div className="afb-card">
|
||||||
<span className="afb-card-num">01 / Air Freight</span>
|
<span className="afb-card-num">01 / Doormile Wings</span>
|
||||||
<h5 className="afb-card-title">Specialized air cargo services for every shipment type</h5>
|
<h5 className="afb-card-title">Specialized air cargo services for every shipment type</h5>
|
||||||
<p className="afb-card-desc">From express next-flight-out bookings to full-aircraft charters — Doormile handles every air cargo requirement under one SLA with full visibility and in-house customs.</p>
|
<p className="afb-card-desc">From express next-flight-out bookings to full-aircraft charters — Doormile handles every air cargo requirement under one SLA with full visibility and in-house customs.</p>
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export default function AirFreightCTA() {
|
|||||||
<em>cargo by air?</em>
|
<em>cargo by air?</em>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="we-cta-sub afcta-sub">
|
<p className="we-cta-sub afcta-sub">
|
||||||
Get a binding air freight quote within the hour. Our logistics team<br />
|
Get a binding Doormile Wings quote within the hour. Our logistics team<br />
|
||||||
is available 24/7 across all major Indian airports and trade lanes.
|
is available 24/7 across all major Indian airports and trade lanes.
|
||||||
</p>
|
</p>
|
||||||
<div className="we-cta-btns">
|
<div className="we-cta-btns">
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import { ScrollReveal } from "@/animations/Reveal";
|
|||||||
|
|
||||||
const FAQS = [
|
const FAQS = [
|
||||||
{
|
{
|
||||||
q: "How can we work with your air freight system?",
|
q: "How can we work with Doormile Wings?",
|
||||||
a: "Getting started with Doormile Air Freight is straightforward — contact our ops team or use our online quote form. We'll assess your cargo requirements, recommend the right service tier, and handle all documentation, booking, and customs coordination from a single point of contact.",
|
a: "Getting started with Doormile Wings is straightforward — contact our ops team or use our online quote form. We'll assess your cargo requirements, recommend the right service tier, and handle all documentation, booking, and customs coordination from a single point of contact.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
q: "What types of cargo can Doormile move by air?",
|
q: "What types of cargo can Doormile move by air?",
|
||||||
|
|||||||
@@ -56,35 +56,51 @@ export default function AirFreightHero() {
|
|||||||
.af-hero-slide .slide-content {
|
.af-hero-slide .slide-content {
|
||||||
display: flex !important;
|
display: flex !important;
|
||||||
flex-direction: column !important;
|
flex-direction: column !important;
|
||||||
align-items: flex-end !important;
|
align-items: center !important;
|
||||||
justify-content: center !important;
|
justify-content: center !important;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0 60px 70px !important;
|
padding: 0 20px 70px !important;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.af-hero-slide .slide-content-inner {
|
.af-hero-slide .slide-content-inner {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 55%;
|
max-width: 1000px;
|
||||||
margin: 58px 0 0 0;
|
margin: 58px auto 0 auto;
|
||||||
text-align: left;
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
.af-hero-slide .content-slider-item-heading {
|
.af-hero-slide .content-slider-item-heading,
|
||||||
|
.af-hero-slide .content-slider-item-heading .heading-content {
|
||||||
font-size: clamp(36px, 5.5vw, 80px) !important;
|
font-size: clamp(36px, 5.5vw, 80px) !important;
|
||||||
line-height: 1.125em !important;
|
line-height: 1.125em !important;
|
||||||
word-spacing: -0.03em;
|
word-spacing: -0.03em;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF !important;
|
||||||
text-align: left !important;
|
text-align: center !important;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
.af-hero-slide .content-slider-item-text {
|
.af-hero-slide .content-slider-item-text {
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
text-align: left !important;
|
text-align: center !important;
|
||||||
font-size: 16px;
|
font-size: clamp(18px, 1.5vw, 24px) !important;
|
||||||
line-height: 1.875em;
|
line-height: 1.65 !important;
|
||||||
margin-top: 23px;
|
margin-top: 23px;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.af-hero-slide .content-slider-item-text .text-content {
|
||||||
|
max-width: 780px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
.af-hero-slide .content-slider-item-buttons {
|
.af-hero-slide .content-slider-item-buttons {
|
||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.logico-front-end .af-hero-slide .logico-alter-button {
|
.logico-front-end .af-hero-slide .logico-alter-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -102,16 +118,16 @@ export default function AirFreightHero() {
|
|||||||
height: 800px !important;
|
height: 800px !important;
|
||||||
}
|
}
|
||||||
@media (max-width: 1200px) {
|
@media (max-width: 1200px) {
|
||||||
.af-hero-slide .slide-content-inner { max-width: 70%; }
|
.af-hero-slide .slide-content-inner { max-width: 90%; }
|
||||||
}
|
}
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1024px) {
|
||||||
.af-hero-slide .slide-content { padding: 0 30px 50px !important; }
|
.af-hero-slide .slide-content { padding: 0 30px 50px !important; }
|
||||||
.af-hero-slide .slide-content-inner { max-width: 85%; }
|
.af-hero-slide .slide-content-inner { max-width: 95%; }
|
||||||
.logico-content-slider-widget .owl-stage-outer { height: 640px !important; }
|
.logico-content-slider-widget .owl-stage-outer { height: 640px !important; }
|
||||||
}
|
}
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.af-hero-slide .slide-content { padding: 0 20px 40px !important; }
|
.af-hero-slide .slide-content { padding: 0 20px 40px !important; }
|
||||||
.af-hero-slide .slide-content-inner { max-width: 100%; margin: 0; }
|
.af-hero-slide .slide-content-inner { max-width: 100%; margin: 0 auto; }
|
||||||
.logico-content-slider-widget .owl-stage-outer { height: 580px !important; }
|
.logico-content-slider-widget .owl-stage-outer { height: 580px !important; }
|
||||||
.af-hero-page .owl-nav { display: none !important; }
|
.af-hero-page .owl-nav { display: none !important; }
|
||||||
}
|
}
|
||||||
@@ -153,12 +169,9 @@ export default function AirFreightHero() {
|
|||||||
</h1>
|
</h1>
|
||||||
<div className="content-slider-item-text logico-content-wrapper-2">
|
<div className="content-slider-item-text logico-content-wrapper-2">
|
||||||
<div className="text-content">
|
<div className="text-content">
|
||||||
<p>Doormile Air Freight delivers precision cargo solutions across domestic and international trade lanes — guaranteed transit times, real-time tracking, full customs management.</p>
|
<p>Doormile Wings delivers precision cargo solutions across domestic and international trade lanes — guaranteed transit times, real-time tracking, full customs management.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="content-slider-item-buttons logico-content-wrapper-3">
|
|
||||||
<Link href="/contact" className="logico-alter-button">Get a Quote</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -189,9 +202,6 @@ export default function AirFreightHero() {
|
|||||||
<p>From runway to doorstep — seamless air-to-ground handoffs powered by our integrated logistics network across India and global destinations.</p>
|
<p>From runway to doorstep — seamless air-to-ground handoffs powered by our integrated logistics network across India and global destinations.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="content-slider-item-buttons logico-content-wrapper-3">
|
|
||||||
<Link href="/about-us" className="logico-alter-button">Explore More</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { StaggerChildren } from "@/animations/Reveal";
|
import { StaggerChildren } from "@/animations/Reveal";
|
||||||
|
|
||||||
const SERVICE_LIST = [
|
const SERVICE_LIST = [
|
||||||
"Air Freight",
|
"Doormile Wings",
|
||||||
"Express Cargo",
|
"Express Cargo",
|
||||||
"Cold Chain Logistics",
|
"Cold Chain Logistics",
|
||||||
"Customs Clearance",
|
"Customs Clearance",
|
||||||
@@ -167,7 +167,7 @@ export default function AirFreightServices() {
|
|||||||
<div className="af3-col">
|
<div className="af3-col">
|
||||||
<div className="af3-label">/ Products & Services /</div>
|
<div className="af3-label">/ Products & Services /</div>
|
||||||
<h5 className="af3-heading">Products & Services</h5>
|
<h5 className="af3-heading">Products & Services</h5>
|
||||||
<p className="af3-desc">Comprehensive air freight and logistics solutions built for businesses that demand speed, reliability, and complete cargo visibility.</p>
|
<p className="af3-desc">Comprehensive air cargo and logistics solutions built for businesses that demand speed, reliability, and complete cargo visibility.</p>
|
||||||
<div className="af3-divider" />
|
<div className="af3-divider" />
|
||||||
<ul className="af3-list">
|
<ul className="af3-list">
|
||||||
{SERVICE_LIST.map((item) => (
|
{SERVICE_LIST.map((item) => (
|
||||||
@@ -182,7 +182,7 @@ export default function AirFreightServices() {
|
|||||||
{/* Column 2 – Our Specialty */}
|
{/* Column 2 – Our Specialty */}
|
||||||
<div className="af3-col">
|
<div className="af3-col">
|
||||||
<div className="af3-label">/ Our Specialty /</div>
|
<div className="af3-label">/ Our Specialty /</div>
|
||||||
<h5 className="af3-heading">Air Freight</h5>
|
<h5 className="af3-heading">Doormile Wings</h5>
|
||||||
<p className="af3-desc">Time-critical shipments handled with the highest priority. Guaranteed next-flight-out scheduling, same-day airport handoff, and binding SLA commitments on every air cargo booking.</p>
|
<p className="af3-desc">Time-critical shipments handled with the highest priority. Guaranteed next-flight-out scheduling, same-day airport handoff, and binding SLA commitments on every air cargo booking.</p>
|
||||||
<div className="af3-divider" />
|
<div className="af3-divider" />
|
||||||
<p className="af3-desc">Our IATA-certified team manages special commodity requirements including temperature control, security packaging, and regulatory documentation for every cargo category.</p>
|
<p className="af3-desc">Our IATA-certified team manages special commodity requirements including temperature control, security packaging, and regulatory documentation for every cargo category.</p>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { ScrollReveal } from "@/animations/Reveal";
|
|||||||
|
|
||||||
const ICON_BOXES = [
|
const ICON_BOXES = [
|
||||||
{
|
{
|
||||||
title: "Express Air Freight",
|
title: "Doormile Wings Express",
|
||||||
desc: "Time-critical shipments handled with next-flight-out scheduling and binding SLA commitments. Priority customs processing at every origin and destination airport.",
|
desc: "Time-critical shipments handled with next-flight-out scheduling and binding SLA commitments. Priority customs processing at every origin and destination airport.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -190,7 +190,7 @@ export default function AirFreightWorkflow() {
|
|||||||
<div className="afw-left-img">
|
<div className="afw-left-img">
|
||||||
<Image
|
<Image
|
||||||
src="/images/air-freight-pic-1.jpg"
|
src="/images/air-freight-pic-1.jpg"
|
||||||
alt="Air freight cargo operations"
|
alt="Doormile Wings cargo operations"
|
||||||
fill
|
fill
|
||||||
style={{ objectFit: "cover", objectPosition: "center" }}
|
style={{ objectFit: "cover", objectPosition: "center" }}
|
||||||
sizes="(max-width: 768px) 100vw, 45vw"
|
sizes="(max-width: 768px) 100vw, 45vw"
|
||||||
|
|||||||
Reference in New Issue
Block a user