894 lines
167 KiB
HTML
894 lines
167 KiB
HTML
<!DOCTYPE html><html lang="en-US" data-scroll-behavior="smooth" class="manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/images/preloader.png"/><link rel="preload" as="image" href="/images/doormile-white.png"/><link rel="preload" as="image" href="/images/doormile-black.png"/><link rel="stylesheet" href="/_next/static/chunks/17u~6c419s_w~.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/098a0lm-b~rn..js"/><script src="/_next/static/chunks/0tldj~reb5~dn.js" async=""></script><script src="/_next/static/chunks/110q6k5sdl4es.js" async=""></script><script src="/_next/static/chunks/14w_kqlcp4t3-.js" async=""></script><script src="/_next/static/chunks/07uz2g0_38qia.js" async=""></script><script src="/_next/static/chunks/turbopack-0srbdy.l3xhmj.js" async=""></script><script src="/_next/static/chunks/06n0m6ck5r8gy.js" async=""></script><script src="/_next/static/chunks/0n.gft-j~h_v_.js" async=""></script><script src="/_next/static/chunks/04xui0pxt.et1.js" async=""></script><script src="/_next/static/chunks/0d3shmwh5_nmn.js" async=""></script><script src="/_next/static/chunks/0p8hh7bd-e4bn.js" async=""></script><script src="/_next/static/chunks/0h0wg49c7el0c.js" async=""></script><link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" as="style"/><link rel="preload" href="/css/site.css" as="style"/><link rel="preload" href="/images/home-bg-1.png" as="image"/><link rel="preload" href="/images/about-bg.png" as="image"/><link rel="preload" href="/images/home2-banner-3.jpg" as="image"/><link rel="preload" href="/images/home1-slide-1.png" as="image"/><link rel="preload" href="/images/home2-banner-1.jpg" as="image"/><link rel="preload" href="/images/miletruth-bg.png" as="image"/><link rel="preload" as="image" href="/images/home-bg-1.png"/><link rel="preload" as="image" href="/images/about-bg.png"/><link rel="preload" as="image" href="/images/home2-banner-3.jpg"/><link rel="preload" as="image" href="/images/home1-slide-1.png"/><link rel="preload" as="image" href="/images/home2-banner-1.jpg"/><link rel="preload" as="image" href="/images/miletruth-bg.png"/><meta name="next-size-adjust" content=""/><title>Battery Simulation: The Secret to EV Route Pre-Validation – Doormile</title><meta name="description" content="Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."/><meta name="author" content="Doormile Team"/><meta name="keywords" content="EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation"/><meta name="robots" content="index, follow"/><link rel="canonical" href="https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"/><meta property="og:title" content="Battery Simulation: The Secret to EV Route Pre-Validation"/><meta property="og:description" content="Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."/><meta property="og:url" content="https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"/><meta property="og:site_name" content="Doormile"/><meta property="og:image" content="https://www.doormile.com/images/blog-post-pic-3.jpeg"/><meta property="og:image:alt" content="Battery Simulation: The Secret to EV Route Pre-Validation"/><meta property="og:type" content="article"/><meta property="article:published_time" content="2025-06-12T00:00:00.000Z"/><meta property="article:author" content="Doormile Team"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Battery Simulation: The Secret to EV Route Pre-Validation"/><meta name="twitter:description" content="Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan."/><meta name="twitter:image" content="https://www.doormile.com/images/blog-post-pic-3.jpeg"/><link rel="shortcut icon" href="/images/cropped-image-2.png"/><link rel="icon" href="/favicon.ico?favicon.14w3bhkxgz946.ico" sizes="40x40" type="image/x-icon"/><link rel="icon" href="/images/cropped-image-2.png"/><link rel="apple-touch-icon" href="/images/cropped-image-2.png"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"/><link rel="stylesheet" href="/css/site.css"/><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page"><div hidden=""><!--$--><!--/$--></div><div class="dm-loader" role="status" aria-live="polite" aria-label="Loading"><div class="dm-loader__pulse"><img alt="Doormile" width="325" height="239" decoding="async" data-nimg="1" class="dm-loader__logo" style="color:transparent" src="/images/preloader.png"/></div><style>
|
||
.dm-loader {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 100000;
|
||
display: grid;
|
||
place-items: center;
|
||
background: #000;
|
||
opacity: 1;
|
||
transition: opacity 0.32s ease;
|
||
will-change: opacity;
|
||
}
|
||
.dm-loader.is-hiding { opacity: 0; pointer-events: none; }
|
||
.dm-loader__pulse { animation: dmLoaderPulse 1.5s linear infinite; display: grid; place-items: center; }
|
||
.dm-loader__logo { display: block; margin: 0 auto; width: clamp(120px, 32vw, 180px); height: auto; }
|
||
@keyframes dmLoaderPulse {
|
||
50% { transform: scale(0.85); }
|
||
100% { transform: scale(1); }
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.dm-loader__pulse { animation: none; }
|
||
}
|
||
</style></div><div class="body-overlay"></div><div class="body-container"><div id="page" class="hfeed site"><header id="masthead" itemScope="" itemType="https://schema.org/WPHeader"><p class="main-title bhf-hidden" itemProp="headline"><a title="Doormile" rel="home" href="/">Doormile</a></p><div data-elementor-type="wp-post" data-elementor-id="5180" class="elementor elementor-5180"><div class="elementor-element elementor-element-466de1b e-con-full sticky-container-on e-flex cut-corner-no e-con e-parent header-hide-until-scroll" data-id="466de1b" data-element_type="container" data-settings="{"position":"absolute"}"><div class="elementor-element elementor-element-e052838 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="e052838" data-element_type="container"><div class="elementor-element elementor-element-d681ece e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="d681ece" data-element_type="container"><div class="elementor-element elementor-element-472172e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="472172e" data-element_type="container"><div class="elementor-element elementor-element-2f31137 elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile elementor-widget elementor-widget-logico_slide_sidebar" data-id="2f31137" data-element_type="widget" data-widget_type="logico_slide_sidebar.default"><div class="elementor-widget-container"><div class="logico-slide-sidebar-widget"><div class="dropdown-trigger" data-id="2f31137"><span class="dropdown-trigger-icon"></span></div></div><div style="z-index:100000" class="slide-sidebar-wrapper slide-sidebar-position-left" id="side-panel-2f31137"><div class="slide-sidebar-close"></div><div class="slide-sidebar"><div class="slide-sidebar-header"><figure class="wp-block-image size-full is-resized"><img alt="Doormile logo" loading="lazy" width="305" height="58" decoding="async" data-nimg="1" class="wp-image-5851" style="color:transparent;width:210px;height:auto" src="/images/doormile-logo.png"/></figure></div><div class="slide-sidebar-content" tabindex="0" role="region" aria-label="Menu content"><div id="block-37" class="widget widget_block"><div class="widget-wrapper"><div class="dm-block-group is-layout-constrained dm-block-group-is-layout-constrained"><div class="wp-block-title"><h6 class="wp-block-heading has-text-font-font-family" style="font-size:18px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Address</h6></div><h6 class="wp-block-heading has-text-font-font-family" style="font-size:14px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Hyderabad</h6><p>5th Floor, Vision Ultima,<br/>Street No.3, Jayabheri Enclave,<br/>Gachibowli, Hyderabad,<br/>Telangana 500032.</p><div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div><h6 class="wp-block-heading has-text-font-font-family" style="font-size:14px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Coimbatore</h6><p>Mayflower Valencia,<br/>Near Nava India Bus Stop,<br/>Avinashi Road,<br/>Udayampalayam,<br/>Tamil Nadu 641037.</p><div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div><h6 class="wp-block-heading has-text-font-font-family" style="font-size:14px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Bengaluru</h6><p>C612, 6th Floor,<br/>Trifecta Starlight,<br/>ITPL Road,<br/>Garudacharapalya,<br/>Mahadevapura,<br/>Bangalore 560048,<br/>Karnataka, India.</p><div style="height:3px" aria-hidden="true" class="wp-block-spacer"></div><div class="wp-block-title"><h6 class="wp-block-heading has-text-font-font-family" style="font-size:18px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Contact Us</h6></div><p>Tel : +91 86886 97941</p><div style="height:3px" aria-hidden="true" class="wp-block-spacer"></div><div class="wp-block-title"><h6 class="wp-block-heading has-text-font-font-family" style="font-size:18px;font-style:normal;font-weight:700;letter-spacing:0px;text-transform:none">Email</h6></div><p><a href="mailto:care@doormile.com" data-wplink-edit="true">care@doormile.com</a></p><div style="height:3px" aria-hidden="true" class="wp-block-spacer"></div><ul class="wp-block-social-links has-icon-color is-style-logos-only has-background is-layout-flex wp-block-social-links-is-layout-flex" style="background-color:#1f1f1f"><li style="color:#ffffff" class="wp-social-link wp-social-link-facebook has-white-color wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li><li style="color:#ffffff" class="wp-social-link wp-social-link-x has-white-color wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z"></path></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li><li style="color:#ffffff" class="wp-social-link wp-social-link-linkedin has-white-color wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li><li style="color:#ffffff" class="wp-social-link wp-social-link-youtube has-white-color wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul></div></div></div></div><div class="slide-sidebar-cta"><div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex"><div class="wp-block-button is-style-simple is-style-theme"><a class="wp-block-button__link wp-element-button" style="border-radius:10px" href="/contact">Get in touch</a></div></div></div></div></div></div></div><div class="elementor-element elementor-element-846e53d elementor-widget elementor-widget-site-logo" data-id="846e53d" data-element_type="widget" data-widget_type="site-logo.default"><div class="elementor-widget-container"><div class="hfe-site-logo"><a data-elementor-open-lightbox="" class="elementor-clickable" href="/"><div class="hfe-site-logo-set"><div class="hfe-site-logo-container"><img alt="doormile-logo" width="400" height="76" decoding="async" data-nimg="1" class="hfe-site-logo-img logo-desktop elementor-animation-" style="color:transparent" src="/images/doormile-white.png"/><img alt="doormile-logo" width="400" height="76" decoding="async" data-nimg="1" class="hfe-site-logo-img logo-mobile elementor-animation-" style="color:transparent" src="/images/doormile-black.png"/></div></div></a></div></div></div></div><div class="elementor-element elementor-element-e44ee7e e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="e44ee7e" data-element_type="container"><div class="elementor-element elementor-element-0b7bf6f logico-breakpoint-laptop elementor-widget__width-auto elementor-widget elementor-widget-logico_navigation_menu" data-id="0b7bf6f" data-element_type="widget" data-widget_type="logico_navigation_menu.default"><div class="elementor-widget-container"><div class="header-menu-container"><nav><ul id="menu-main-menu" class="main-menu"><li id="menu-item-10508" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10508"><a href="/">Home</a></li><li id="menu-item-10509" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10509"><a href="/how-it-works">How It Works</a></li><li id="menu-item-10510" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10510"><a href="/miletruth">MileTruth™ AI</a></li><li id="menu-item-10511" class="menu-item menu-item-type-custom menu-item-10511"><a href="/solutions">Solutions</a></li><li id="menu-item-10512" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10512"><a href="/about-us">About</a></li><li id="menu-item-10535" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10535"><a href="/blog">Blogs</a></li></ul></nav></div><div class="menu-trigger" data-id="0b7bf6f"><span class="menu-trigger-icon"><span class="hamburger"><span></span><span></span><span></span></span></span></div><div style="z-index:100000" class="mobile-header-menu-container" id="mobile-header-0b7bf6f"><div class="mobile-header-row"><div class="header-icons-container"><div class="header-icon login-logout"><a href="#" title="Login/Register" class="link-login"></a></div><div class="header-icon menu-close"><span class="menu-close-icon"></span></div></div></div><nav><ul id="menu-main-menu-1" class="main-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10508"><a href="/">Home</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10509"><a href="/how-it-works">How It Works</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10510"><a href="/miletruth">MileTruth™ AI</a></li><li class="menu-item menu-item-type-custom menu-item-10511"><a href="/solutions">Solutions</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-10512"><a href="/about-us">About</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10535"><a href="/blog">Blogs</a></li></ul></nav><div class="header-mobile-contacts"><div class="contact-item contact-item-phone"><span class="contact-item-label">Phone</span><div class="contact-item-value"><p>Tel : +91 86886 97941</p></div></div><div class="contact-item contact-item-email"><span class="contact-item-label">Email</span><div class="contact-item-value"><p><a href="mailto:care@doormile.com" data-wplink-edit="true">care@doormile.com</a></p></div></div></div><div class="header-mobile-socials"><ul class="mobile-menu-socials wrapper-socials"><li><a href="https://www.facebook.com/" target="_blank" aria-label="Facebook" rel="noreferrer"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 320 512" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg></a></li><li><a href="https://x.com/" target="_blank" aria-label="X (Twitter)" rel="noreferrer"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a></li><li><a href="https://www.linkedin.com/" target="_blank" aria-label="LinkedIn" rel="noreferrer"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></a></li><li><a href="https://www.youtube.com/" target="_blank" aria-label="YouTube" rel="noreferrer"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a></li></ul></div><div class="header-mobile-button"><a class="logico-alter-button" href="/contact">Get in Touch</a></div></div></div></div></div></div></div><div class="elementor-element elementor-element-f961133 e-con-full elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-flex cut-corner-no sticky-container-off e-con e-child" data-id="f961133" data-element_type="container"><div class="elementor-element elementor-element-cabdb09 elementor-widget elementor-widget-logico_header_button" data-id="cabdb09" data-element_type="widget" data-widget_type="logico_header_button.default"><div class="elementor-widget-container"><div class="header-button-container"><a class="header-button header-button-animation-fade" href="/contact">Contact Us</a></div></div></div></div></div></div></header><style>
|
||
/* ── Off-canvas menu: full-height flex column ──
|
||
Header (logo) at top, scrollable content in the middle, and the
|
||
"Get in touch" CTA pinned at the bottom — so the panel stays
|
||
usable however much content (e.g. multiple office addresses) it
|
||
holds. Scoped to #side-panel-2f31137; no other sidebar is touched.
|
||
Width, colors, the slide-in animation, and open/close behaviour
|
||
(driven by the .active class on the wrapper) are all unchanged. */
|
||
#side-panel-2f31137 .slide-sidebar {
|
||
display: flex !important;
|
||
flex-direction: column !important;
|
||
height: 100% !important;
|
||
padding: 0 !important; /* the three sections own their padding */
|
||
overflow: hidden !important; /* scrolling lives on the content area */
|
||
}
|
||
/* Fit the *visible* viewport. The panel height is calc(100vh - 20px),
|
||
but on mobile 100vh is the larger, URL-bar-inclusive height, which
|
||
pushed the bottom of the scroll list + the CTA below the fold and
|
||
made scrolling appear broken. dvh tracks the actually-visible area;
|
||
vh is kept as a fallback for older browsers. */
|
||
#side-panel-2f31137.slide-sidebar-wrapper {
|
||
height: calc(100vh - 20px);
|
||
height: calc(100dvh - 20px) !important;
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-header {
|
||
flex: 0 0 auto;
|
||
padding: 52px 36px 18px; /* top clears the floating close button */
|
||
text-align: center; /* centre the logo */
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-header figure {
|
||
margin: 0;
|
||
text-align: center;
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-header img {
|
||
display: inline-block; /* centred by the header's text-align */
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-content {
|
||
flex: 1 1 auto;
|
||
min-height: 0; /* let the flex child shrink so it can scroll */
|
||
overflow-y: auto;
|
||
overflow-x: hidden;
|
||
-webkit-overflow-scrolling: touch; /* momentum scroll on iOS */
|
||
overscroll-behavior: contain; /* don't chain scroll to the page */
|
||
padding: 18px 60px 8px; /* top gap below the logo header */
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-content:focus-visible {
|
||
outline: none; /* container is scroll-focusable, not a control */
|
||
}
|
||
#side-panel-2f31137 .slide-sidebar-cta {
|
||
flex: 0 0 auto;
|
||
padding: 16px 60px 36px;
|
||
}
|
||
/* Compact, readable address blocks (tighter line + lead-in than the
|
||
default 1.75em body spacing). */
|
||
#side-panel-2f31137 .slide-sidebar-content p {
|
||
line-height: 1.5;
|
||
margin-top: 4px;
|
||
}
|
||
/* Larger social icons — the logos-only block style renders them at 18px. */
|
||
#side-panel-2f31137 .wp-block-social-links.is-style-logos-only .wp-block-social-link a svg {
|
||
width: 26px !important;
|
||
height: 26px !important;
|
||
}
|
||
|
||
#masthead .elementor-element.elementor-element-466de1b {
|
||
position: absolute !important;
|
||
top: 5px !important;
|
||
left: 0 !important;
|
||
right: 0 !important;
|
||
width: auto !important;
|
||
transition: background-color 0.25s ease, box-shadow 0.25s ease, padding 0.25s ease !important;
|
||
z-index: 10000 !important;
|
||
}
|
||
|
||
/* .e-con's --padding-* falls through two competing stylesheets and lands at 10px locally
|
||
(vs 0 in production). Zero out the pill wrappers so the navbar matches prod height (~122px). */
|
||
#masthead .elementor-element.elementor-element-e052838,
|
||
#masthead .elementor-element.elementor-element-d681ece {
|
||
padding-top: 0 !important;
|
||
padding-bottom: 0 !important;
|
||
}
|
||
|
||
@media (min-width: 1025px) {
|
||
#masthead {
|
||
position: relative;
|
||
z-index: 10000;
|
||
}
|
||
|
||
/* Production pins the wrapper via Elementor sticky-effects JS (not shipped here).
|
||
Force position:fixed once scrolled past 50px so the header stays in viewport. */
|
||
#masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled {
|
||
position: fixed !important;
|
||
background: rgba(26, 26, 26, 0.92) !important;
|
||
-webkit-backdrop-filter: blur(14px) !important;
|
||
backdrop-filter: blur(14px) !important;
|
||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.22) !important;
|
||
top: 0 !important;
|
||
}
|
||
|
||
#masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled .elementor-element.elementor-element-e052838 {
|
||
background: transparent !important;
|
||
}
|
||
}
|
||
|
||
/* ── Desktop navbar layout (3-section balanced grid) ──
|
||
The earlier Mac-M1 fix used justify-content:space-between, which
|
||
on wide screens flung the logo and nav to opposite edges and
|
||
left a large asymmetric gap between them. Replace it with a
|
||
responsive three-column grid so the nav stays optically centred
|
||
with equal space on both sides, the logo group sits left and the
|
||
Contact button right — proportional at every desktop width.
|
||
|
||
The logo group (472172e) and nav (e44ee7e) are nested inside
|
||
e052838 › d681ece, while the Contact button (f961133) is their
|
||
uncle. Those two wrappers carry no visual styling on desktop
|
||
(their background/padding live only in the <1024px mobile block),
|
||
so display:contents flattens them and promotes all three logical
|
||
sections to be direct items of one header grid. The grid only
|
||
applies >=1025px, leaving the mobile pill layout untouched. */
|
||
@media (min-width: 1025px) {
|
||
#masthead .elementor-element.elementor-element-466de1b {
|
||
display: grid !important;
|
||
grid-template-columns: 1fr auto 1fr !important;
|
||
align-items: center !important;
|
||
column-gap: clamp(16px, 2vw, 32px) !important;
|
||
/* Equal left/right safe areas pull the logo and Contact
|
||
button inward off the viewport edges. Because the inset
|
||
is symmetric, the 1fr side columns shrink equally and the
|
||
centred nav does not shift. */
|
||
padding-inline: clamp(24px, 3vw, 48px) !important;
|
||
/* Consistent top/bottom breathing room inside the bar; with
|
||
align-items:center every section stays vertically centred. */
|
||
padding-block: clamp(8px, 1vw, 16px) !important;
|
||
}
|
||
|
||
#masthead .elementor-element.elementor-element-e052838,
|
||
#masthead .elementor-element.elementor-element-d681ece {
|
||
display: contents !important;
|
||
}
|
||
|
||
/* navbar-left: menu/grid icon + logo */
|
||
#masthead .elementor-element.elementor-element-472172e {
|
||
justify-self: start !important;
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
gap: clamp(16px, 1.5vw, 28px) !important;
|
||
flex: 0 0 auto !important;
|
||
}
|
||
|
||
/* Logo never shrinks — keeps a clean edge against the nav. */
|
||
#masthead .elementor-element.elementor-element-846e53d {
|
||
flex-shrink: 0 !important;
|
||
}
|
||
|
||
/* navbar-center: navigation menu, optically centred. */
|
||
#masthead .elementor-element.elementor-element-e44ee7e {
|
||
justify-self: center !important;
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
/* navbar-right: Contact button, aligned to the right edge. */
|
||
#masthead .elementor-element.elementor-element-f961133 {
|
||
justify-self: end !important;
|
||
}
|
||
}
|
||
|
||
#masthead .header-menu-container .main-menu > li.active > a:before {
|
||
background-color: #ffffff !important;
|
||
opacity: 1 !important;
|
||
}
|
||
|
||
#masthead .header-menu-container .main-menu > li.active > a {
|
||
color: #ffffff !important;
|
||
}
|
||
|
||
#masthead .header-menu-container .main-menu > li > a:focus,
|
||
#masthead .header-menu-container .main-menu > li > a:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
}
|
||
|
||
/* Responsive logo adjustment on mobile/tablet */
|
||
@media (max-width: 1024px) {
|
||
#masthead .elementor-element.elementor-element-846e53d .hfe-site-logo .hfe-site-logo-container img {
|
||
width: 150px !important;
|
||
height: auto !important;
|
||
margin-left: 20px !important;
|
||
}
|
||
#masthead .header-menu-container {
|
||
display: none !important;
|
||
}
|
||
#masthead .menu-trigger {
|
||
display: block !important;
|
||
}
|
||
|
||
/* Sticky header on scroll for mobile/tablet too — the desktop
|
||
rule lived only in the min-width:1025px block, so on phones the
|
||
absolutely-positioned navbar scrolled away with the page. Pin it
|
||
to the top once scrolled past 50px, matching desktop behaviour. */
|
||
#masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled {
|
||
position: fixed !important;
|
||
top: 0 !important;
|
||
left: 0 !important;
|
||
right: 0 !important;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 480px) {
|
||
#masthead .elementor-element.elementor-element-846e53d .hfe-site-logo .hfe-site-logo-container img {
|
||
width: 130px !important;
|
||
margin-left: 10px !important;
|
||
}
|
||
}
|
||
|
||
/* The theme reveals the mobile slide-in menu via Elementor's
|
||
body[data-elementor-device-mode="mobile"] rules, which are set by
|
||
Elementor's frontend JS — that JS isn't shipped in this Next port,
|
||
so the panel stayed display:none and the hamburger opened nothing.
|
||
Restore it with the same 1024px breakpoint the nav already switches
|
||
at. The panel sits off-screen (right:-320px) until .active slides
|
||
it in, matching production behaviour. */
|
||
@media (max-width: 1024px) {
|
||
#masthead .elementor-widget-logico_navigation_menu .mobile-header-menu-container {
|
||
display: block !important;
|
||
}
|
||
}
|
||
|
||
/* The bundled 'fontello' subset is missing the search (\e85c) and
|
||
close (\e845) glyphs, so those two icons render as empty tofu
|
||
boxes. Replace them with inline SVGs via CSS masks so they paint
|
||
in the current text colour (matching the working cart/user icons)
|
||
and respond to hover. */
|
||
#masthead .header-icon.search-link .search-trigger-icon::before,
|
||
#masthead .header-icon.menu-close .menu-close-icon::before {
|
||
content: "" !important;
|
||
display: block;
|
||
width: 1em;
|
||
height: 1em;
|
||
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;
|
||
}
|
||
#masthead .header-icon.search-link .search-trigger-icon::before {
|
||
-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%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%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%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='16.5' y1='16.5' x2='21' y2='21'/%3E%3C/svg%3E");
|
||
}
|
||
#masthead .header-icon.menu-close .menu-close-icon::before {
|
||
-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");
|
||
}
|
||
</style><div class="content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Battery Simulation: The Secret to EV Route Pre-Validation","description":"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.","image":["https://www.doormile.com/images/blog-post-pic-3.jpeg"],"datePublished":"2025-06-12T00:00:00.000Z","dateModified":"2025-06-12T00:00:00.000Z","author":{"@type":"Organization","name":"Doormile Team","url":"https://www.doormile.com"},"publisher":{"@type":"Organization","name":"Doormile","logo":{"@type":"ImageObject","url":"https://www.doormile.com/images/cropped-image-2.png"}},"mainEntityOfPage":{"@type":"WebPage","@id":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"},"articleSection":"EV Fleet"}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.doormile.com"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://www.doormile.com/blog"},{"@type":"ListItem","position":3,"name":"Battery Simulation: The Secret to EV Route Pre-Validation","item":"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation"}]}</script><div class="content"><div class="content-inner"><article class="dm-single-blog"><style>
|
||
.dm-single-blog {
|
||
--dm-red: #c01227;
|
||
--dm-red-hover: #e31d32;
|
||
--dm-radius-card: 22px;
|
||
--dm-radius-img: 20px;
|
||
--dm-radius-badge: 8px;
|
||
--dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05);
|
||
--dm-border: 1px solid rgba(15, 23, 42, 0.09);
|
||
--dm-space-p: 24px;
|
||
--dm-space-h: 32px;
|
||
--dm-space-img: 32px;
|
||
--dm-space-quote: 40px;
|
||
--dm-sticky-top: 138px;
|
||
--dm-measure: min(1100px, 100%);
|
||
font-family: var(--font-manrope), sans-serif;
|
||
}
|
||
|
||
/* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6
|
||
(120/80/60px UPPERCASE) rules with !important on our own classes. */
|
||
.dm-single-blog :where(h1, h2, h3, h4, h5, h6) {
|
||
font-family: var(--font-manrope), sans-serif !important;
|
||
text-transform: none !important;
|
||
font-style: normal !important;
|
||
font-weight: 800;
|
||
}
|
||
/* Neutralize the theme's .elementor-kit-5 a (red color + underline,
|
||
specificity 0-1-1) so blog links keep our colors and never get underlined. */
|
||
.dm-single-blog a { text-decoration: none !important; }
|
||
|
||
/* Page banner: tall homepage-scale frame with only badge + title inside */
|
||
/* Compound selector (specificity 20) + !important beats the global 800px
|
||
single-class height rules so the blog banner can use viewport heights. */
|
||
.custom-standard-hero-card.dm-banner-card {
|
||
height: 90vh !important;
|
||
min-height: 85vh !important;
|
||
}
|
||
@media (max-width: 1024px) {
|
||
.custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; }
|
||
}
|
||
@media (max-width: 600px) {
|
||
.custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; }
|
||
}
|
||
|
||
.dm-banner-inner {
|
||
position: relative; width: 100%; height: 100%;
|
||
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
||
text-align: center; gap: clamp(22px, 2.6vw, 34px);
|
||
padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px);
|
||
}
|
||
|
||
.dm-banner-category {
|
||
display: inline-block; background: var(--dm-red); color: #fff;
|
||
font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px;
|
||
padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45);
|
||
}
|
||
.dm-banner-title {
|
||
font-family: var(--font-manrope), sans-serif !important;
|
||
font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important;
|
||
line-height: 1.16 !important; letter-spacing: -1.2px !important;
|
||
color: #ffffff !important; margin: 0; max-width: 820px;
|
||
text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38);
|
||
}
|
||
@media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } }
|
||
@media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } }
|
||
|
||
/* Content wrap begins immediately below the banner */
|
||
/* Shared content container: the SAME max-width + horizontal padding is used
|
||
by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings,
|
||
images, Prev/Next, Related Articles and the CTA banner all align to one
|
||
grid with identical left/right edges. Keep both in sync. */
|
||
.dm-blog-wrap {
|
||
max-width: 1280px; margin: 0 auto;
|
||
/* 20px mobile padding floor → 40px on desktop; matches the footer container. */
|
||
padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0;
|
||
}
|
||
|
||
/* ── Article meta bar (directly under the hero) ── */
|
||
.dm-meta-bar {
|
||
display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px;
|
||
padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px);
|
||
border-bottom: 1px solid rgba(15,23,42,0.10);
|
||
}
|
||
.dm-meta-breadcrumb ol {
|
||
list-style: none; display: flex; flex-wrap: wrap; align-items: center;
|
||
gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b;
|
||
}
|
||
.dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; }
|
||
.dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; }
|
||
.dm-meta-sep { color: #cbd5e1; }
|
||
.dm-meta-current {
|
||
color: #0f172a; font-weight: 700;
|
||
max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
||
}
|
||
@media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } }
|
||
.dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; }
|
||
.dm-meta-item {
|
||
display: inline-flex; align-items: center; gap: 7px;
|
||
font-size: 13.5px; font-weight: 600; color: #475569;
|
||
}
|
||
.dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; }
|
||
.dm-meta-author { color: #0f172a; font-weight: 700; }
|
||
@media (max-width: 600px) { .dm-meta-bar { gap: 12px; } }
|
||
.dm-blog-layout {
|
||
display: grid; grid-template-columns: minmax(0,1fr) 320px;
|
||
/* Tighter gap gives the reading column more room next to the 320px sidebar. */
|
||
gap: clamp(28px, 3vw, 56px); align-items: start;
|
||
}
|
||
@media (max-width: 1024px) {
|
||
.dm-blog-layout { grid-template-columns: 1fr; gap: 48px; }
|
||
/* Single-column (tablet/mobile): cap the reading column and centre it so the
|
||
article never sits left-aligned with a large empty right gutter. */
|
||
.dm-blog-main { max-width: 900px; margin-inline: auto; }
|
||
}
|
||
.dm-blog-main { min-width: 0; }
|
||
|
||
/* ── Intro lead ── */
|
||
.dm-blog-intro {
|
||
max-width: var(--dm-measure);
|
||
font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500;
|
||
color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px;
|
||
border-left: 3px solid var(--dm-red);
|
||
}
|
||
|
||
/* ── Article body ── */
|
||
.dm-article-body { max-width: var(--dm-measure); }
|
||
.dm-article-p {
|
||
font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450;
|
||
margin: 0 0 var(--dm-space-p);
|
||
}
|
||
.dm-article-h2 {
|
||
font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important;
|
||
color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h);
|
||
text-wrap: balance;
|
||
}
|
||
/* Each article block is wrapped in its OWN ScrollReveal <div>, so a bare
|
||
:first-child rule matched every heading (each is the only child of its
|
||
wrapper) and zeroed its top margin, collapsing the gap above every
|
||
section heading. Scope the reset to only the article body's first block. */
|
||
.dm-article-body > :first-child :where(.dm-article-h2, .dm-article-h3),
|
||
.dm-article-body > .dm-article-h2:first-child,
|
||
.dm-article-body > .dm-article-h3:first-child { margin-top: 0; }
|
||
.dm-article-h3 {
|
||
font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important;
|
||
color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px;
|
||
text-wrap: balance;
|
||
}
|
||
@media (max-width: 600px) {
|
||
.dm-article-p { font-size: 16px !important; }
|
||
.dm-article-ul li, .dm-article-ol li { font-size: 15.5px; }
|
||
.dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; }
|
||
.dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; }
|
||
}
|
||
|
||
.dm-article-ul, .dm-article-ol {
|
||
/* Top margin (was 0) separates the list from the paragraph above it;
|
||
matching bottom margin keeps it clear of the next heading/paragraph.
|
||
Slightly larger than --dm-space-p so the list reads as its own block. */
|
||
margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px);
|
||
padding-left: 2px; list-style: none;
|
||
display: flex; flex-direction: column; gap: 15px;
|
||
}
|
||
/* Prefixed with .dm-article-body so these beat the theme's global
|
||
".logico-front-end ul li:before" fontello-glyph bullet (specificity 0,1,3),
|
||
which otherwise replaces our clean red dot with a misaligned checkmark glyph
|
||
and adds its own 1.7em indent. */
|
||
.dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li {
|
||
position: relative; padding-left: 34px;
|
||
font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450;
|
||
}
|
||
.dm-article-body .dm-article-ul li::before {
|
||
content: ""; position: absolute; left: 7px; top: 10px;
|
||
width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red);
|
||
/* kill any inherited fontello glyph from the global rule */
|
||
font-size: 0; line-height: 0;
|
||
}
|
||
.dm-article-ol { counter-reset: dm-li; }
|
||
.dm-article-body .dm-article-ol li { counter-increment: dm-li; }
|
||
.dm-article-body .dm-article-ol li::before {
|
||
content: counter(dm-li); position: absolute; left: 0; top: 0;
|
||
width: 24px; height: 24px; border-radius: 7px;
|
||
background: rgba(192,18,39,0.10); color: var(--dm-red);
|
||
font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center;
|
||
}
|
||
|
||
/* ── Quote ── */
|
||
.dm-article-quote {
|
||
position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px;
|
||
background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%);
|
||
border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0;
|
||
box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06);
|
||
}
|
||
.dm-article-quote::before {
|
||
content: "\201C"; position: absolute; left: 22px; top: 8px;
|
||
font-family: Georgia, "Times New Roman", serif;
|
||
font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700;
|
||
}
|
||
.dm-article-quote p {
|
||
font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600;
|
||
font-style: italic; color: #1e293b; margin: 0;
|
||
}
|
||
.dm-article-quote cite {
|
||
display: block; margin-top: 16px; font-size: 13px; font-weight: 700;
|
||
font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px;
|
||
}
|
||
@media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } }
|
||
|
||
/* ── Images ── */
|
||
.dm-article-figure { margin: var(--dm-space-img) 0; }
|
||
.dm-article-figure-img {
|
||
position: relative; display: block; width: 100%; aspect-ratio: 16 / 9;
|
||
border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10);
|
||
}
|
||
.dm-article-figure figcaption {
|
||
margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500;
|
||
text-align: center; font-style: italic;
|
||
}
|
||
|
||
/* ── Sidebar ── */
|
||
.dm-blog-aside-wrap { position: relative; }
|
||
.dm-blog-sidebar {
|
||
display: flex; flex-direction: column; gap: 18px;
|
||
position: sticky; top: var(--dm-sticky-top);
|
||
}
|
||
@media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } }
|
||
|
||
.dm-blog-widget {
|
||
background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card);
|
||
padding: 20px; box-shadow: var(--dm-shadow-card);
|
||
}
|
||
.dm-blog-widget-title {
|
||
font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important;
|
||
letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important;
|
||
margin: 0 0 15px; padding: 0 0 12px;
|
||
border-bottom: 1px solid rgba(15,23,42,0.08);
|
||
overflow: visible; white-space: normal; word-break: normal;
|
||
}
|
||
|
||
/* Search */
|
||
.dm-sr-only {
|
||
position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
|
||
overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
|
||
}
|
||
.dm-blog-search { position: relative; }
|
||
.dm-blog-search-form { position: relative; }
|
||
.dm-blog-search-input {
|
||
width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px;
|
||
padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a;
|
||
background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;
|
||
}
|
||
.dm-blog-search-input::placeholder { color: #9c9c9c; }
|
||
.dm-blog-search-input:focus {
|
||
outline: none; border-color: var(--dm-red); background: #fff;
|
||
box-shadow: 0 0 0 3px rgba(192,18,39,0.11);
|
||
}
|
||
.dm-blog-search-icon {
|
||
position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
|
||
color: #94a3b8; pointer-events: none; display: flex;
|
||
}
|
||
.dm-blog-search-results {
|
||
position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0;
|
||
background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px;
|
||
box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden;
|
||
}
|
||
.dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; }
|
||
.dm-blog-search-result {
|
||
display: flex; flex-direction: column; gap: 3px; padding: 10px 12px;
|
||
border-radius: 10px; text-decoration: none; transition: background .15s ease;
|
||
}
|
||
.dm-blog-search-result:hover { background: #f8fafc; }
|
||
.dm-blog-search-result-cat {
|
||
font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red);
|
||
}
|
||
.dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; }
|
||
.dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; }
|
||
|
||
/* Recent posts */
|
||
.dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; }
|
||
.dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; }
|
||
.dm-blog-recent-thumb {
|
||
position: relative; flex: 0 0 62px; width: 62px; height: 62px;
|
||
border-radius: 13px; overflow: hidden; background: #f1f5f9;
|
||
}
|
||
.dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
|
||
.dm-blog-recent-title {
|
||
font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35;
|
||
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
||
transition: color .2s ease;
|
||
}
|
||
.dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); }
|
||
.dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; }
|
||
|
||
/* Categories */
|
||
.dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
|
||
.dm-blog-category-item {
|
||
display: flex; align-items: center; justify-content: space-between; gap: 10px;
|
||
padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important;
|
||
border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease;
|
||
}
|
||
.dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; }
|
||
.dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; }
|
||
.dm-blog-category-item > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||
.dm-blog-category-count {
|
||
flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9;
|
||
min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex;
|
||
align-items: center; justify-content: center; padding: 0 7px;
|
||
}
|
||
|
||
/* CTA card */
|
||
.dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; }
|
||
.dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; }
|
||
.dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; }
|
||
.dm-blog-cta-btn {
|
||
display: inline-flex; align-items: center; gap: 8px;
|
||
background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700;
|
||
padding: 12px 22px; border-radius: 12px; text-decoration: none;
|
||
transition: background .2s ease, transform .2s ease;
|
||
}
|
||
.dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); }
|
||
</style><div class="custom-standard-hero-container"><div class="custom-standard-hero-card dm-banner-card" style="background-image:url(/images/blog-post-pic-3.jpeg);--hero-overlay:linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)"><div class="e-con-inner dm-banner-inner"><span class="dm-banner-category">EV Fleet</span><h1 class="dm-banner-title">Battery Simulation: The Secret to EV Route Pre-Validation</h1></div></div></div><div class="dm-blog-wrap"><div class="dm-meta-bar"><nav class="dm-meta-breadcrumb" aria-label="Breadcrumb"><ol><li><a href="/">Home</a></li><li aria-hidden="true" class="dm-meta-sep">/</li><li><a href="/blog">Blog</a></li><li aria-hidden="true" class="dm-meta-sep">/</li><li aria-current="page" class="dm-meta-current">Battery Simulation: The Secret to EV Route Pre-Validation</li></ol></nav><div class="dm-meta-items"><span class="dm-meta-item dm-meta-author"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>Doormile Team</span><span class="dm-meta-item"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="18" rx="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg><time dateTime="2025-06-12">Jun 12, 2025</time></span><span class="dm-meta-item"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><polyline points="12 7 12 12 15 14"></polyline></svg>2<!-- --> min read</span></div></div><div class="dm-blog-layout"><div class="dm-blog-main"><p class="dm-blog-intro">A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch.</p><div class="dm-article-body"><div class=""><p class="dm-article-p">In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.</p></div><div class=""><h2 class="dm-article-h2">Why this matters for fleet teams</h2></div><div class=""><p class="dm-article-p">Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.</p></div><div class=""><ul class="dm-article-ul"><li>Fewer vehicles needed for the same number of drops</li><li>Lower cost per drop through better stop sequencing</li><li>ETAs that match traffic, distance, and delivery windows</li><li>Less fuel or charge used per completed order</li></ul></div><div class=""><h3 class="dm-article-h3">From orders to dispatch</h3></div><div class=""><p class="dm-article-p">A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.</p></div><div class=""><figure class="dm-article-figure"><span class="dm-article-figure-img"><img alt="Battery Simulation: The Secret to EV Route Pre-Validation" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-3.jpeg"/></span><figcaption>EV Fleet: route planning decisions made before dispatch.</figcaption></figure></div><div class=""><blockquote class="dm-article-quote"><p>A route should be checked before the rider leaves, not explained after the customer calls.</p><cite>Doormile Operations</cite></blockquote></div><div class=""><h2 class="dm-article-h2">Putting it into practice</h2></div><div class=""><p class="dm-article-p">The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.</p></div><div class=""><ol class="dm-article-ol"><li>Benchmark today's distance, fleet size, and on-time rate.</li><li>Include vehicle capacity, delivery windows, rider shifts, and battery charge.</li><li>Check routes against traffic and customer commitments before dispatch.</li><li>Compare the next dispatch cycle against the old plan.</li></ol></div><div class=""><p class="dm-article-p">Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.</p></div></div></div><div class="dm-blog-aside-wrap"><aside class="dm-blog-sidebar" aria-label="Blog sidebar"><section class="dm-blog-widget"><h2 class="dm-blog-widget-title">Search</h2><div class="dm-blog-search"><form role="search" class="dm-blog-search-form"><label for="dm-blog-search-input" class="dm-sr-only">Search articles</label><input id="dm-blog-search-input" type="search" class="dm-blog-search-input" placeholder="Search articles…" autoComplete="off" aria-expanded="false" aria-controls="dm-blog-search-results" value=""/><span class="dm-blog-search-icon" aria-hidden="true"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg></span></form></div></section><section class="dm-blog-widget"><h2 class="dm-blog-widget-title">Recent Posts</h2><ul class="dm-blog-recent"><li><a class="dm-blog-recent-item" href="/blog/how-ai-is-transforming-last-mile-ev-delivery"><span class="dm-blog-recent-thumb"><img alt="How Better Planning Improves Last-Mile EV Delivery" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-17.png"/></span><span class="dm-blog-recent-meta"><span class="dm-blog-recent-title">How Better Planning Improves Last-Mile EV Delivery</span><time dateTime="2025-10-02" class="dm-blog-recent-date">Oct 2, 2025</time></span></a></li><li><a class="dm-blog-recent-item" href="/blog/42-less-distance-insights-from-our-hyderabad-hub"><span class="dm-blog-recent-thumb"><img alt="42% Less Distance: Insights from Our Hyderabad Hub" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-15.png"/></span><span class="dm-blog-recent-meta"><span class="dm-blog-recent-title">42% Less Distance: Insights from Our Hyderabad Hub</span><time dateTime="2025-09-18" class="dm-blog-recent-date">Sep 18, 2025</time></span></a></li><li><a class="dm-blog-recent-item" href="/blog/miletruth-ai-10-stages-to-smarter-dispatch"><span class="dm-blog-recent-thumb"><img alt="MileTruth™: 10 Stages to Smarter Dispatch" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-31.png"/></span><span class="dm-blog-recent-meta"><span class="dm-blog-recent-title">MileTruth™: 10 Stages to Smarter Dispatch</span><time dateTime="2025-09-05" class="dm-blog-recent-date">Sep 5, 2025</time></span></a></li><li><a class="dm-blog-recent-item" href="/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"><span class="dm-blog-recent-thumb"><img alt="The EV Paradox: Solving Range Anxiety for Urban Fleets" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/ev-paradox.png"/></span><span class="dm-blog-recent-meta"><span class="dm-blog-recent-title">The EV Paradox: Solving Range Anxiety for Urban Fleets</span><time dateTime="2025-08-21" class="dm-blog-recent-date">Aug 21, 2025</time></span></a></li></ul></section><section class="dm-blog-widget"><h2 class="dm-blog-widget-title">Categories</h2><ul class="dm-blog-categories"><li><a class="dm-blog-category-item" href="/blog"><span>Case Study</span><span class="dm-blog-category-count">1</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>EV Fleet</span><span class="dm-blog-category-count">2</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>Fleet Management</span><span class="dm-blog-category-count">1</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>MileTruth</span><span class="dm-blog-category-count">1</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>Operations</span><span class="dm-blog-category-count">1</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>Sustainability</span><span class="dm-blog-category-count">1</span></a></li><li><a class="dm-blog-category-item" href="/blog"><span>Technology</span><span class="dm-blog-category-count">2</span></a></li></ul></section><section class="dm-blog-widget dm-blog-cta-card"><h2 class="dm-blog-cta-title">Planning delivery routes?</h2><p class="dm-blog-cta-text">Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time.</p><a class="dm-blog-cta-btn" href="/contact">Contact Us<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></a></section></aside></div></div></div></article><section class="dm-blog-footer" aria-label="More articles"><style>
|
||
.dm-blog-footer {
|
||
font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32;
|
||
/* The global theme applies 72px top/bottom section padding — strip it so the
|
||
inner container is the single source of vertical rhythm (no double gap). */
|
||
padding: 0 !important;
|
||
}
|
||
/* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */
|
||
.dm-blog-footer :where(h1, h2, h3, h4, h5, h6) {
|
||
font-family: var(--font-manrope), sans-serif !important;
|
||
text-transform: none !important;
|
||
font-style: normal !important;
|
||
font-weight: 800;
|
||
}
|
||
/* Neutralize the theme's .elementor-kit-5 a (red color + underline) */
|
||
.dm-blog-footer a { text-decoration: none !important; }
|
||
/* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px
|
||
max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA
|
||
align to the exact same left/right edges as the article body above.
|
||
Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a
|
||
consistent ~64–72px section→section gap (no 120px+ voids). */
|
||
.dm-blog-footer-inner {
|
||
max-width: 1280px; margin: 0 auto;
|
||
/* Compact vertical rhythm on an 8px system. Top padding sets the
|
||
article→Prev/Next gap (~24–32px); the inter-section gap sets the
|
||
Prev/Next→Related gap (~32–48px). No large arbitrary voids. */
|
||
/* Minimal bottom padding — the global site footer already contributes its
|
||
own 20px top inset, so the CTA banner sits close to it without a void. */
|
||
padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px);
|
||
display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px);
|
||
}
|
||
|
||
/* Prev / Next */
|
||
.dm-prevnext {
|
||
display: grid; grid-template-columns: 1fr 1fr; gap: 20px;
|
||
/* Halved from 40px: tight divider→cards spacing without crowding. */
|
||
padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08);
|
||
}
|
||
@media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } }
|
||
.dm-prevnext-placeholder { display: block; }
|
||
.dm-prevnext-card {
|
||
display: flex; gap: 16px; align-items: center; padding: 16px;
|
||
background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px;
|
||
text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
|
||
}
|
||
.dm-prevnext-card:hover {
|
||
transform: translateY(-4px); border-color: rgba(192,18,39,0.2);
|
||
box-shadow: 0 16px 34px rgba(192,18,39,0.10);
|
||
}
|
||
.dm-prevnext-thumb {
|
||
position: relative; flex: 0 0 80px; width: 80px; height: 80px;
|
||
border-radius: 16px; overflow: hidden; background: #f1f5f9;
|
||
}
|
||
.dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
|
||
.dm-prevnext-next { text-align: right; }
|
||
.dm-prevnext-next .dm-prevnext-text { align-items: flex-end; }
|
||
.dm-prevnext-label {
|
||
display: inline-flex; align-items: center; gap: 6px;
|
||
font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red);
|
||
}
|
||
.dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; }
|
||
.dm-prevnext-title {
|
||
font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4;
|
||
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
||
transition: color .2s ease;
|
||
}
|
||
.dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); }
|
||
|
||
/* Related */
|
||
.dm-related-heading {
|
||
font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important;
|
||
line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px;
|
||
}
|
||
.dm-related-grid {
|
||
display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px;
|
||
}
|
||
@media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } }
|
||
@media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } }
|
||
|
||
.dm-related-card {
|
||
display: flex; flex-direction: column; height: 100%;
|
||
background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px;
|
||
overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none;
|
||
transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease;
|
||
}
|
||
.dm-related-card:hover {
|
||
transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13);
|
||
border-color: rgba(192,18,39,0.2);
|
||
}
|
||
.dm-related-img {
|
||
position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9;
|
||
}
|
||
.dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); }
|
||
.dm-related-card:hover .dm-related-img img { transform: scale(1.05); }
|
||
.dm-related-badge {
|
||
position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff;
|
||
font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px;
|
||
padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25);
|
||
}
|
||
.dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; }
|
||
.dm-related-card-title {
|
||
font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important;
|
||
letter-spacing: -.2px !important; margin: 0 0 10px;
|
||
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
||
transition: color .2s ease;
|
||
}
|
||
.dm-related-card:hover .dm-related-card-title { color: var(--dm-red); }
|
||
.dm-related-card-excerpt {
|
||
font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px;
|
||
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
||
}
|
||
.dm-related-readmore {
|
||
margin-top: auto; display: inline-flex; align-items: center; gap: 7px;
|
||
font-size: 12.5px; font-weight: 800; color: var(--dm-red);
|
||
text-transform: uppercase; letter-spacing: .6px;
|
||
}
|
||
.dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); }
|
||
.dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); }
|
||
|
||
/* Contact CTA banner */
|
||
.dm-blog-contact-cta {
|
||
display: flex; align-items: center; justify-content: space-between; gap: 32px;
|
||
flex-wrap: wrap;
|
||
background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%);
|
||
border-radius: 30px; padding: clamp(32px, 4vw, 56px);
|
||
position: relative; overflow: hidden;
|
||
}
|
||
.dm-blog-contact-cta::after {
|
||
content: ""; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px;
|
||
background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%);
|
||
pointer-events: none;
|
||
}
|
||
.dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; }
|
||
.dm-blog-contact-eyebrow {
|
||
display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase;
|
||
letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px;
|
||
}
|
||
.dm-blog-contact-title {
|
||
font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important;
|
||
letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance;
|
||
}
|
||
.dm-blog-contact-sub {
|
||
font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450;
|
||
}
|
||
.dm-blog-contact-btn {
|
||
position: relative; z-index: 1; flex-shrink: 0;
|
||
display: inline-flex; align-items: center; justify-content: center; gap: 10px;
|
||
background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700;
|
||
padding: 16px 32px; border-radius: 16px; text-decoration: none;
|
||
box-shadow: 0 10px 26px rgba(192,18,39,0.34);
|
||
transition: background .2s ease, transform .2s ease;
|
||
}
|
||
.dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); }
|
||
@media (max-width: 720px) {
|
||
.dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; }
|
||
.dm-blog-contact-btn { width: 100%; }
|
||
}
|
||
</style><div class="dm-blog-footer-inner"><nav class="dm-prevnext" aria-label="Article navigation"><a class="dm-prevnext-card dm-prevnext-prev" href="/blog/how-doormile-maintains-99-9-sla-compliance-at-scale"><span class="dm-prevnext-thumb"><img alt="How Doormile Maintains 99.9% SLA Compliance at Scale" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/last-mile-approach.jpg"/></span><span class="dm-prevnext-text"><span class="dm-prevnext-label"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>Previous</span><span class="dm-prevnext-cat">Operations</span><span class="dm-prevnext-title">How Doormile Maintains 99.9% SLA Compliance at Scale</span></span></a><span class="dm-prevnext-placeholder"></span></nav><div class="dm-related"><h2 class="dm-related-heading">Related Articles</h2><div class="dm-related-grid"><div class=""><a class="dm-related-card" href="/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets"><div class="dm-related-img"><img alt="The EV Paradox: Solving Range Anxiety for Urban Fleets" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/ev-paradox.png"/><span class="dm-related-badge">EV Fleet</span></div><div class="dm-related-body"><h3 class="dm-related-card-title">The EV Paradox: Solving Range Anxiety for Urban Fleets</h3><p class="dm-related-card-excerpt">Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch.</p><span class="dm-related-readmore">Read More<svg class="dm-related-readmore-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></span></div></a></div><div class=""><a class="dm-related-card" href="/blog/how-ai-is-transforming-last-mile-ev-delivery"><div class="dm-related-img"><img alt="How Better Planning Improves Last-Mile EV Delivery" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-17.png"/><span class="dm-related-badge">Technology</span></div><div class="dm-related-body"><h3 class="dm-related-card-title">How Better Planning Improves Last-Mile EV Delivery</h3><p class="dm-related-card-excerpt">A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles.</p><span class="dm-related-readmore">Read More<svg class="dm-related-readmore-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></span></div></a></div><div class=""><a class="dm-related-card" href="/blog/42-less-distance-insights-from-our-hyderabad-hub"><div class="dm-related-img"><img alt="42% Less Distance: Insights from Our Hyderabad Hub" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:cover;color:transparent" src="/images/blog-post-pic-15.png"/><span class="dm-related-badge">Case Study</span></div><div class="dm-related-body"><h3 class="dm-related-card-title">42% Less Distance: Insights from Our Hyderabad Hub</h3><p class="dm-related-card-excerpt">A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning.</p><span class="dm-related-readmore">Read More<svg class="dm-related-readmore-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></span></div></a></div></div></div><div class="dm-blog-contact-cta"><div class="dm-blog-contact-cta-content"><span class="dm-blog-contact-eyebrow">Let's talk logistics</span><h2 class="dm-blog-contact-title">Ready to move smarter with Doormile?</h2><p class="dm-blog-contact-sub">Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding.</p></div><a class="dm-blog-contact-btn" href="/contact">Get in Touch<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></a></div></div></section></div></div></div><!--$--><!--/$--><style>
|
||
.logico-form-field.dm-field-filled .logico-label-wrapper>label {
|
||
font-size: 14px;
|
||
top: -14px;
|
||
color: var(--logico-dark-text-color);
|
||
}
|
||
.logico-form-field.dm-field-filled .logico-label-placeholder .logico-label-placeholder-text:before {
|
||
right: 100%;
|
||
left: initial;
|
||
}
|
||
.logico-form-field.dm-field-filled .logico-label-placeholder .logico-label-placeholder-text:after {
|
||
left: 100%;
|
||
right: initial;
|
||
}
|
||
</style><footer data-rocket-location-hash="1eeca93394c4fc14089e9d12a2a92e22" itemScope="" itemType="https://schema.org/WPFooter" id="colophon" role="contentinfo"><div class="footer-width-fixer"><div data-elementor-type="wp-post" data-elementor-id="6585" class="elementor elementor-6585"><div class="elementor-element elementor-element-3cd920c e-con-full e-flex cut-corner-no sticky-container-off e-con e-parent" data-id="3cd920c" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-b29b8fc e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child" data-id="b29b8fc" data-element_type="container" data-e-type="container" data-settings="{"background_background":"classic"}"><div class="e-con-inner"><div class="elementor-element elementor-element-ef6fa6d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="ef6fa6d" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-9990148 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="9990148" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-8899bdf elementor-absolute elementor-widget elementor-widget-image" data-id="8899bdf" data-element_type="widget" data-e-type="widget" data-settings="{"_position":"absolute"}" data-widget_type="image.default"><div class="elementor-widget-container"><img alt="" loading="lazy" width="965" height="474" decoding="async" data-nimg="1" class="attachment-full size-full wp-image-1148" style="color:transparent" src="/images/bg-map.png"/></div></div><div class="elementor-element elementor-element-a0e7516 elementor-widget elementor-widget-logico_heading" data-id="a0e7516" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title">/ get in touch /</div></div></div><div class="elementor-element elementor-element-687d944 elementor-widget elementor-widget-logico_heading" data-id="687d944" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class=""><h3 class="logico-title" style="color:white">We are always ready to help you and answer your questions</h3></div></div></div><div class="elementor-element elementor-element-670d1b2 elementor-widget elementor-widget-text-editor" data-id="670d1b2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Connecting businesses with fast, secure, smart deliveries.</p></div></div><div class="elementor-element elementor-element-2631b42 e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child" data-id="2631b42" data-element_type="container" data-e-type="container"><div class="e-con-inner"><div class="elementor-element elementor-element-df89993 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="df89993" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-69b6892 elementor-widget elementor-widget-logico_heading" data-id="69b6892" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title dm-foot-label"><svg class="dm-foot-ic" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z"></path></svg><span>Contect</span></div></div></div><div class="elementor-element elementor-element-87be926 elementor-widget elementor-widget-text-editor" data-id="87be926" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>Tel : +91 86886 97941</p></div></div></div><div class="elementor-element elementor-element-f5d8e63 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="f5d8e63" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-774e540 elementor-widget elementor-widget-logico_heading" data-id="774e540" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title dm-foot-label"><svg class="dm-foot-ic" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg><span>Address</span></div></div></div><div class="elementor-element elementor-element-9c1cf03 elementor-widget elementor-widget-text-editor" data-id="9c1cf03" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p>5th Floor, Vision Ultima, Street No.3, Jayabheri Enclave, Gachibowli, Hyderabad, Telangana 500032.</p></div></div></div></div></div><div class="elementor-element elementor-element-645be8d e-flex e-con-boxed cut-corner-no sticky-container-off e-con e-child" data-id="645be8d" data-element_type="container" data-e-type="container"><div class="e-con-inner"><div class="elementor-element elementor-element-a96d151 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="a96d151" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-37e647f elementor-widget elementor-widget-logico_heading" data-id="37e647f" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title dm-foot-label"><svg class="dm-foot-ic" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="4" width="20" height="16" rx="2"></rect><path d="m22 7-10 5L2 7"></path></svg><span>Email</span></div></div></div><div class="elementor-element elementor-element-ba67644 elementor-widget elementor-widget-text-editor" data-id="ba67644" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p><a href="mailto:care@doormile.com">care@doormile.com</a></p></div></div></div><div class="elementor-element elementor-element-9ba4b82 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="9ba4b82" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-e9a5d79 elementor-widget elementor-widget-logico_heading" data-id="e9a5d79" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title dm-foot-label"><svg class="dm-foot-ic" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg><span>Social</span></div></div></div><div class="elementor-element elementor-element-a6bccba elementor-shape-square elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="a6bccba" data-element_type="widget" data-e-type="widget" data-widget_type="social-icons.default"><div class="elementor-widget-container"><div class="elementor-social-icons-wrapper elementor-grid" role="list" style="--grid-column-gap:52px;--grid-row-gap:18px;column-gap:52px;row-gap:18px"><span class="elementor-grid-item" role="listitem" style="padding:0 15px"><a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin-in elementor-repeater-item-38e1bcc" href="https://www.linkedin.com" target="_blank" rel="noopener noreferrer"><span class="elementor-screen-only">LinkedIn</span><svg aria-hidden="true" class="e-font-icon-svg e-fab-linkedin-in" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></a></span><span class="elementor-grid-item" role="listitem" style="padding:0 15px"><a class="elementor-icon elementor-social-icon elementor-social-icon-youtube elementor-repeater-item-b0d5e1f" href="https://www.youtube.com" target="_blank" rel="noopener noreferrer"><span class="elementor-screen-only">YouTube</span><svg aria-hidden="true" class="e-font-icon-svg e-fab-youtube" viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a></span></div></div></div></div></div></div></div><div class="elementor-element elementor-element-a5c503d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="a5c503d" data-element_type="container" data-e-type="container" data-settings="{"background_background":"classic"}"><div class="elementor-element elementor-element-535776a elementor-widget elementor-widget-logico_heading" data-id="535776a" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title">Get in Touch</div></div></div><div class="elementor-element elementor-element-0e6fedf elementor-widget elementor-widget-logico_wpforms" data-id="0e6fedf" data-element_type="widget" data-e-type="widget" data-widget_type="logico_wpforms.default"><div class="elementor-widget-container"><div class="logico-wpforms-widget"><div class="wpforms-container wpforms-render-modern" id="wpforms-369"><form id="wpforms-form-369" class="wpforms-validate wpforms-form"><div class="wpforms-field-container"><div class="wpforms-field-wrapper logico-form-field"><div class="logico-label-wrapper" style="margin-bottom:12px"><div class="logico-label-placeholder"><div class="logico-label-placeholder-text">Full name</div></div><label class="wpforms-field-label" for="footer-field-name">Full name</label></div><input type="text" id="footer-field-name" class="wpforms-field-large" required="" name="fullName" value=""/></div><div class="wpforms-field-wrapper logico-form-field"><div class="logico-label-wrapper" style="margin-bottom:12px"><div class="logico-label-placeholder"><div class="logico-label-placeholder-text">Email</div></div><label class="wpforms-field-label" for="footer-field-email">Email</label></div><input type="email" id="footer-field-email" class="wpforms-field-large" required="" name="email" value=""/></div><div class="wpforms-field-wrapper logico-form-field"><div class="logico-label-wrapper" style="margin-bottom:12px"><div class="logico-label-placeholder"><div class="logico-label-placeholder-text">Subject</div></div><label class="wpforms-field-label" for="footer-field-subject">Subject</label></div><input type="text" id="footer-field-subject" class="wpforms-field-large" required="" name="subject" value=""/></div><div class="wpforms-field-wrapper logico-form-field"><div class="logico-label-wrapper" style="margin-bottom:12px"><div class="logico-label-placeholder"><div class="logico-label-placeholder-text">Message</div></div><label class="wpforms-field-label" for="footer-field-message">Message</label></div><textarea id="footer-field-message" class="wpforms-field-large" name="message" required=""></textarea></div></div><div class="wpforms-submit-container"><button type="submit" id="wpforms-submit-369" class="logico-alter-button wpforms-submit">Send a message</button></div></form></div></div></div></div></div></div><div class="elementor-element elementor-element-e183a77 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="e183a77" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-5219697 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="5219697" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-e6af8aa elementor-widget__width-initial elementor-widget elementor-widget-logico_heading" data-id="e6af8aa" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class=""><h2 class="logico-title">Delivered <span style="color:#c01227">on time</span> with no hassle.</h2></div></div></div></div></div><div class="elementor-element elementor-element-ba22941 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="ba22941" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-54629ca elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="54629ca" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default"><div class="elementor-widget-container"><div class="elementor-divider"><span class="elementor-divider-separator"></span></div></div></div></div><div class="elementor-element elementor-element-3f1ba7a e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="3f1ba7a" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-64e2e81 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="64e2e81" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-b5c897d elementor-widget elementor-widget-image" data-id="b5c897d" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"><div class="elementor-widget-container"><a href="/"><img alt="Doormile Tagline" loading="lazy" width="300" height="57" decoding="async" data-nimg="1" class="attachment-full size-full wp-image-5851" style="color:transparent;width:280px;height:auto" src="/images/logo-slogan.png"/></a></div></div><div class="elementor-element elementor-element-e4e6486 elementor-shape-square elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="e4e6486" data-element_type="widget" data-e-type="widget" data-widget_type="social-icons.default"><div class="elementor-widget-container"><div class="elementor-social-icons-wrapper elementor-grid" role="list" style="--grid-column-gap:52px;--grid-row-gap:18px;column-gap:52px;row-gap:18px"><span class="elementor-grid-item" role="listitem" style="padding:0 15px"><a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin-in" href="https://www.linkedin.com" target="_blank" rel="noopener noreferrer"><span class="elementor-screen-only">LinkedIn</span><svg aria-hidden="true" class="e-font-icon-svg e-fab-linkedin-in" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></a></span><span class="elementor-grid-item" role="listitem" style="padding:0 15px"><a class="elementor-icon elementor-social-icon elementor-social-icon-youtube" href="https://www.youtube.com" target="_blank" rel="noopener noreferrer"><span class="elementor-screen-only">YouTube</span><svg aria-hidden="true" class="e-font-icon-svg e-fab-youtube" viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a></span></div></div></div></div><div class="elementor-element elementor-element-5b73dd3 e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="5b73dd3" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-10ead4d elementor-widget elementor-widget-logico_heading" data-id="10ead4d" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title">Solutions</div></div></div><div class="elementor-element elementor-element-b2507df elementor-widget elementor-widget-logico_custom_navigation_menu" data-id="b2507df" data-element_type="widget" data-e-type="widget" data-widget_type="logico_custom_navigation_menu.default"><div class="elementor-widget-container"><ul class="logico-custom-menu-widget"><li><a href="/miletruth">MileTruth™</a></li><li><a href="/how-it-works">How It Works</a></li><li><a href="/solutions">Use Cases</a></li><li><a href="/contact">Request Demo</a></li></ul></div></div></div><div class="elementor-element elementor-element-451f15c e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="451f15c" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-0ec06ff elementor-widget elementor-widget-logico_heading" data-id="0ec06ff" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title">Services</div></div></div><div class="elementor-element elementor-element-a219b7d elementor-widget elementor-widget-logico_custom_navigation_menu" data-id="a219b7d" data-element_type="widget" data-e-type="widget" data-widget_type="logico_custom_navigation_menu.default"><div class="elementor-widget-container"><ul class="logico-custom-menu-widget"><li><a href="/about-us">About Us</a></li><li><a href="/about-us#women-entrepreneurship">Women entrepreneurship</a></li><li><a href="/blog">Blog</a></li><li><a href="/contact">Contact</a></li></ul></div></div></div><div class="elementor-element elementor-element-44a1f5d e-con-full e-flex cut-corner-no sticky-container-off e-con e-child" data-id="44a1f5d" data-element_type="container" data-e-type="container"><div class="elementor-element elementor-element-0edc8fd elementor-widget elementor-widget-logico_heading" data-id="0edc8fd" data-element_type="widget" data-e-type="widget" data-widget_type="logico_heading.default"><div class="elementor-widget-container"><div class="logico-title">Legal</div></div></div><div class="elementor-element elementor-element-189484a elementor-widget elementor-widget-logico_custom_navigation_menu" data-id="189484a" data-element_type="widget" data-e-type="widget" data-widget_type="logico_custom_navigation_menu.default"><div class="elementor-widget-container"><ul class="logico-custom-menu-widget"><li><a href="/privacy-policy">Privacy Policy</a></li><li><a href="/terms-of-service">Terms Service</a></li><li><a href="/cookie-policy">Cookie Policy</a></li></ul></div></div></div></div></div></div></div></div></div></footer><div class="footer-scroll-top " style="cursor:pointer"></div><style>
|
||
.elementor-6585 .elementor-element.elementor-element-e6af8aa .logico-title,
|
||
.elementor-6585 .elementor-element.elementor-element-3f1ba7a .logico-title,
|
||
.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). */
|
||
.elementor-6585 .elementor-element.elementor-element-54629ca {
|
||
flex-grow: 1;
|
||
width: 100%;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-54629ca .elementor-divider-separator {
|
||
display: block;
|
||
border-top: var(--divider-border-width, 1px) var(--divider-border-style, solid) var(--divider-color, #CBCBCB);
|
||
}
|
||
|
||
/* Production renders footer social icons at ~25px; ours default to 50px because the
|
||
base Elementor icon-size rule (font-size + SVG width:1em) is in elementor-frontend.css
|
||
which isn't loaded. Match prod for both upper (a6bccba) and lower (e4e6486) groups. */
|
||
.elementor-6585 .elementor-element.elementor-element-a6bccba .elementor-social-icon,
|
||
.elementor-6585 .elementor-element.elementor-element-e4e6486 .elementor-social-icon {
|
||
font-size: 16px;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-a6bccba .elementor-social-icon svg,
|
||
.elementor-6585 .elementor-element.elementor-element-e4e6486 .elementor-social-icon svg {
|
||
width: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
/* Compact footer link columns on phones (<=480px). The kit only sets
|
||
column --width at min-width:481px, so below that all four blocks
|
||
fall back to 100% and stack into one very tall column. Put the
|
||
logo+social full-width on top, then lay the three link groups out
|
||
in a 2-up grid (matching the tablet 47% intent) so the footer is
|
||
roughly half as tall. */
|
||
/* Inline icon beside each contact label (Call Center / Our Location /
|
||
Email / Social network). */
|
||
.elementor-6585 .dm-foot-label {
|
||
display: inline-flex !important;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
.elementor-6585 .dm-foot-label .dm-foot-ic {
|
||
flex: 0 0 auto;
|
||
color: #C01227;
|
||
}
|
||
|
||
/* ── Compact mobile contact footer (<=600px) ──
|
||
On phones the upper contact section stacked into one very tall
|
||
column with 50px margins between every block. Tighten the heading,
|
||
collapse those stack margins, and pair Email + Social side-by-side
|
||
(both are short) so the footer is far shorter without losing the
|
||
full-width address readability. */
|
||
@media (max-width: 600px) {
|
||
/* Trim the band's oversized top/bottom padding on phones. */
|
||
.elementor-6585 .elementor-element.elementor-element-b29b8fc > .e-con-inner {
|
||
padding-top: 40px !important;
|
||
padding-bottom: 40px !important;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-687d944 .logico-title {
|
||
font-size: clamp(24px, 6.6vw, 32px) !important;
|
||
line-height: 1.2 !important;
|
||
}
|
||
.elementor-6585 .dm-foot-label .dm-foot-ic { width: 14px; height: 14px; }
|
||
/* The Call Center / Our Location group carries a 10px side padding
|
||
the Email / Social group doesn't, leaving its labels indented
|
||
10px out of line with everything else — zero it so all four
|
||
contact blocks share the same left edge as the heading. */
|
||
.elementor-6585 .elementor-element.elementor-element-2631b42 {
|
||
padding-left: 0 !important;
|
||
padding-right: 0 !important;
|
||
}
|
||
/* All four contact blocks stack in one left-aligned column with a
|
||
consistent gap (Social network sits below Email). */
|
||
.elementor-6585 .elementor-element.elementor-element-2631b42,
|
||
.elementor-6585 .elementor-element.elementor-element-f5d8e63,
|
||
.elementor-6585 .elementor-element.elementor-element-645be8d,
|
||
.elementor-6585 .elementor-element.elementor-element-9ba4b82 {
|
||
margin-top: 22px !important;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-645be8d > .e-con-inner {
|
||
flex-direction: column !important;
|
||
gap: 0 !important;
|
||
align-items: stretch !important;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-a96d151,
|
||
.elementor-6585 .elementor-element.elementor-element-9ba4b82 {
|
||
width: 100% !important;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 480px) {
|
||
.elementor-6585 .elementor-element.elementor-element-3f1ba7a {
|
||
display: flex !important;
|
||
flex-direction: row !important;
|
||
flex-wrap: wrap !important;
|
||
gap: 36px 16px !important;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-64e2e81 {
|
||
flex: 0 0 100% !important;
|
||
width: 100% !important;
|
||
}
|
||
.elementor-6585 .elementor-element.elementor-element-5b73dd3,
|
||
.elementor-6585 .elementor-element.elementor-element-451f15c,
|
||
.elementor-6585 .elementor-element.elementor-element-44a1f5d {
|
||
flex: 1 1 calc(50% - 8px) !important;
|
||
width: calc(50% - 8px) !important;
|
||
min-width: 0 !important;
|
||
}
|
||
/* Allow long links (e.g. "Women entrepreneurship") to wrap inside
|
||
the narrow columns instead of overflowing. */
|
||
.elementor-6585 .logico-custom-menu-widget li a {
|
||
white-space: normal !important;
|
||
}
|
||
/* Trim the large social-icons top gap so the brand block stays tight. */
|
||
.elementor-6585 .elementor-element.elementor-element-e4e6486 > .elementor-widget-container {
|
||
margin-top: 24px !important;
|
||
}
|
||
}
|
||
</style></div></div><script src="/_next/static/chunks/098a0lm-b~rn..js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[67989,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n3:I[8971,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n4:I[48064,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n5:I[26290,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n6:I[82637,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"HeaderUIProvider\"]\n7:I[92260,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n8:I[3374,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\n9:I[39756,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\na:I[37457,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\nb:I[58234,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\"]\nd:I[97367,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"OutletBoundary\"]\ne:\"$Sreact.suspense\"\n12:I[68027,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/17u~6c419s_w~.css\",\"style\"]\n:HL[\"/_next/static/media/0c795a286deabae8-s.p.14tvuu96~wkr0.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/a343f882a40d2cc9-s.p.0kho-wj7-y-w1.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\",\"style\"]\n:HL[\"/css/site.css\",\"style\"]\n:HL[\"/images/home-bg-1.png\",\"image\"]\n:HL[\"/images/about-bg.png\",\"image\"]\n:HL[\"/images/home2-banner-3.jpg\",\"image\"]\n:HL[\"/images/home1-slide-1.png\",\"image\"]\n:HL[\"/images/home2-banner-1.jpg\",\"image\"]\n:HL[\"/images/miletruth-bg.png\",\"image\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"blog\",\"battery-simulation-the-secret-to-ev-route-pre-validation\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"blog\",{\"children\":[[\"slug\",\"battery-simulation-the-secret-to-ev-route-pre-validation\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/17u~6c419s_w~.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/04xui0pxt.et1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/0p8hh7bd-e4bn.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en-US\",\"data-scroll-behavior\":\"smooth\",\"className\":\"manrope_67dc055e-module__BHrBnq__variable space_grotesk_2e42c3c6-module__3Wl9rq__variable syne_ef5854ac-module__2TJB3a__variable dm_sans_2770e922-module__TdA3fW__variable inter_5dbe1e89-module__i9oJOa__variable\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\"}],[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"/css/site.css\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/home-bg-1.png\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/about-bg.png\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/home2-banner-3.jpg\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/home1-slide-1.png\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/home2-banner-1.jpg\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"image\",\"href\":\"/images/miletruth-bg.png\"}]]}],[\"$\",\"body\",null,{\"className\":\"wp-singular page-template-default page wp-theme-logico wp-child-theme-logico-child theme-logico ehf-header ehf-footer ehf-template-logico ehf-stylesheet-logico-child logico-front-end logico-theme-style-rounded elementor-default elementor-kit-5 elementor-page\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"children\":[[\"$\",\"$L7\",null,{}],[\"$\",\"div\",null,{\"className\":\"body-container\",\"children\":[\"$\",\"div\",null,{\"id\":\"page\",\"className\":\"hfeed site\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$Lb\",null,{}]]}]}]]}]]}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$Lc\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0h0wg49c7el0c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$e\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@f\"}]}]]}],{},null,false,null]},null,false,\"$@10\"]},null,false,\"$@10\"]},null,false,null],\"$L11\",false]],\"m\":\"$undefined\",\"G\":[\"$12\",[\"$L13\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"y3G2lMn11oqugOOamFenM\"}\n"])</script><script>self.__next_f.push([1,"15:I[97367,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"ViewportBoundary\"]\n17:I[97367,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"MetadataBoundary\"]\n14:[]\n10:\"$W14\"\n11:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L15\",null,{\"children\":\"$L16\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L17\",null,{\"children\":[\"$\",\"$e\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L18\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n13:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/17u~6c419s_w~.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"19:T3cfe,"])</script><script>self.__next_f.push([1,"\n .dm-single-blog {\n --dm-red: #c01227;\n --dm-red-hover: #e31d32;\n --dm-radius-card: 22px;\n --dm-radius-img: 20px;\n --dm-radius-badge: 8px;\n --dm-shadow-card: 0 4px 24px rgba(15, 23, 42, 0.05);\n --dm-border: 1px solid rgba(15, 23, 42, 0.09);\n --dm-space-p: 24px;\n --dm-space-h: 32px;\n --dm-space-img: 32px;\n --dm-space-quote: 40px;\n --dm-sticky-top: 138px;\n --dm-measure: min(1100px, 100%);\n font-family: var(--font-manrope), sans-serif;\n }\n\n /* Heading normalization. Beat the global theme's .elementor-kit-5 h1-h6\n (120/80/60px UPPERCASE) rules with !important on our own classes. */\n .dm-single-blog :where(h1, h2, h3, h4, h5, h6) {\n font-family: var(--font-manrope), sans-serif !important;\n text-transform: none !important;\n font-style: normal !important;\n font-weight: 800;\n }\n /* Neutralize the theme's .elementor-kit-5 a (red color + underline,\n specificity 0-1-1) so blog links keep our colors and never get underlined. */\n .dm-single-blog a { text-decoration: none !important; }\n\n /* Page banner: tall homepage-scale frame with only badge + title inside */\n /* Compound selector (specificity 20) + !important beats the global 800px\n single-class height rules so the blog banner can use viewport heights. */\n .custom-standard-hero-card.dm-banner-card {\n height: 90vh !important;\n min-height: 85vh !important;\n }\n @media (max-width: 1024px) {\n .custom-standard-hero-card.dm-banner-card { height: 80vh !important; min-height: 75vh !important; }\n }\n @media (max-width: 600px) {\n .custom-standard-hero-card.dm-banner-card { height: 78vh !important; min-height: 72vh !important; }\n }\n\n .dm-banner-inner {\n position: relative; width: 100%; height: 100%;\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n text-align: center; gap: clamp(22px, 2.6vw, 34px);\n padding: clamp(48px, 8vh, 96px) clamp(20px, 5vw, 48px);\n }\n\n .dm-banner-category {\n display: inline-block; background: var(--dm-red); color: #fff;\n font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.6px;\n padding: 9px 18px; border-radius: 999px; box-shadow: 0 8px 22px rgba(192,18,39,0.45);\n }\n .dm-banner-title {\n font-family: var(--font-manrope), sans-serif !important;\n font-size: clamp(34px, 5vw, 60px) !important; font-weight: 850 !important;\n line-height: 1.16 !important; letter-spacing: -1.2px !important;\n color: #ffffff !important; margin: 0; max-width: 820px;\n text-wrap: balance; text-shadow: 0 2px 30px rgba(0,0,0,0.38);\n }\n @media (max-width: 1024px) { .dm-banner-title { font-size: clamp(32px, 6vw, 48px) !important; max-width: 90%; } }\n @media (max-width: 600px) { .dm-banner-title { font-size: clamp(28px, 8vw, 38px) !important; max-width: 90%; } }\n\n /* Content wrap begins immediately below the banner */\n /* Shared content container: the SAME max-width + horizontal padding is used\n by BlogPostFooter (.dm-blog-footer-inner) so the article body, headings,\n images, Prev/Next, Related Articles and the CTA banner all align to one\n grid with identical left/right edges. Keep both in sync. */\n .dm-blog-wrap {\n max-width: 1280px; margin: 0 auto;\n /* 20px mobile padding floor → 40px on desktop; matches the footer container. */\n padding: clamp(14px, 2vw, 26px) clamp(20px, 4vw, 40px) 0;\n }\n\n /* ── Article meta bar (directly under the hero) ── */\n .dm-meta-bar {\n display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 14px 24px;\n padding: clamp(20px, 2.6vw, 30px) 0; margin-bottom: clamp(26px, 3vw, 44px);\n border-bottom: 1px solid rgba(15,23,42,0.10);\n }\n .dm-meta-breadcrumb ol {\n list-style: none; display: flex; flex-wrap: wrap; align-items: center;\n gap: 8px; margin: 0; padding: 0; font-size: 13px; font-weight: 600; color: #64748b;\n }\n .dm-meta-breadcrumb a { color: #64748b !important; text-decoration: none; transition: color .2s ease; }\n .dm-meta-breadcrumb a:hover { color: var(--dm-red) !important; }\n .dm-meta-sep { color: #cbd5e1; }\n .dm-meta-current {\n color: #0f172a; font-weight: 700;\n max-width: min(40ch, 46vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n }\n @media (max-width: 600px) { .dm-meta-current { max-width: 56vw; } }\n .dm-meta-items { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; }\n .dm-meta-item {\n display: inline-flex; align-items: center; gap: 7px;\n font-size: 13.5px; font-weight: 600; color: #475569;\n }\n .dm-meta-item svg { color: var(--dm-red); flex: 0 0 auto; }\n .dm-meta-author { color: #0f172a; font-weight: 700; }\n @media (max-width: 600px) { .dm-meta-bar { gap: 12px; } }\n .dm-blog-layout {\n display: grid; grid-template-columns: minmax(0,1fr) 320px;\n /* Tighter gap gives the reading column more room next to the 320px sidebar. */\n gap: clamp(28px, 3vw, 56px); align-items: start;\n }\n @media (max-width: 1024px) {\n .dm-blog-layout { grid-template-columns: 1fr; gap: 48px; }\n /* Single-column (tablet/mobile): cap the reading column and centre it so the\n article never sits left-aligned with a large empty right gutter. */\n .dm-blog-main { max-width: 900px; margin-inline: auto; }\n }\n .dm-blog-main { min-width: 0; }\n\n /* ── Intro lead ── */\n .dm-blog-intro {\n max-width: var(--dm-measure);\n font-size: clamp(18px, 1.5vw, 20px); line-height: 1.65; font-weight: 500;\n color: #475569; margin: 0 0 clamp(26px, 3vw, 38px); padding-left: 20px;\n border-left: 3px solid var(--dm-red);\n }\n\n /* ── Article body ── */\n .dm-article-body { max-width: var(--dm-measure); }\n .dm-article-p {\n font-size: 18px !important; line-height: 1.8 !important; color: #334155; font-weight: 450;\n margin: 0 0 var(--dm-space-p);\n }\n .dm-article-h2 {\n font-size: clamp(23px, 2vw, 30px) !important; font-weight: 800 !important; letter-spacing: -.3px !important;\n color: #0f172a !important; line-height: 1.3 !important; margin: 48px 0 var(--dm-space-h);\n text-wrap: balance;\n }\n /* Each article block is wrapped in its OWN ScrollReveal \u003cdiv\u003e, so a bare\n :first-child rule matched every heading (each is the only child of its\n wrapper) and zeroed its top margin, collapsing the gap above every\n section heading. Scope the reset to only the article body's first block. */\n .dm-article-body \u003e :first-child :where(.dm-article-h2, .dm-article-h3),\n .dm-article-body \u003e .dm-article-h2:first-child,\n .dm-article-body \u003e .dm-article-h3:first-child { margin-top: 0; }\n .dm-article-h3 {\n font-size: clamp(19px, 1.5vw, 23px) !important; font-weight: 800 !important; letter-spacing: -.2px !important;\n color: #1e293b !important; line-height: 1.34 !important; margin: 40px 0 18px;\n text-wrap: balance;\n }\n @media (max-width: 600px) {\n .dm-article-p { font-size: 16px !important; }\n .dm-article-ul li, .dm-article-ol li { font-size: 15.5px; }\n .dm-article-h2 { font-size: clamp(22px, 6vw, 28px) !important; margin-top: 38px; }\n .dm-article-h3 { font-size: clamp(18px, 5vw, 22px) !important; }\n }\n\n .dm-article-ul, .dm-article-ol {\n /* Top margin (was 0) separates the list from the paragraph above it;\n matching bottom margin keeps it clear of the next heading/paragraph.\n Slightly larger than --dm-space-p so the list reads as its own block. */\n margin: clamp(26px, 2.4vw, 32px) 0 clamp(26px, 2.4vw, 32px);\n padding-left: 2px; list-style: none;\n display: flex; flex-direction: column; gap: 15px;\n }\n /* Prefixed with .dm-article-body so these beat the theme's global\n \".logico-front-end ul li:before\" fontello-glyph bullet (specificity 0,1,3),\n which otherwise replaces our clean red dot with a misaligned checkmark glyph\n and adds its own 1.7em indent. */\n .dm-article-body .dm-article-ul li, .dm-article-body .dm-article-ol li {\n position: relative; padding-left: 34px;\n font-size: 17px; line-height: 1.65; color: #334155; font-weight: 450;\n }\n .dm-article-body .dm-article-ul li::before {\n content: \"\"; position: absolute; left: 7px; top: 10px;\n width: 8px; height: 8px; border-radius: 50%; background: var(--dm-red);\n /* kill any inherited fontello glyph from the global rule */\n font-size: 0; line-height: 0;\n }\n .dm-article-ol { counter-reset: dm-li; }\n .dm-article-body .dm-article-ol li { counter-increment: dm-li; }\n .dm-article-body .dm-article-ol li::before {\n content: counter(dm-li); position: absolute; left: 0; top: 0;\n width: 24px; height: 24px; border-radius: 7px;\n background: rgba(192,18,39,0.10); color: var(--dm-red);\n font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center;\n }\n\n /* ── Quote ── */\n .dm-article-quote {\n position: relative; margin: var(--dm-space-quote) 0; padding: 30px 32px 30px 64px;\n background: linear-gradient(135deg, #fbf2f3 0%, #fdf7f8 100%);\n border-left: 4px solid var(--dm-red); border-radius: 0 18px 18px 0;\n box-shadow: 0 8px 28px rgba(192, 18, 39, 0.06);\n }\n .dm-article-quote::before {\n content: \"\\201C\"; position: absolute; left: 22px; top: 8px;\n font-family: Georgia, \"Times New Roman\", serif;\n font-size: 64px; line-height: 1; color: rgba(192, 18, 39, 0.28); font-weight: 700;\n }\n .dm-article-quote p {\n font-size: clamp(19px, 2vw, 23px); line-height: 1.5; font-weight: 600;\n font-style: italic; color: #1e293b; margin: 0;\n }\n .dm-article-quote cite {\n display: block; margin-top: 16px; font-size: 13px; font-weight: 700;\n font-style: normal; color: var(--dm-red); text-transform: uppercase; letter-spacing: .6px;\n }\n @media (max-width: 600px) { .dm-article-quote { padding: 26px 22px; } .dm-article-quote::before { display: none; } }\n\n /* ── Images ── */\n .dm-article-figure { margin: var(--dm-space-img) 0; }\n .dm-article-figure-img {\n position: relative; display: block; width: 100%; aspect-ratio: 16 / 9;\n border-radius: var(--dm-radius-img); overflow: hidden; box-shadow: 0 14px 34px rgba(15,23,42,0.10);\n }\n .dm-article-figure figcaption {\n margin-top: 14px; font-size: 13.5px; color: #94a3b8; font-weight: 500;\n text-align: center; font-style: italic;\n }\n\n /* ── Sidebar ── */\n .dm-blog-aside-wrap { position: relative; }\n .dm-blog-sidebar {\n display: flex; flex-direction: column; gap: 18px;\n position: sticky; top: var(--dm-sticky-top);\n }\n @media (max-width: 1024px) { .dm-blog-sidebar { position: static; gap: 20px; } }\n\n .dm-blog-widget {\n background: #fff; border: var(--dm-border); border-radius: var(--dm-radius-card);\n padding: 20px; box-shadow: var(--dm-shadow-card);\n }\n .dm-blog-widget-title {\n font-size: 13px !important; font-weight: 700 !important; text-transform: uppercase !important;\n letter-spacing: .8px !important; line-height: 1.35 !important; color: #0f172a !important;\n margin: 0 0 15px; padding: 0 0 12px;\n border-bottom: 1px solid rgba(15,23,42,0.08);\n overflow: visible; white-space: normal; word-break: normal;\n }\n\n /* Search */\n .dm-sr-only {\n position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;\n overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;\n }\n .dm-blog-search { position: relative; }\n .dm-blog-search-form { position: relative; }\n .dm-blog-search-input {\n width: 100%; height: 46px; border: 1.5px solid #e2e8f0; border-radius: 12px;\n padding: 0 42px 0 15px; font-size: 14px; font-family: inherit; color: #0f172a;\n background: #f8fafc; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;\n }\n .dm-blog-search-input::placeholder { color: #9c9c9c; }\n .dm-blog-search-input:focus {\n outline: none; border-color: var(--dm-red); background: #fff;\n box-shadow: 0 0 0 3px rgba(192,18,39,0.11);\n }\n .dm-blog-search-icon {\n position: absolute; right: 14px; top: 50%; transform: translateY(-50%);\n color: #94a3b8; pointer-events: none; display: flex;\n }\n .dm-blog-search-results {\n position: absolute; z-index: 20; top: calc(100% + 8px); left: 0; right: 0;\n background: #fff; border: 1px solid rgba(15,23,42,0.10); border-radius: 14px;\n box-shadow: 0 18px 42px rgba(15,23,42,0.14); overflow: hidden;\n }\n .dm-blog-search-results ul { list-style: none; margin: 0; padding: 6px; }\n .dm-blog-search-result {\n display: flex; flex-direction: column; gap: 3px; padding: 10px 12px;\n border-radius: 10px; text-decoration: none; transition: background .15s ease;\n }\n .dm-blog-search-result:hover { background: #f8fafc; }\n .dm-blog-search-result-cat {\n font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .8px; color: var(--dm-red);\n }\n .dm-blog-search-result-title { font-size: 13.5px; font-weight: 600; color: #1e293b; line-height: 1.35; }\n .dm-blog-search-empty { margin: 0; padding: 14px 12px; font-size: 13px; color: #64748b; }\n\n /* Recent posts */\n .dm-blog-recent { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; }\n .dm-blog-recent-item { display: flex; gap: 13px; align-items: center; text-decoration: none; }\n .dm-blog-recent-thumb {\n position: relative; flex: 0 0 62px; width: 62px; height: 62px;\n border-radius: 13px; overflow: hidden; background: #f1f5f9;\n }\n .dm-blog-recent-meta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }\n .dm-blog-recent-title {\n font-size: 13.5px; font-weight: 700; color: #1e293b; line-height: 1.35;\n display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n transition: color .2s ease;\n }\n .dm-blog-recent-item:hover .dm-blog-recent-title { color: var(--dm-red); }\n .dm-blog-recent-date { font-size: 11.5px; font-weight: 600; color: #94a3b8; }\n\n /* Categories */\n .dm-blog-categories { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }\n .dm-blog-category-item {\n display: flex; align-items: center; justify-content: space-between; gap: 10px;\n padding: 11px 2px; text-decoration: none; font-size: 14px; font-weight: 600; color: #334155 !important;\n border-bottom: 1px solid rgba(15,23,42,0.06); transition: color .2s ease, padding-left .2s ease;\n }\n .dm-blog-categories li:last-child .dm-blog-category-item { border-bottom: none; }\n .dm-blog-category-item:hover { color: var(--dm-red); padding-left: 6px; }\n .dm-blog-category-item \u003e span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .dm-blog-category-count {\n flex: 0 0 auto; font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9;\n min-width: 24px; height: 22px; border-radius: 7px; display: inline-flex;\n align-items: center; justify-content: center; padding: 0 7px;\n }\n\n /* CTA card */\n .dm-blog-cta-card { background: #1f1f1f; border-color: #1f1f1f; }\n .dm-blog-cta-title { font-size: 18px !important; font-weight: 800 !important; color: #fff !important; line-height: 1.32 !important; margin: 0 0 10px; letter-spacing: -.2px !important; }\n .dm-blog-cta-text { font-size: 13.5px; line-height: 1.6; color: #c7c7c7; margin: 0 0 20px; font-weight: 450; }\n .dm-blog-cta-btn {\n display: inline-flex; align-items: center; gap: 8px;\n background: var(--dm-red); color: #fff !important; font-size: 13.5px; font-weight: 700;\n padding: 12px 22px; border-radius: 12px; text-decoration: none;\n transition: background .2s ease, transform .2s ease;\n }\n .dm-blog-cta-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); }\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"div\",null,{\"className\":\"content-wrapper content-wrapper-may-contain-elementor-code content-wrapper-sidebar-position-none\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"Battery Simulation: The Secret to EV Route Pre-Validation\\\",\\\"description\\\":\\\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\\\",\\\"image\\\":[\\\"https://www.doormile.com/images/blog-post-pic-3.jpeg\\\"],\\\"datePublished\\\":\\\"2025-06-12T00:00:00.000Z\\\",\\\"dateModified\\\":\\\"2025-06-12T00:00:00.000Z\\\",\\\"author\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"Doormile Team\\\",\\\"url\\\":\\\"https://www.doormile.com\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"Doormile\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://www.doormile.com/images/cropped-image-2.png\\\"}},\\\"mainEntityOfPage\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\\\"},\\\"articleSection\\\":\\\"EV Fleet\\\"}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://www.doormile.com\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"Blog\\\",\\\"item\\\":\\\"https://www.doormile.com/blog\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"Battery Simulation: The Secret to EV Route Pre-Validation\\\",\\\"item\\\":\\\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\\\"}]}\"}}],[\"$\",\"div\",null,{\"className\":\"content\",\"children\":[\"$\",\"div\",null,{\"className\":\"content-inner\",\"children\":[[\"$\",\"article\",null,{\"className\":\"dm-single-blog\",\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$19\"}}],\"$L1a\",\"$L1b\"]}],\"$L1c\"]}]}]]}]\n"])</script><script>self.__next_f.push([1,"1d:I[22016,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\",\"/_next/static/chunks/0h0wg49c7el0c.js\"],\"\"]\n1e:I[2018,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\",\"/_next/static/chunks/0h0wg49c7el0c.js\"],\"ScrollReveal\"]\n1a:[\"$\",\"div\",null,{\"className\":\"custom-standard-hero-container\",\"children\":[\"$\",\"div\",null,{\"className\":\"custom-standard-hero-card dm-banner-card\",\"style\":{\"backgroundImage\":\"url(/images/blog-post-pic-3.jpeg)\",\"--hero-overlay\":\"linear-gradient(180deg, rgba(0,0,0,0.38) 0%, rgba(0,0,0,0.46) 55%, rgba(0,0,0,0.60) 100%)\"},\"children\":[\"$\",\"div\",null,{\"className\":\"e-con-inner dm-banner-inner\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-banner-category\",\"children\":\"EV Fleet\"}],[\"$\",\"h1\",null,{\"className\":\"dm-banner-title\",\"children\":\"Battery Simulation: The Secret to EV Route Pre-Validation\"}]]}]}]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"div\",null,{\"className\":\"dm-blog-wrap\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dm-meta-bar\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"dm-meta-breadcrumb\",\"aria-label\":\"Breadcrumb\",\"children\":[\"$\",\"ol\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/\",\"children\":\"Home\"}]}],[\"$\",\"li\",null,{\"aria-hidden\":\"true\",\"className\":\"dm-meta-sep\",\"children\":\"/\"}],[\"$\",\"li\",null,{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"children\":\"Blog\"}]}],[\"$\",\"li\",null,{\"aria-hidden\":\"true\",\"className\":\"dm-meta-sep\",\"children\":\"/\"}],[\"$\",\"li\",null,{\"aria-current\":\"page\",\"className\":\"dm-meta-current\",\"children\":\"Battery Simulation: The Secret to EV Route Pre-Validation\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"dm-meta-items\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-meta-item dm-meta-author\",\"children\":[[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",null,{\"d\":\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"}],[\"$\",\"circle\",null,{\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"}]]}],\"Doormile Team\"]}],[\"$\",\"span\",null,{\"className\":\"dm-meta-item\",\"children\":[[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"rect\",null,{\"x\":\"3\",\"y\":\"4\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\"}],[\"$\",\"line\",null,{\"x1\":\"16\",\"y1\":\"2\",\"x2\":\"16\",\"y2\":\"6\"}],[\"$\",\"line\",null,{\"x1\":\"8\",\"y1\":\"2\",\"x2\":\"8\",\"y2\":\"6\"}],[\"$\",\"line\",null,{\"x1\":\"3\",\"y1\":\"10\",\"x2\":\"21\",\"y2\":\"10\"}]]}],[\"$\",\"time\",null,{\"dateTime\":\"2025-06-12\",\"children\":\"Jun 12, 2025\"}]]}],[\"$\",\"span\",null,{\"className\":\"dm-meta-item\",\"children\":[[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",null,{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"9\"}],[\"$\",\"polyline\",null,{\"points\":\"12 7 12 12 15 14\"}]]}],2,\" min read\"]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"dm-blog-layout\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dm-blog-main\",\"children\":[[\"$\",\"p\",null,{\"className\":\"dm-blog-intro\",\"children\":\"A stranded EV is not just a late delivery. It means a vehicle is out of service, a customer is waiting, and the hub has to arrange recovery. Range checks need to happen before dispatch.\"}],[\"$\",\"div\",null,{\"className\":\"dm-article-body\",\"children\":[[\"$\",\"$L1e\",\"0\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"p\",null,{\"className\":\"dm-article-p\",\"children\":\"In last-mile logistics, a missed SLA is rarely caused by one big failure. It usually comes from small delays adding up across a route. Battery Simulation: The Secret to EV Route Pre-Validation looks at how delivery teams can spot those delays early and plan around them before vehicles leave the hub.\"}]}],[\"$\",\"$L1e\",\"1\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"h2\",null,{\"className\":\"dm-article-h2\",\"children\":\"Why this matters for fleet teams\"}]}],[\"$\",\"$L1e\",\"2\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"p\",null,{\"className\":\"dm-article-p\",\"children\":\"Every extra kilometre costs money. It uses fuel or charge, adds rider time, wears down vehicles, and increases the chance of a late delivery. When routes are built from fixed zones or old habits, those costs repeat every day.\"}]}],[\"$\",\"$L1e\",\"3\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"ul\",null,{\"className\":\"dm-article-ul\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Fewer vehicles needed for the same number of drops\"}],[\"$\",\"li\",\"1\",{\"children\":\"Lower cost per drop through better stop sequencing\"}],[\"$\",\"li\",\"2\",{\"children\":\"ETAs that match traffic, distance, and delivery windows\"}],[\"$\",\"li\",\"3\",{\"children\":\"Less fuel or charge used per completed order\"}]]}]}],[\"$\",\"$L1e\",\"4\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"h3\",null,{\"className\":\"dm-article-h3\",\"children\":\"From orders to dispatch\"}]}],[\"$\",\"$L1e\",\"5\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"p\",null,{\"className\":\"dm-article-p\",\"children\":\"A good dispatch plan starts with the basics: order locations, promised delivery windows, rider capacity, vehicle range, and known traffic trouble spots. MileTruth™ checks those inputs before dispatch so the team is not fixing avoidable mistakes on the road.\"}]}],[\"$\",\"$L1e\",\"6\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"figure\",null,{\"className\":\"dm-article-figure\",\"children\":[\"$L1f\",\"$L20\"]}]}],\"$L21\",\"$L22\",\"$L23\",\"$L24\",\"$L25\"]}]]}],\"$L26\"]}]]}]\n"])</script><script>self.__next_f.push([1,"27:T1fa8,"])</script><script>self.__next_f.push([1,"\n .dm-blog-footer {\n font-family: var(--font-manrope), sans-serif; --dm-red: #c01227; --dm-red-hover: #e31d32;\n /* The global theme applies 72px top/bottom section padding — strip it so the\n inner container is the single source of vertical rhythm (no double gap). */\n padding: 0 !important;\n }\n /* Neutralize the global theme's 120/80/60px UPPERCASE heading rules */\n .dm-blog-footer :where(h1, h2, h3, h4, h5, h6) {\n font-family: var(--font-manrope), sans-serif !important;\n text-transform: none !important;\n font-style: normal !important;\n font-weight: 800;\n }\n /* Neutralize the theme's .elementor-kit-5 a (red color + underline) */\n .dm-blog-footer a { text-decoration: none !important; }\n /* Shared content container — mirrors SingleBlog's .dm-blog-wrap (same 1280px\n max-width + 20→40px horizontal padding) so Prev/Next, Related and the CTA\n align to the exact same left/right edges as the article body above.\n Vertical rhythm: ~64px from the article end to the Prev/Next divider, then a\n consistent ~64–72px section→section gap (no 120px+ voids). */\n .dm-blog-footer-inner {\n max-width: 1280px; margin: 0 auto;\n /* Compact vertical rhythm on an 8px system. Top padding sets the\n article→Prev/Next gap (~24–32px); the inter-section gap sets the\n Prev/Next→Related gap (~32–48px). No large arbitrary voids. */\n /* Minimal bottom padding — the global site footer already contributes its\n own 20px top inset, so the CTA banner sits close to it without a void. */\n padding: clamp(24px, 3vw, 32px) clamp(20px, 4vw, 40px) clamp(8px, 1.5vw, 16px);\n display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px);\n }\n\n /* Prev / Next */\n .dm-prevnext {\n display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\n /* Halved from 40px: tight divider→cards spacing without crowding. */\n padding-top: clamp(16px, 2vw, 24px); border-top: 1px solid rgba(15,23,42,0.08);\n }\n @media (max-width: 640px) { .dm-prevnext { grid-template-columns: 1fr; } }\n .dm-prevnext-placeholder { display: block; }\n .dm-prevnext-card {\n display: flex; gap: 16px; align-items: center; padding: 16px;\n background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px;\n text-decoration: none; transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;\n }\n .dm-prevnext-card:hover {\n transform: translateY(-4px); border-color: rgba(192,18,39,0.2);\n box-shadow: 0 16px 34px rgba(192,18,39,0.10);\n }\n .dm-prevnext-thumb {\n position: relative; flex: 0 0 80px; width: 80px; height: 80px;\n border-radius: 16px; overflow: hidden; background: #f1f5f9;\n }\n .dm-prevnext-text { display: flex; flex-direction: column; gap: 5px; min-width: 0; }\n .dm-prevnext-next { text-align: right; }\n .dm-prevnext-next .dm-prevnext-text { align-items: flex-end; }\n .dm-prevnext-label {\n display: inline-flex; align-items: center; gap: 6px;\n font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--dm-red);\n }\n .dm-prevnext-cat { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: .5px; }\n .dm-prevnext-title {\n font-size: 15.5px; font-weight: 700; color: #1e293b; line-height: 1.4;\n display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n transition: color .2s ease;\n }\n .dm-prevnext-card:hover .dm-prevnext-title { color: var(--dm-red); }\n\n /* Related */\n .dm-related-heading {\n font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 850 !important; letter-spacing: -.4px !important;\n line-height: 1.25 !important; color: #0f172a !important; margin: 0 0 24px;\n }\n .dm-related-grid {\n display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px;\n }\n @media (max-width: 1024px) { .dm-related-grid { grid-template-columns: repeat(2, 1fr); } }\n @media (max-width: 700px) { .dm-related-grid { grid-template-columns: 1fr; gap: 24px; } }\n\n .dm-related-card {\n display: flex; flex-direction: column; height: 100%;\n background: #fff; border: 1px solid rgba(15,23,42,0.09); border-radius: 22px;\n overflow: hidden; box-shadow: 0 4px 24px rgba(15,23,42,0.05); text-decoration: none;\n transition: transform .4s cubic-bezier(0.2,0.8,0.2,1), box-shadow .4s ease, border-color .4s ease;\n }\n .dm-related-card:hover {\n transform: translateY(-8px); box-shadow: 0 22px 44px rgba(192,18,39,0.13);\n border-color: rgba(192,18,39,0.2);\n }\n .dm-related-img {\n position: relative; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #f1f5f9;\n }\n .dm-related-img img { transition: transform .5s cubic-bezier(0.2,0.8,0.2,1); }\n .dm-related-card:hover .dm-related-img img { transform: scale(1.05); }\n .dm-related-badge {\n position: absolute; top: 14px; left: 14px; z-index: 5; background: var(--dm-red); color: #fff;\n font-size: 9px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.2px;\n padding: 5px 11px; border-radius: 8px; box-shadow: 0 4px 12px rgba(192,18,39,0.25);\n }\n .dm-related-body { display: flex; flex-direction: column; flex: 1; padding: 22px; }\n .dm-related-card-title {\n font-size: 17px !important; font-weight: 800 !important; color: #1e293b !important; line-height: 1.4 !important;\n letter-spacing: -.2px !important; margin: 0 0 10px;\n display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n transition: color .2s ease;\n }\n .dm-related-card:hover .dm-related-card-title { color: var(--dm-red); }\n .dm-related-card-excerpt {\n font-size: 13.5px; font-weight: 500; color: #64748b; line-height: 1.6; margin: 0 0 18px;\n display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n }\n .dm-related-readmore {\n margin-top: auto; display: inline-flex; align-items: center; gap: 7px;\n font-size: 12.5px; font-weight: 800; color: var(--dm-red);\n text-transform: uppercase; letter-spacing: .6px;\n }\n .dm-related-readmore-arrow { transition: transform .3s cubic-bezier(0.2,0.8,0.2,1); }\n .dm-related-card:hover .dm-related-readmore-arrow { transform: translateX(5px); }\n\n /* Contact CTA banner */\n .dm-blog-contact-cta {\n display: flex; align-items: center; justify-content: space-between; gap: 32px;\n flex-wrap: wrap;\n background: linear-gradient(135deg, #1a1a1a 0%, #2d1417 100%);\n border-radius: 30px; padding: clamp(32px, 4vw, 56px);\n position: relative; overflow: hidden;\n }\n .dm-blog-contact-cta::after {\n content: \"\"; position: absolute; right: -80px; top: -80px; width: 300px; height: 300px;\n background: radial-gradient(circle, rgba(192,18,39,0.40), transparent 70%);\n pointer-events: none;\n }\n .dm-blog-contact-cta-content { position: relative; z-index: 1; max-width: 640px; }\n .dm-blog-contact-eyebrow {\n display: inline-block; font-size: 12px; font-weight: 800; text-transform: uppercase;\n letter-spacing: 1.4px; color: #ff8088; margin-bottom: 14px;\n }\n .dm-blog-contact-title {\n font-size: clamp(22px, 2.2vw, 28px) !important; font-weight: 800 !important; line-height: 1.25 !important;\n letter-spacing: -.3px !important; color: #ffffff !important; margin: 0 0 12px; text-wrap: balance;\n }\n .dm-blog-contact-sub {\n font-size: 15.5px; line-height: 1.65; color: #e2e2e2; margin: 0; font-weight: 450;\n }\n .dm-blog-contact-btn {\n position: relative; z-index: 1; flex-shrink: 0;\n display: inline-flex; align-items: center; justify-content: center; gap: 10px;\n background: var(--dm-red); color: #fff !important; font-size: 15px; font-weight: 700;\n padding: 16px 32px; border-radius: 16px; text-decoration: none;\n box-shadow: 0 10px 26px rgba(192,18,39,0.34);\n transition: background .2s ease, transform .2s ease;\n }\n .dm-blog-contact-btn:hover { background: var(--dm-red-hover); transform: translateY(-2px); }\n @media (max-width: 720px) {\n .dm-blog-contact-cta { flex-direction: column; align-items: flex-start; gap: 26px; }\n .dm-blog-contact-btn { width: 100%; }\n }\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"section\",null,{\"className\":\"dm-blog-footer\",\"aria-label\":\"More articles\",\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$27\"}}],\"$L28\"]}]\n"])</script><script>self.__next_f.push([1,"29:I[5500,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\",\"/_next/static/chunks/0h0wg49c7el0c.js\"],\"Image\"]\n2a:I[23096,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\",\"/_next/static/chunks/0h0wg49c7el0c.js\"],\"default\"]\n1f:[\"$\",\"span\",null,{\"className\":\"dm-article-figure-img\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-3.jpeg\",\"alt\":\"Battery Simulation: The Secret to EV Route Pre-Validation\",\"fill\":true,\"sizes\":\"(max-width: 768px) 100vw, 760px\",\"style\":{\"objectFit\":\"cover\"}}]}]\n20:[\"$\",\"figcaption\",null,{\"children\":\"EV Fleet: route planning decisions made before dispatch.\"}]\n21:[\"$\",\"$L1e\",\"7\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"blockquote\",null,{\"className\":\"dm-article-quote\",\"children\":[[\"$\",\"p\",null,{\"children\":\"A route should be checked before the rider leaves, not explained after the customer calls.\"}],[\"$\",\"cite\",null,{\"children\":\"Doormile Operations\"}]]}]}]\n22:[\"$\",\"$L1e\",\"8\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"h2\",null,{\"className\":\"dm-article-h2\",\"children\":\"Putting it into practice\"}]}]\n23:[\"$\",\"$L1e\",\"9\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"p\",null,{\"className\":\"dm-article-p\",\"children\":\"The best improvements usually start with simple measurements. Track distance per route, failed delivery windows, rider idle time, and orders moved between vehicles after dispatch. Those numbers show where the operation is leaking time.\"}]}]\n24:[\"$\",\"$L1e\",\"10\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"ol\",null,{\"className\":\"dm-article-ol\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Benchmark today's distance, fleet size, and on-time rate.\"}],[\"$\",\"li\",\"1\",{\"children\":\"Include vehicle capacity, delivery windows, rider shifts, and battery charge.\"}],[\"$\",\"li\",\"2\",{\"children\":\"Check routes against traffic and customer commitments before dispatch.\"}],[\"$\",\"li\",\"3\",{\"children\":\"Compare the next dispatch cycle against the old plan.\"}]]}]}]\n25:[\"$\",\"$L1e\",\"11\",{\"delay\":0,\"duration\":0.6,\"yOffset\":20,\"children\":[\"$\",\"p\",null,{\"className\":\"dm-article-p\",\"children\":\"Better routing is not about pushing riders harder. It is about giving them a plan that already accounts for the real day ahead.\"}]}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"div\",null,{\"className\":\"dm-blog-aside-wrap\",\"children\":[\"$\",\"aside\",null,{\"className\":\"dm-blog-sidebar\",\"aria-label\":\"Blog sidebar\",\"children\":[[\"$\",\"section\",null,{\"className\":\"dm-blog-widget\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"dm-blog-widget-title\",\"children\":\"Search\"}],[\"$\",\"$L2a\",null,{}]]}],[\"$\",\"section\",null,{\"className\":\"dm-blog-widget\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"dm-blog-widget-title\",\"children\":\"Recent Posts\"}],[\"$\",\"ul\",null,{\"className\":\"dm-blog-recent\",\"children\":[[\"$\",\"li\",\"how-ai-is-transforming-last-mile-ev-delivery\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/how-ai-is-transforming-last-mile-ev-delivery\",\"className\":\"dm-blog-recent-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-thumb\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-17.png\",\"alt\":\"How Better Planning Improves Last-Mile EV Delivery\",\"fill\":true,\"sizes\":\"62px\",\"style\":{\"objectFit\":\"cover\"}}]}],[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-meta\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-title\",\"children\":\"How Better Planning Improves Last-Mile EV Delivery\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-10-02\",\"className\":\"dm-blog-recent-date\",\"children\":\"Oct 2, 2025\"}]]}]]}]}],[\"$\",\"li\",\"42-less-distance-insights-from-our-hyderabad-hub\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/42-less-distance-insights-from-our-hyderabad-hub\",\"className\":\"dm-blog-recent-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-thumb\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-15.png\",\"alt\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"fill\":true,\"sizes\":\"62px\",\"style\":{\"objectFit\":\"cover\"}}]}],[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-meta\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-title\",\"children\":\"42% Less Distance: Insights from Our Hyderabad Hub\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-09-18\",\"className\":\"dm-blog-recent-date\",\"children\":\"Sep 18, 2025\"}]]}]]}]}],[\"$\",\"li\",\"miletruth-ai-10-stages-to-smarter-dispatch\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/miletruth-ai-10-stages-to-smarter-dispatch\",\"className\":\"dm-blog-recent-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-thumb\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-31.png\",\"alt\":\"MileTruth™: 10 Stages to Smarter Dispatch\",\"fill\":true,\"sizes\":\"62px\",\"style\":{\"objectFit\":\"cover\"}}]}],[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-meta\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-title\",\"children\":\"MileTruth™: 10 Stages to Smarter Dispatch\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-09-05\",\"className\":\"dm-blog-recent-date\",\"children\":\"Sep 5, 2025\"}]]}]]}]}],[\"$\",\"li\",\"the-ev-paradox-solving-range-anxiety-for-urban-fleets\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\",\"className\":\"dm-blog-recent-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-thumb\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/ev-paradox.png\",\"alt\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"fill\":true,\"sizes\":\"62px\",\"style\":{\"objectFit\":\"cover\"}}]}],[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-meta\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-recent-title\",\"children\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-08-21\",\"className\":\"dm-blog-recent-date\",\"children\":\"Aug 21, 2025\"}]]}]]}]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"dm-blog-widget\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"dm-blog-widget-title\",\"children\":\"Categories\"}],[\"$\",\"ul\",null,{\"className\":\"dm-blog-categories\",\"children\":[[\"$\",\"li\",\"Case Study\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Case Study\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":1}]]}]}],[\"$\",\"li\",\"EV Fleet\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"EV Fleet\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":2}]]}]}],[\"$\",\"li\",\"Fleet Management\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Fleet Management\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":1}]]}]}],[\"$\",\"li\",\"MileTruth\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"MileTruth\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":1}]]}]}],\"$L2b\",\"$L2c\",\"$L2d\"]}]]}],\"$L2e\"]}]}]\n"])</script><script>self.__next_f.push([1,"28:[\"$\",\"div\",null,{\"className\":\"dm-blog-footer-inner\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"dm-prevnext\",\"aria-label\":\"Article navigation\",\"children\":[[\"$\",\"$L1d\",null,{\"href\":\"/blog/how-doormile-maintains-99-9-sla-compliance-at-scale\",\"className\":\"dm-prevnext-card dm-prevnext-prev\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-prevnext-thumb\",\"children\":[\"$\",\"$L29\",null,{\"src\":\"/images/last-mile-approach.jpg\",\"alt\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\",\"fill\":true,\"sizes\":\"80px\",\"style\":{\"objectFit\":\"cover\"}}]}],[\"$\",\"span\",null,{\"className\":\"dm-prevnext-text\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-prevnext-label\",\"children\":[[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"19\",\"y1\":\"12\",\"x2\":\"5\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 19 5 12 12 5\"}]]}],\"Previous\"]}],[\"$\",\"span\",null,{\"className\":\"dm-prevnext-cat\",\"children\":\"Operations\"}],[\"$\",\"span\",null,{\"className\":\"dm-prevnext-title\",\"children\":\"How Doormile Maintains 99.9% SLA Compliance at Scale\"}]]}]]}],[\"$\",\"span\",null,{\"className\":\"dm-prevnext-placeholder\"}]]}],[\"$\",\"div\",null,{\"className\":\"dm-related\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"dm-related-heading\",\"children\":\"Related Articles\"}],[\"$\",\"div\",null,{\"className\":\"dm-related-grid\",\"children\":[[\"$\",\"$L1e\",\"the-ev-paradox-solving-range-anxiety-for-urban-fleets\",{\"delay\":0,\"duration\":0.7,\"yOffset\":30,\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/the-ev-paradox-solving-range-anxiety-for-urban-fleets\",\"className\":\"dm-related-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dm-related-img\",\"children\":[[\"$\",\"$L29\",null,{\"src\":\"/images/ev-paradox.png\",\"alt\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\",\"fill\":true,\"sizes\":\"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw\",\"style\":{\"objectFit\":\"cover\"}}],[\"$\",\"span\",null,{\"className\":\"dm-related-badge\",\"children\":\"EV Fleet\"}]]}],[\"$\",\"div\",null,{\"className\":\"dm-related-body\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"dm-related-card-title\",\"children\":\"The EV Paradox: Solving Range Anxiety for Urban Fleets\"}],[\"$\",\"p\",null,{\"className\":\"dm-related-card-excerpt\",\"children\":\"Electric vehicles lower running costs, but battery range changes how routes must be planned before dispatch.\"}],[\"$\",\"span\",null,{\"className\":\"dm-related-readmore\",\"children\":[\"Read More\",[\"$\",\"svg\",null,{\"className\":\"dm-related-readmore-arrow\",\"width\":\"16\",\"height\":\"16\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 5 19 12 12 19\"}]]}]]}]]}]]}]}],[\"$\",\"$L1e\",\"how-ai-is-transforming-last-mile-ev-delivery\",{\"delay\":0.08,\"duration\":0.7,\"yOffset\":30,\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/how-ai-is-transforming-last-mile-ev-delivery\",\"className\":\"dm-related-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dm-related-img\",\"children\":[[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-17.png\",\"alt\":\"How Better Planning Improves Last-Mile EV Delivery\",\"fill\":true,\"sizes\":\"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw\",\"style\":{\"objectFit\":\"cover\"}}],[\"$\",\"span\",null,{\"className\":\"dm-related-badge\",\"children\":\"Technology\"}]]}],[\"$\",\"div\",null,{\"className\":\"dm-related-body\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"dm-related-card-title\",\"children\":\"How Better Planning Improves Last-Mile EV Delivery\"}],[\"$\",\"p\",null,{\"className\":\"dm-related-card-excerpt\",\"children\":\"A practical look at how EV fleets can plan routes, manage charging, and keep delivery promises without adding unnecessary vehicles.\"}],[\"$\",\"span\",null,{\"className\":\"dm-related-readmore\",\"children\":[\"Read More\",[\"$\",\"svg\",null,{\"className\":\"dm-related-readmore-arrow\",\"width\":\"16\",\"height\":\"16\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 5 19 12 12 19\"}]]}]]}]]}]]}]}],[\"$\",\"$L1e\",\"42-less-distance-insights-from-our-hyderabad-hub\",{\"delay\":0.16,\"duration\":0.7,\"yOffset\":30,\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/42-less-distance-insights-from-our-hyderabad-hub\",\"className\":\"dm-related-card\",\"children\":[\"$L2f\",\"$L30\"]}]}]]}]]}],\"$L31\"]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"li\",\"Operations\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Operations\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":1}]]}]}]\n2c:[\"$\",\"li\",\"Sustainability\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Sustainability\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":1}]]}]}]\n2d:[\"$\",\"li\",\"Technology\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"dm-blog-category-item\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Technology\"}],[\"$\",\"span\",null,{\"className\":\"dm-blog-category-count\",\"children\":2}]]}]}]\n2e:[\"$\",\"section\",null,{\"className\":\"dm-blog-widget dm-blog-cta-card\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"dm-blog-cta-title\",\"children\":\"Planning delivery routes?\"}],[\"$\",\"p\",null,{\"className\":\"dm-blog-cta-text\",\"children\":\"Talk to us about reducing wasted distance, missed windows, and avoidable vehicle time.\"}],[\"$\",\"$L1d\",null,{\"href\":\"/contact\",\"className\":\"dm-blog-cta-btn\",\"children\":[\"Contact Us\",[\"$\",\"svg\",null,{\"width\":\"18\",\"height\":\"18\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 5 19 12 12 19\"}]]}]]}]]}]\n2f:[\"$\",\"div\",null,{\"className\":\"dm-related-img\",\"children\":[[\"$\",\"$L29\",null,{\"src\":\"/images/blog-post-pic-15.png\",\"alt\":\"42% Less Distance: Insights from Our Hyderabad Hub\",\"fill\":true,\"sizes\":\"(max-width: 700px) 100vw, (max-width: 1024px) 50vw, 33vw\",\"style\":{\"objectFit\":\"cover\"}}],[\"$\",\"span\",null,{\"className\":\"dm-related-badge\",\"children\":\"Case Study\"}]]}]\n30:[\"$\",\"div\",null,{\"className\":\"dm-related-body\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"dm-related-card-title\",\"children\":\"42% Less Distance: Insights from Our Hyderabad Hub\"}],[\"$\",\"p\",null,{\"className\":\"dm-related-card-excerpt\",\"children\":\"A practical look at how one Hyderabad hub reduced distance, used fewer vehicles, and protected delivery windows with better route planning.\"}],[\"$\",\"span\",null,{\"className\":\"dm-related-readmore\",\"children\":[\"Read More\",[\"$\",\"svg\",null,{\"className\":\"dm-related-readmore-arrow\",\"width\":\"16\",\"height\":\"16\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 5 19 12 12 19\"}]]}]]}]]}]\n31:[\"$\",\"div\",null,{\"className\":\"dm-blog-contact-cta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dm-blog-contact-cta-content\",\"children\":[[\"$\",\"span\",null,{\"className\":\"dm-blog-contact-eyebrow\",\"children\":\"Let's talk logistics\"}],[\"$\",\"h2\",null,{\"className\":\"dm-blog-contact-title\",\"children\":\"Ready to move smarter with Doormile?\"}],[\"$\",\"p\",null,{\"className\":\"dm-blog-contact-sub\",\"children\":\"Tell us about your fleet and routes — we'll show you where the distance, vehicles and emissions are hiding.\"}]]}],[\"$\",\"$L1d\",null,{\"href\":\"/contact\",\"className\":\"dm-blog-contact-btn\",\"children\":[\"Get in Touch\",[\"$\",\"svg\",null,{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2.5\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"line\",null,{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"}],[\"$\",\"polyline\",null,{\"points\":\"12 5 19 12 12 19\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"32:I[27201,[\"/_next/static/chunks/06n0m6ck5r8gy.js\",\"/_next/static/chunks/0n.gft-j~h_v_.js\",\"/_next/static/chunks/04xui0pxt.et1.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0p8hh7bd-e4bn.js\"],\"IconMark\"]\nf:null\n"])</script><script>self.__next_f.push([1,"18:[[\"$\",\"title\",\"0\",{\"children\":\"Battery Simulation: The Secret to EV Route Pre-Validation – Doormile\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Doormile Team\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"EV Fleet,last-mile logistics,EV fleet,MileTruth,route optimisation\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"5\",{\"rel\":\"canonical\",\"href\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"Battery Simulation: The Secret to EV Route Pre-Validation\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://www.doormile.com/blog/battery-simulation-the-secret-to-ev-route-pre-validation\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"Doormile\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image\",\"content\":\"https://www.doormile.com/images/blog-post-pic-3.jpeg\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:alt\",\"content\":\"Battery Simulation: The Secret to EV Route Pre-Validation\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"13\",{\"property\":\"article:published_time\",\"content\":\"2025-06-12T00:00:00.000Z\"}],[\"$\",\"meta\",\"14\",{\"property\":\"article:author\",\"content\":\"Doormile Team\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:title\",\"content\":\"Battery Simulation: The Secret to EV Route Pre-Validation\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:description\",\"content\":\"Before a rider leaves the hub, every EV route should be checked against real charge capacity and the expected return plan.\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image\",\"content\":\"https://www.doormile.com/images/blog-post-pic-3.jpeg\"}],[\"$\",\"link\",\"19\",{\"rel\":\"shortcut icon\",\"href\":\"/images/cropped-image-2.png\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.14w3bhkxgz946.ico\",\"sizes\":\"40x40\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"21\",{\"rel\":\"icon\",\"href\":\"/images/cropped-image-2.png\"}],[\"$\",\"link\",\"22\",{\"rel\":\"apple-touch-icon\",\"href\":\"/images/cropped-image-2.png\"}],[\"$\",\"$L32\",\"23\",{}]]\n"])</script></body></html> |