+ How AI Is Transforming Last-Mile EV Delivery
+Machine learning and real-time data are reshaping how fleets plan, dispatch, and adapt — making every kilometre smarter than the last.
+ + Read More + + +diff --git a/assets/css/sections/section-blogs.css b/assets/css/sections/section-blogs.css new file mode 100644 index 0000000..27455cc --- /dev/null +++ b/assets/css/sections/section-blogs.css @@ -0,0 +1,188 @@ + /* ── Blog page hero ── */ + .blog-hero { + background: linear-gradient(160deg, #0c0c14 0%, #18050a 100%); + padding: 120px 0 60px; + text-align: center; + position: relative; + overflow: hidden; + margin-top: 0 !important; + } + .blog-hero::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(ellipse 60% 50% at 50% 60%, rgba(192,18,39,0.14) 0%, transparent 100%); + pointer-events: none; + } + .blog-hero-inner { + position: relative; + z-index: 1; + max-width: 720px; + margin: 0 auto; + padding: 0 32px; + } + .blog-hero-eyebrow { + display: inline-flex; + align-items: center; + gap: 10px; + font-family: 'Manrope', sans-serif; + font-size: 11px; + font-weight: 700; + letter-spacing: 3.5px; + text-transform: uppercase; + color: rgba(255,255,255,0.35); + margin-bottom: 20px; + } + .blog-hero-eyebrow::before, + .blog-hero-eyebrow::after { + content: ''; + display: block; + width: 28px; + height: 1px; + background: rgba(255,255,255,0.2); + } + .blog-hero h1 { + font-family: 'Manrope', sans-serif; + font-size: clamp(28px, 4.5vw, 52px); + font-weight: 900; + color: #fff; + line-height: 1.05; + letter-spacing: -1.5px; + text-transform: uppercase; + margin: 0 0 14px; + } + .blog-hero h1 span { color: #c01227; } + .blog-hero p { + font-family: 'Manrope', sans-serif; + font-size: 15px; + color: rgba(255,255,255,0.48); + line-height: 1.7; + margin: 0; + } + + /* ── Blog grid section ── */ + .blog-section { + background: #f8fafc; + padding: 80px 0 100px; + } + .blog-container { + max-width: 1280px; + margin: 0 auto; + padding: 0 40px; + } + + /* ── Blog grid ── */ + .dm-blog-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 32px; + } + + /* ── Blog card ── */ + .dm-blog-card { + background: #fff; + border-radius: 20px; + overflow: hidden; + border: 1px solid rgba(0,0,0,0.07); + box-shadow: 0 4px 24px rgba(0,0,0,0.05); + transition: transform 0.3s ease, box-shadow 0.3s ease; + display: flex; + flex-direction: column; + } + .dm-blog-card:hover { + transform: translateY(-4px); + box-shadow: 0 16px 48px rgba(0,0,0,0.1); + } + .dm-blog-card-image { + width: 100%; + aspect-ratio: 4/3; + overflow: hidden; + background: #eee; + } + .dm-blog-card-image img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + transition: transform 0.6s cubic-bezier(0.19, 1, 0.22, 1); + } + .dm-blog-card:hover .dm-blog-card-image img { + transform: scale(1.04); + } + .dm-blog-card-body { + padding: 20px 22px 24px; + flex: 1; + display: flex; + flex-direction: column; + } + .dm-blog-meta { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 10px; + flex-wrap: wrap; + } + .dm-blog-category { + font-family: 'Manrope', sans-serif; + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1.8px; + color: #c01227; + background: rgba(192,18,39,0.07); + border: 1px solid rgba(192,18,39,0.15); + border-radius: 100px; + padding: 3px 9px; + text-decoration: none; + white-space: nowrap; + } + .dm-blog-date { + font-family: 'Manrope', sans-serif; + font-size: 10px; + font-weight: 600; + color: #94a3b8; + letter-spacing: 0.3px; + } + .dm-blog-card h3 { + font-family: 'Manrope', sans-serif; + font-size: 15px; + font-weight: 800; + color: #111827; + line-height: 1.4; + letter-spacing: -0.2px; + margin: 0 0 8px; + } + .dm-blog-card p { + font-family: 'Manrope', sans-serif; + font-size: 12.5px; + color: #64748b; + line-height: 1.65; + margin: 0 0 18px; + flex: 1; + } + .dm-blog-read-more { + display: inline-flex; + align-items: center; + gap: 5px; + font-family: 'Manrope', sans-serif; + font-size: 12px; + font-weight: 700; + color: #c01227; + text-decoration: none; + letter-spacing: 0.2px; + margin-top: auto; + transition: gap 0.2s ease; + } + .dm-blog-read-more:hover { gap: 9px; } + .dm-blog-read-more svg { flex-shrink: 0; } + + /* ── Responsive ── */ + @media (max-width: 1024px) { + .dm-blog-grid { grid-template-columns: repeat(2, 1fr); } + } + @media (max-width: 640px) { + .dm-blog-grid { grid-template-columns: 1fr; } + .blog-hero { padding: 110px 0 60px; } + .blog-container { padding: 0 20px; } + .blog-section { padding: 60px 0 80px; } + } diff --git a/assets/css/sections/section-miletruth.css b/assets/css/sections/section-miletruth.css new file mode 100644 index 0000000..85d992a --- /dev/null +++ b/assets/css/sections/section-miletruth.css @@ -0,0 +1,295 @@ +/* + * section-miletruth.css + * Extends the existing ev-section & evp-section patterns. + * Only adds what the existing CSS files don't already provide. + */ + +/* ── Override ev-section font to match site Manrope ── */ +.ev-section, +.ev-section .ev-title, +.ev-section .ev-desc, +.ev-section .ev-badge, +.ev-section .feature-card h3, +.ev-section .feature-card p { + font-family: 'Manrope', sans-serif; +} + +/* ── Remove the decorative blobs (they show as colored arcs at section edges) ── */ +.ev-section::before, +.ev-section::after { + display: none; +} + +/* ── Column widths: image always gets the large column ── + Edge (non-rev): content first → col1 small, image → col2 large + Impact/Fulfillment (rev): image first → col1 large, content → col2 small ── */ +.ev-section .ev-grid { + grid-template-columns: 0.42fr 2.2fr; +} +.ev-section .ev-grid.ev-grid--rev { + grid-template-columns: 2.2fr 0.42fr; +} +.ev-section .ev-grid, +.ev-section .ev-grid.ev-grid--rev { + gap: 40px; + align-items: center; +} + +/* ── Widen the container on this page to give images more room ── */ +.ev-section .ev-container { + max-width: 1440px; + padding: 0 32px; +} + +/* ── Slightly smaller body text so images feel dominant ── */ +.ev-section .ev-desc { + font-size: 16px !important; + line-height: 1.65; + margin-bottom: 36px; +} + +/* ── Hero slider dark background (no Elementor CSS on this page) ── */ +.miletruth-hero .content-slider-wrapper { + background: linear-gradient(160deg, #0c0c14 0%, #18050a 100%); +} + +/* ── Remove the default 90px top margin so hero starts at y:0, covering the + white gap that would otherwise show behind the transparent header ── */ +.content-wrapper.miletruth-hero { + margin-top: 0 !important; +} + +/* ── Image-left layouts: image is first child in HTML, large column is first ── */ +.ev-grid--rev { + grid-template-columns: 2.2fr 0.42fr; +} +/* No order override needed — HTML source order already places image first (left, large) */ + + +/* ── Dark section override on ev-section ── */ +.ev-section--dark { + background: #1a1a1f !important; +} +.ev-section--dark .ev-title { color: #ffffff; } +.ev-section--dark .ev-desc { color: rgba(255, 255, 255, 0.55); } +.ev-section--dark .ev-badge { + background: rgba(255,255,255,0.06); + border-color: rgba(255,255,255,0.12); + color: rgba(255,255,255,0.7); + box-shadow: none; +} +.ev-section--dark .feature-card { + background: rgba(255,255,255,0.05); + border-color: rgba(255,255,255,0.08); +} +.ev-section--dark .feature-card:hover { + background: rgba(255,255,255,0.08); + border-color: rgba(227,30,36,0.3); +} +.ev-section--dark .feature-card h3 { color: #ffffff; } +.ev-section--dark .feature-card p { color: rgba(255,255,255,0.5); } +.ev-section--dark .feature-icon-box { + background: rgba(255,255,255,0.07); + box-shadow: none; +} + +/* ── Picture card (pitch image container) ── */ +.mr-pic-card { + border-radius: 32px; + overflow: hidden; + box-shadow: 0 40px 100px rgba(0, 0, 0, 0.09); + border: 1px solid rgba(255, 255, 255, 0.6); + background: #fff; +} +.mr-pic-card--dark { + border-color: rgba(255,255,255,0.08); + box-shadow: 0 40px 80px rgba(0,0,0,0.45); +} +.mr-pic-card img { + width: 100%; height: auto; display: block; + transition: transform 0.6s cubic-bezier(0.19, 1, 0.22, 1); +} +.mr-pic-card:hover img { transform: scale(1.025); } + +/* ── Stats strip ── */ +.mr-stats-strip { + padding: 72px 0; + background: #F8FAFC; + border-top: 1px solid rgba(0,0,0,0.05); + border-bottom: 1px solid rgba(0,0,0,0.05); +} +.mr-stats-grid { + max-width: 1300px; + margin: 0 auto; + padding: 0 40px; + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0; + background: #fff; + border: 1px solid rgba(0,0,0,0.07); + border-radius: 24px; + overflow: hidden; + box-shadow: 0 8px 40px rgba(0,0,0,0.05); +} +.mr-stat-item { + padding: 44px 32px; + text-align: center; + border-right: 1px solid rgba(0,0,0,0.07); + transition: background 0.3s ease; +} +.mr-stat-item:last-child { border-right: none; } +.mr-stat-item:hover { background: rgba(192,18,39,0.03); } +.mr-stat-num { + font-family: 'Manrope', sans-serif; + font-size: clamp(36px, 4.5vw, 58px); + font-weight: 900; + color: #111; + letter-spacing: -2px; + line-height: 1; + margin-bottom: 10px; +} +.mr-stat-num span { color: #c01227; } +.mr-stat-lbl { + font-family: 'Manrope', sans-serif; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 2px; + color: #64748B; +} + +/* ── CTA section ── */ +.mr-cta-section { + padding: 130px 0; + background: #0d0304; + position: relative; + overflow: hidden; + text-align: center; +} +.mr-cta-section::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(ellipse 65% 55% at 50% 50%, rgba(192,18,39,0.16) 0%, transparent 100%); + pointer-events: none; +} +.mr-cta-inner { + max-width: 720px; + margin: 0 auto; + padding: 0 40px; + position: relative; + z-index: 1; +} +.mr-cta-eyebrow { + display: inline-flex; + align-items: center; + gap: 10px; + font-family: 'Manrope', sans-serif; + font-size: 11px; + font-weight: 700; + letter-spacing: 3.5px; + text-transform: uppercase; + color: rgba(255,255,255,0.35); + margin-bottom: 28px; +} +.mr-cta-eyebrow::before, +.mr-cta-eyebrow::after { + content: ''; + display: block; + width: 28px; height: 1px; + background: rgba(255,255,255,0.2); +} +.mr-cta-inner h2 { + font-family: 'Manrope', sans-serif; + font-size: clamp(34px, 5vw, 64px); + font-weight: 900; + color: #fff; + line-height: 1.05; + letter-spacing: -2px; + text-transform: uppercase; + margin: 0 0 22px; +} +.mr-cta-inner h2 span { color: #c01227; } +.mr-cta-inner p { + font-family: 'Manrope', sans-serif; + font-size: 18px; + color: rgba(255,255,255,0.48); + line-height: 1.75; + margin: 0 0 52px; +} +.mr-cta-btns { + display: flex; + gap: 14px; + justify-content: center; + flex-wrap: wrap; +} +/* Primary CTA button */ +.mr-cta-btns .logico-button { + border-radius: 100px !important; +} + +/* ── List style matching ev-section checklist ── */ +.ev-checklist { + list-style: none !important; + margin: 0 0 48px; + padding: 0; + display: flex; + flex-direction: column; + gap: 14px; +} +.ev-checklist li { + list-style: none !important; + display: flex; + align-items: flex-start; + gap: 12px; + font-family: 'Manrope', sans-serif; + font-size: 15px; + font-weight: 600; + color: #2d3748; + line-height: 1.55; +} +.ev-checklist li::marker { + content: '' !important; + display: none !important; +} +.ev-checklist--dark li { color: rgba(255,255,255,0.75); } + +/* .logico-front-end ul li:before (vendor-theme-core.css) injects a fontello icon on + every li — override it with higher specificity + !important so only our SVG shows */ +.logico-front-end .ev-checklist li::before, +.ev-checklist li::before { + content: '' !important; + font: unset !important; + position: relative !important; + display: block !important; + width: 20px; height: 20px; min-width: 20px; + border-radius: 6px; + background: rgba(192,18,39,0.08) !important; + border: 1.5px solid rgba(192,18,39,0.2); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='8' viewBox='0 0 10 8' fill='none'%3E%3Cpath d='M1 4l2.5 2.5L9 1' stroke='%23c01227' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important; + background-size: 10px; background-repeat: no-repeat; background-position: center; + margin-top: 2px; flex-shrink: 0; + top: 0 !important; left: 0 !important; +} +.ev-checklist--dark li::before { + background-color: rgba(192,18,39,0.08) !important; + border-color: rgba(192,18,39,0.2) !important; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c01227' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 7 17l-5-5'/%3E%3Cpath d='m22 10-7.5 7.5L13 16'/%3E%3C/svg%3E") !important; + background-size: 14px; +} + +/* ── Responsive extras ── */ +@media (max-width: 1024px) { + .mr-stats-grid { grid-template-columns: repeat(2, 1fr); } + .mr-stat-item:nth-child(even) { border-right: none; } + .mr-stat-item:nth-child(n+3) { border-top: 1px solid rgba(0,0,0,0.07); } +} +@media (max-width: 680px) { + .mr-stats-strip { padding: 52px 0; } + .mr-stats-grid { padding: 0 20px; grid-template-columns: 1fr 1fr; border-radius: 16px; } + .mr-stat-item { padding: 28px 16px; } + .mr-stat-item:nth-child(odd) { border-right: 1px solid rgba(0,0,0,0.07); } + .mr-cta-section { padding: 80px 0; } + .mr-cta-inner { padding: 0 20px; } + .mr-cta-btns { flex-direction: column; align-items: center; } +} diff --git a/assets/images/routing/ml_pipeline_updated.svg b/assets/images/routing/ml_pipeline_updated.svg new file mode 100644 index 0000000..c152cba --- /dev/null +++ b/assets/images/routing/ml_pipeline_updated.svg @@ -0,0 +1,178 @@ + \ No newline at end of file diff --git a/assets/images/routing/pitch_edge.png b/assets/images/routing/pitch_edge.png new file mode 100644 index 0000000..ca5c304 Binary files /dev/null and b/assets/images/routing/pitch_edge.png differ diff --git a/assets/images/routing/pitch_flow.png b/assets/images/routing/pitch_flow.png new file mode 100644 index 0000000..9296372 Binary files /dev/null and b/assets/images/routing/pitch_flow.png differ diff --git a/assets/images/routing/pitch_impact.png b/assets/images/routing/pitch_impact.png new file mode 100644 index 0000000..9c18f2b Binary files /dev/null and b/assets/images/routing/pitch_impact.png differ diff --git a/assets/images/routing/pitch_strategy.png b/assets/images/routing/pitch_strategy.png new file mode 100644 index 0000000..5df1146 Binary files /dev/null and b/assets/images/routing/pitch_strategy.png differ diff --git a/assets/images/routing/pitchflow.png b/assets/images/routing/pitchflow.png new file mode 100644 index 0000000..5705419 Binary files /dev/null and b/assets/images/routing/pitchflow.png differ diff --git a/blogs.php b/blogs.php index 22f1f3d..a7ada76 100644 --- a/blogs.php +++ b/blogs.php @@ -1,5267 +1,34 @@ - - - -
- - - - -
- - Logico -
-
+
+ Machine learning and real-time data are reshaping how fleets plan, dispatch, and adapt — making every kilometre smarter than the last.
+ + Read More + + +
+ Electric vehicles promise sustainability, but battery constraints introduce a new routing challenge. Here's how MileTruth™ AI solves it before dispatch.
+ + Read More + + +
+ A detailed look at how Doormile's MileTruth routing engine delivered measurable efficiency gains — fewer vehicles, less fuel, and zero SLA misses.
+ + Read More + + +
+ From order ingestion to final route output in under 45ms — a technical walkthrough of the ten-stage pipeline at the heart of our routing engine.
+ + Read More + + +
+ Most routing tools guess. We calculate. Powered by Google OR-Tools, MileTruth evaluates six parallel strategy universes to select the optimal route every time.
+ + Read More + + +
+ Deploying 37% fewer vehicles while handling the same order volumes isn't a trade-off — it's the result of smarter routing intelligence applied at every dispatch.
+ + Read More + + +
+ Cities are demanding cleaner delivery. We explore how AI-powered EV fleets and optimised routing create a path to zero-emission last-mile logistics at city scale.
+ + Read More + + +
+ Hitting SLA targets 99.9% of the time isn't luck — it's the product of ETA pre-validation, real-time rebalancing, and a routing engine built with delivery reliability as its first constraint.
+ + Read More + + +
+ Before a single rider leaves the hub, MileTruth™ simulates every route against real charge capacity — eliminating mid-route failures and protecting your fulfillment rate.
+ + Read More + + +Ideas, case studies, and deep dives on EV logistics, AI routing, and the future of last-mile delivery.
+
+