PageSourceSearch

https://www.evengineeringonline.com/ev-engineering-articles/

html evengineeringonline.com collected 2026-09-29 05:32:59 UTC 210,683 bytes, 3,161 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US">
3<head >
4<meta charset="UTF-8" />
5<meta name="viewport" content="width=device-width, initial-scale=1" />
6	<meta property="fb:admins" content="1140409510" />
7	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
8	<meta property="fb:admins" content="107031532675062" />
9	<meta name="msvalidate.01" content="40BA1B879066C83CDFCA374CA4B490C3" />
10	<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
11
12	<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v28.5) - https://yoast.com/product/yoast-seo-premium-wordpress/ -->
13	<title>EV Engineering Articles - EV Engineering &amp; Infrastructure</title>
14	<link rel="canonical" href="https://www.evengineeringonline.com/ev-engineering-articles/" />
15	<link rel="next" href="https://www.evengineeringonline.com/ev-engineering-articles/page/2/" />
16	<meta property="og:locale" content="en_US" />
17	<meta property="og:type" content="article" />
18	<meta property="og:title" content="EV Engineering Articles" />
19	<meta property="og:url" content="https://www.evengineeringonline.com/ev-engineering-articles/" />
20	<meta property="og:site_name" content="EV Engineering &amp; Infrastructure" />
21	<meta name="twitter:card" content="summary_large_image" />
22	
22<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","CollectionPage"],"@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/","url":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/","name":"EV Engineering Articles - EV Engineering &amp; Infrastructure","isPartOf":{"@id":"https:\/\/www.evengineeringonline.com\/#website"},"datePublished":"2023-11-03T20:37:03+00:00","breadcrumb":{"@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/#breadcrumb"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.evengineeringonline.com\/"},{"@type":"ListItem","position":2,"name":"EV Engineering Articles"}]},{"@type":"WebSite","@id":"https:\/\/www.evengineeringonline.com\/#website","url":"https:\/\/www.evengineeringonline.com\/","name":"EV Engineering &amp; Infrastructure","description":"Technical insights on the vehicles of tomorrow.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evengineeringonline.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script>
22
23	<!-- / Yoast SEO Premium plugin. -->
24
25
26<link rel='dns-prefetch' href='//scripts.wtwhmedia.com' />
27<link rel='dns-prefetch' href='//static.addtoany.com' />
28<link rel='dns-prefetch' href='//fonts.googleapis.com' />
29<link rel="alternate" type="application/rss+xml" title="EV Engineering &amp; Infrastructure &raquo; Feed" href="https://www.evengineeringonline.com/feed/" />
30<link rel="alternate" type="application/rss+xml" title="EV Engineering &amp; Infrastructure &raquo; Comments Feed" href="https://www.evengineeringonline.com/comments/feed/" />
31<!-- Google Tag Manager GLOBAL -->
32<script>
vendor: 331 bytes, lines 32-36
32(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
33new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
34j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
35'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
36})(window,document,'script','dataLayer','
36GTM-MMC9PJ9
vendor: 3 bytes, line 36
36');
36</script>
36
37<!-- End Google Tag Manager GLOBAL-->
38
39<!-- Google Tag Manager -->
40<script>
vendor: 331 bytes, lines 40-44
40(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
41new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
42j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
43'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
44})(window,document,'script','dataLayer','
44GTM-WKS3GR3W
vendor: 3 bytes, line 44
44');
44</script>
44
45<!-- End Google Tag Manager -->
46
47<style id="wp-img-auto-sizes-contain-inline-css">
48img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
49/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
50</style>
51<link rel='stylesheet' id='theme-wtwh-amplifying-css' href='https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/style.css?ver=1749463231' media='all' />
52<style id="wp-emoji-styles-inline-css">
53
54	img.wp-smiley, img.emoji {
55		display: inline !important;
56		border: none !important;
57		box-shadow: none !important;
58		height: 1em !important;
59		width: 1em !important;
60		margin: 0 0.07em !important;
61		vertical-align: -0.1em !important;
62		background: none !important;
63		padding: 0 !important;
64	}
65/*# sourceURL=wp-emoji-styles-inline-css */
66</style>
67<style id="wp-block-library-inline-css">
68:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
68--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
69
70/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
71</style>
72<style id="classic-theme-styles-inline-css">
73/*! This file is auto-generated */
74.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
75/*# sourceURL=/wp-includes/css/classic-themes.min.css */
76</style>
77
78<style id="global-styles-inline-css">
79:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
790) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
79.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
80/*# sourceURL=global-styles-inline-css */
81</style>
82
83<link rel='stylesheet' id='buttons-css' href='https://www.evengineeringonline.com/wp-includes/css/buttons.min.css?ver=7.1.2' media='all' />
84<link rel='stylesheet' id='dashicons-css' href='https://www.evengineeringonline.com/wp-includes/css/dashicons.min.css?ver=7.1.2' media='all' />
85<link rel='stylesheet' id='mediaelement-css' href='https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver=4.2.17' media='all' />
86<link rel='stylesheet' id='wp-mediaelement-css' href='https://www.evengineeringonline.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver=7.1.2' media='all' />
87<link rel='stylesheet' id='media-views-css' href='https://www.evengineeringonline.com/wp-includes/css/media-views.min.css?ver=7.1.2' media='all' />
88<link rel='stylesheet' id='imgareaselect-css' href='https://www.evengineeringonline.com/wp-includes/js/imgareaselect/imgareaselect.css?ver=0.9.8' media='all' />
89<link rel='stylesheet' id='frontend-sponsored-ads-css-css' href='https://www.evengineeringonline.com/wp-content/plugins/sponsored-content-ad/css/frontend-sponsored-ads.css?ver=1.01202609291790659979' media='all' />
90<link rel='stylesheet' id='ea-fonts-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300,700&#038;ver=7.1.2' media='all' />
91<link rel='stylesheet' id='ea-style-css' href='https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/assets/css/main.css?ver=1749463231' media='all' />
92<link rel='stylesheet' id='addtoany-css' href='https://www.evengineeringonline.com/wp-content/plugins/add-to-any/addtoany.min.css?ver=1.16' media='all' />
93<script id="addtoany-core-js-before">
94window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={};
95
96//# sourceURL=addtoany-core-js-before
97</script>
vendor: 1 bytes, line 97
97
98<script id="addtoany-core-js" defer src="https://static.addtoany.com/menu/page.js"></script>
vendor: 1 bytes, line 98
98
99<script id="jquery-core-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 99
99
100<script id="jquery-migrate-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 100
100
101<script id="addtoany-jquery-js" defer src="https://www.evengineeringonline.com/wp-content/plugins/add-to-any/addtoany.min.js?ver=1.1"></script>
vendor: 1 bytes, line 101
101
102<script id="utils-js-extra">
103var userSettings = {"url":"/","uid":"0","time":"1790659979","secure":"1"};
104//# sourceURL=utils-js-extra
105</script>
vendor: 1 bytes, line 105
105
106<script id="utils-js" src="https://www.evengineeringonline.com/wp-includes/js/utils.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 106
106
107<script id="moxiejs-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/moxie.min.js?ver=1.3.5.1"></script>
vendor: 1 bytes, line 107
107
108<script id="plupload-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/plupload.min.js?ver=2.1.9"></script>
vendor: 1 bytes, line 108
108
109<script id="frontend-sponsored-ads-script-js" src="https://www.evengineeringonline.com/wp-content/plugins/sponsored-content-ad/js/frontend-sponsored-ads.js"></script>
vendor: 1 bytes, line 109
109
110<script id="wtwh-uni-gam-unified-ad-logic-js-extra">
111var wtwh_gam_ad_config = {"slots":[{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_header","div_id":"div-gpt-eveng-header","desktop_sizes":["728x90"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_sidebar1","div_id":"div-gpt-eveng_sidebar1","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_sidebarbotton","div_id":"div-gpt-eveng_sidebarbotton","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_largeleader","div_id":"jumbo-banner-ad-container","desktop_sizes":["970x90","970x250"],"mobile_sizes":["0x0"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_wallpaper","div_id":"div-gpt-wallpaper","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"wallpaper"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_allstreamflex","div_id":"div-gpt-allstreamflex","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"spotible"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_allstreamprelude","div_id":"div-gpt-allstreamprelude","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"spotible"}],"prestitial":{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_prestitial","div_id":"gam-holder-prestitial-banner","desktop_sizes":["640x480"],"mobile_sizes":["300x225"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"prestitial"},"enable_single_request":"","collapse_empty_divs":"1","page_url":"https://www.evengineeringonline.com/ev-engineering-articles/","default_page_targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"auto_display_ads":"1","lazy_load_ads":"","load_gpt_library":"","has_keyword_ads":"0"};
112var wtwh_gam_ga4_targeting_values = {"ga4_targeting_values":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"}};
113//# sourceURL=wtwh-uni-gam-unified-ad-logic-js-extra
114</script>
vendor: 1 bytes, line 114
114
115<script id="wtwh-uni-gam-unified-ad-logic-js" src="https://www.evengineeringonline.com/wp-content/plugins/wtwh-universal-gam/assets/js/frontend/ad-config/unified-ad-logic.js?ver=1790659979"></script>
115
116<link rel="https://api.w.org/" href="https://www.evengineeringonline.com/wp-json/" /><style>
117		#category-posts-5-internal ul {padding: 0;}
118#category-posts-5-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;}
119#category-posts-5-internal .cat-post-author {margin-bottom: 0;}
120#category-posts-5-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;}
121#category-posts-5-internal .cat-post-item:before {content: ""; clear: both;}
122#category-posts-5-internal .cat-post-excerpt-more {display: inline-block;}
123#category-posts-5-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;}
124#category-posts-5-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;}
125#category-posts-5-internal [class*=cat-post-tax] {font-size: 0.85em;}
126#category-posts-5-internal [class*=cat-post-tax] * {display:inline-block;}
127#category-posts-5-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
128#category-posts-5-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;}
129#category-posts-5-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
130#category-posts-5-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;}
131#category-posts-5-internal .cat-post-crop {overflow:hidden;display:block;}
132#category-posts-5-internal p {margin:5px 0 0 0}
133#category-posts-5-internal li > div {margin:5px 0 0 0; clear:both;}
134#category-posts-5-internal .dashicons {vertical-align:middle;}
135#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;}
136#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;}
137#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;}
138#category-posts-5-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;}
139#category-posts-5-internal .cat-post-thumbnail {max-width:100%;}
140#category-posts-5-internal .cat-post-item img {margin: initial;}
141#category-posts-5-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;}
142#category-posts-5-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);}
143#category-posts-4-internal ul {padding: 0;}
144#category-posts-4-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;}
145#category-posts-4-internal .cat-post-author {margin-bottom: 0;}
146#category-posts-4-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;}
147#category-posts-4-internal .cat-post-item:before {content: ""; clear: both;}
148#category-posts-4-internal .cat-post-excerpt-more {display: inline-block;}
149#category-posts-4-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;}
150#category-posts-4-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;}
151#category-posts-4-internal [class*=cat-post-tax] {font-size: 0.85em;}
152#category-posts-4-internal [class*=cat-post-tax] * {display:inline-block;}
153#category-posts-4-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
154#category-posts-4-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;}
155#category-posts-4-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
156#category-posts-4-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;}
157#category-posts-4-internal .cat-post-crop {overflow:hidden;display:block;}
158#category-posts-4-internal p {margin:5px 0 0 0}
159#category-posts-4-internal li > div {margin:5px 0 0 0; clear:both;}
160#category-posts-4-internal .dashicons {vertical-align:middle;}
161#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;}
162#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;}
163#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;}
164#category-posts-4-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;}
165#category-posts-4-internal .cat-post-thumbnail {max-width:100%;}
166#category-posts-4-internal .cat-post-item img {margin: initial;}
167#category-posts-4-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;}
168#category-posts-4-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);}
169#category-posts-3-internal ul {padding: 0;}
170#category-posts-3-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;}
171#category-posts-3-internal .cat-post-author {margin-bottom: 0;}
172#category-posts-3-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;}
173#category-posts-3-internal .cat-post-item:before {content: ""; clear: both;}
174#category-posts-3-internal .cat-post-excerpt-more {display: inline-block;}
175#category-posts-3-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;}
176#category-posts-3-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;}
177#category-posts-3-internal [class*=cat-post-tax] {font-size: 0.85em;}
178#category-posts-3-internal [class*=cat-post-tax] * {display:inline-block;}
179#category-posts-3-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
180#category-posts-3-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;}
181#category-posts-3-internal .cat-post-item:after {content: ""; display: table;	clear: both;}
182#category-posts-3-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;}
183#category-posts-3-internal .cat-post-crop {overflow:hidden;display:block;}
184#category-posts-3-internal p {margin:5px 0 0 0}
185#category-posts-3-internal li > div {margin:5px 0 0 0; clear:both;}
186#category-posts-3-internal .dashicons {vertical-align:middle;}
187#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;}
188#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;}
189#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;}
190#category-posts-3-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;}
191#category-posts-3-internal .cat-post-thumbnail {max-width:100%;}
192#category-posts-3-internal .cat-post-item img {margin: initial;}
193#category-posts-3-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;}
194#category-posts-3-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);}
195</style>
196		
197<link rel="icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-fav
197icon-ev-engineering-32x32.png" sizes="32x32" />
198<link rel="icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-192x192.png" sizes="192x192" />
199<link rel="apple-touch-icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-180x180.png" />
200<meta name="msapplication-TileImage" content="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-270x270.png" />
201<style id="wp-custom-css">
202/* Update logo */
203.spw-logo, .site-footer .footer-logo a, .nav-primary .menu-item.home a, .site-header .title-area .site-title a{
204	background-image:url('https://www.evengineeringonline.com/wp-content/uploads/2024/12/ev-logo.png')
205}
206
207.dropbtn {
208  background-color: #04AA6D;
209  color: white;
210  padding: 16px;
211  font-size: 16px;
212  border: none;
213}
214
215.dropdown {
216  
217  display: inline-block;
218}
219
220.dropdown-content {
221  display: none;
222  position: absolute;
223  background-color: #f1f1f1;
224  min-width: 160px;
225  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
226  z-index: 1;
227}
228
229.dropdown-content a {
230  color: black;
231  padding: 12px 16px;
232  text-decoration: none;
233  display: block;
234}
235
236.dropdown-content a:hover {background-color: #ddd;}
237
238.dropdown:hover .dropdown-content {display: block;}
239
240.dropdown:hover .dropbtn {background-color: #3e8e41;}
241
242
243/*Design Guide Drop Down Menu*/
244.motion-design-guides {
245  font-size: 16px;
246  font-family: Raleway, sans-serif;
247  width: 270px;
248  height: 50px;
249  text-align: center;
250  text-align-last: center;
251  -moz-text-align-last: center;
252  border-radius: 0px;
253	text-transform: uppercase;
254  white-space: wrap;
255}
256
257.motion-design-guides-button {
258	font-size: 16px;
259  font-family: Raleway, sans-serif;
260  width: 270px;
261  height: 50px;
262  text-align: center;
263  text-align-last: center;
264  -moz-text-align-last: center;
265  border-radius: 0px;
266	text-transform: uppercase;
267  white-space: wrap;
268	margin-top: 10px;
269}
270
271.motion-design-guides-button a {
272	color: white !important;
273}
274
275.motion-design-guide-option {
276  text-align: center;
277  text-align-last: center;
278  -moz-text-align-last: center;
279  text-transform: uppercase;
280  width: 255px;
281  white-space: wrap;
282
283}
284
285.motion-design-guides:after {
286    content: "";
287    border: solid #fff;
288    border-width: 0 2px 2px 0;
289    margin-left: 10px;
290    display: inline-block;
291    padding: 4px;
292    transform: rotate(45deg);
293    -webkit-transform: rotate(45deg);
294}
295
296.dropdown-content {
297	max-height: 400px;
298	overflow-y: scroll;
299}
300
301
302/*Login Button / Link Fix*/
303p.must-log-in a, p.logged-in-as a {
304	color: #12bcc1 !important;
305	font-weight: bold;
306}
307
308div.entry-content a {
309	color: #12bcc1 !important;
310	font-weight: bold;
311}
312
313
314
315.nav-previous{
316	     float:left;
317       margin-bottom:50px 
318}
319.nav-next{
320     float:right;
321     margin-bottom:50px           
322}
323
324/*Digital Issue Widget Fix*/
325
326.type-post.entry.has-post-thumbnail {
327	display: flex;
328	flex-direction: column;
329	justify-content: center;
330	margin-top: 20px;
331}
332
333.type-post.entry.has-post-thumbnail .entry-header h2 {
334	font-size: 20px !important;
335	margin-left: 20px;
336	margin-right: 20px;
337}
338
339.type-post.entry.has-post-thumbnail .entry-content p {
340	margin-left: 20px;
341	margin-right: 20px;
342}
343
344.more-from-category {
345	width: 100%;
346	display: flex;
347	justify-content: center;
348}
349
350.widget-wrap > .more-from-category a  {
351	text-align: center;
352	background-color: #12bcc1;
353	padding: 12px 16px;
354	color: white;
355	font-weight: bold;
356}
357
358
359
360/* Search Page */
361 
362body.search .site-inner {
363    padding-left: unset;
364    padding-right: unset;
365}
366
367@media only screen and (min-width: 988px) {
368	
369	.search .content {
370	width: 66% !important;
371	float: left;
372}
373
374.search .sidebar {
375	width: 30%;
376	float: right;
377}
378	
379}
380
381/* SUBSCRIBE BTN */
382
383.site-header--subscribe{
384	background-color: #12bcc1;
385	padding: 0 20px;
386}
387
388.site-header--subscribe a span{
389	color: white;
390}
391
392/*fixed mobile view*/
393
394@media only screen and (max-width: 767px) {
395.home	.archive-entry  {
396	display: flex;
397	flex-direction: column-reverse;
398	width: 100% !important;
399}
400	
401.home .archive-entry	.entry-content, .home .archive-entry .entry-header {
402		width: 100%;
403	}
404	
405}
406
407
408@media only screen and (max-width: 450px) {
409
410div.bawmrp > ul {
411	margin-left: 0px !important;
412	display: flex;
413	flex-direction: row;
414	flex-wrap: wrap;
415	align-content: center;
416}
417
418div.bawmrp > ul > li {
419	width: 49% !important;
420}
421
422article > div > div.bawmrp > ul > li > a > img {
423	display: inline;
424}
425	
426}
427
428/*GATED COUNTRY FIELD FULL WIDTH & TERMS====
429#input_6_54_6_container{
430flex: 0 0 100%;
431}*/
432
433.terms{
434	font-size: 10px;
435  font-style: italic;
436}
437
438.type-gated-download .entry-title{
439	text-align: left;
440}
441
442.type-gated-download .entry-content img{width: 100%}
443
444/* Voices */
445
446.voices-template-default .addtoany_share_save_container{
447	padding:0 7rem;
448}
449
450@media (max-width: 600px) {
451	
452	.voices-template-default .addtoany_share_save_container{
453    padding: 0 5rem;
454}
455}
456
457
458
459/*Lytics======================*/
460.pf-form-required{
461width: 48%;
462  display: block;
463  float: left;
464  margin-right: 1%;
465margin-left: 1%;
466}
467
468.pf-form-label{
469font-weight: 400;
470  font-size: 10px;
471  text-transform: uppercase;
472}
473
474.pf-has-label {
475  margin-top: -2px !important;
476}
477
478.pf-widget-btn.pf-widget-cancel{
479	display:none;
480	opacity: 0;
481	visibility: hidden;
482  pointer-events: none;
483  width: 0;
484  margin: 0 !important;
485  padding: 0 !important;
486}
487
488.pf-widget-btn.pf-widget-ok{
489background-color: #12bcc1 !important;
490	text-transform: uppercase;
491	color: white !important;
492}
493
494.pf-form-required #country::placeholder{
495	color: white !important;
496}
497
498.pf-form-required #country {
499  -webkit-appearance: none;
500  -moz-appearance: none;
501  appearance: none;
502
503  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'%3E%3Cpath d='M297.4 470.6C309.9 483.1 330.2 483.1 342.7 470.6L534.7 278.6C547.2 266.1 547.2 245.8 534.7 233.3C522.2 220.8 501.9 220.8 489.4 233.3L320 402.7L150.6 233.4C138.1 220.9 117.8 220.9 105.3 233.4C92.8 245.9 92.8 266.2 105.3 278.7L297.3 470.7z'/%3E%3C/svg%3E");
504
505  background-repeat: no-repeat;
506  background-position: right 12px center;
507  background-size: 14px 14px;
508  padding-right: 40px;
509}
510
511.pf-widget-close{
512	font-weight: 300;
513  font-family: 'san-serif';
514  color: #212121 !important;
515  font-size: 43px;
516}
517
518
519.pf-widget-content{
520	max-width: 550px !important;
521}
522
523.pf-required-flag{
524	position: relative;
525  z-index: 3;
526}
527
528/*End Lytics======================*/
529</style>
530    
530<script id="wtwh-uni-gam-content-hash-variables">
531        var contentHash = "dffaf9ccb635aab40aaf9e6487b63402"; 
532        var cat_target  = "dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros";
533    </script>
533
534    
534<script>
535  (function () {
536    'use strict';
537
538    // ─── Globals ────────────────────────────────────────────────────────────────
539    window.dataLayer  = window.dataLayer  || [];
540    window.gtag       = window.gtag       || function () { dataLayer.push(arguments); };
541    window.googletag  = window.googletag  || { cmd: [] };
542
543    window.__cmpRegion = {
544      country:   "US",
545      regulated: false
546    };
547
548    window.__wtwhConsentDebug = {
549      consentEvents: [],
550      gptMode: null
551    };
552
553    // ─── Helpers ────────────────────────────────────────────────────────────────
554    function log() {
555      try {
556        var args = Array.prototype.slice.call(arguments);
557        args.unshift('[WTWH Consent/GPT]');
558        console.log.apply(console, args);
559      } catch (e) {}
560    }
561
562    function dispatchWindowEvent(eventName, detail) {
563      try {
564        window.dispatchEvent(new CustomEvent(eventName, { detail: detail || {} }));
565      } catch (e) {
566        try {
567          var ev = document.createEvent('CustomEvent');
568          ev.initCustomEvent(eventName, false, false, detail || {});
569          window.dispatchEvent(ev);
570        } catch (err) {}
571      }
572    }
573
574    function getCookie(name) {
575      var nameEQ = name + '=';
576      var parts  = document.cookie.split(';');
577      for (var i = 0; i < parts.length; i++) {
578        var c = parts[i];
579        while (c.charAt(0) === ' ') c = c.substring(1);
580        if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length);
581      }
582      return null;
583    }
584
585    function hasKlaroCookie() {
586      return !!getCookie('klaro-consent');
587    }
588
589    function getKlaroManager() {
590      try {
591        if (!window.klaro || typeof window.klaro.getManager !== 'function') return null;
592        return window.klaro.getManager();
593      } catch (e) {
594        return null;
595      }
596    }
597
598    function getStoredConsents() {
599      try {
600        var manager = getKlaroManager();
601        if (!manager || !manager.consents) return null;
602        return {
603          analytics: !!manager.consents.analytics,
604          marketing: !!manager.consents.marketing
605        };
606      } catch (e) {
607        return null;
608      }
609    }
610
611    function getMarketingConsentState() {
612      var c = getStoredConsents();
613      return c ? c.marketing : null;
614    }
615
616    // ─── Consent state tracker ───────────────────────────────────────────────────
617    var consentState = {
618      initialized:          false,
619      lastAppliedSignature: null
620    };
621
622    function consentSignature(consents) {
623      return (consents.analytics ? '1' : '0') + '|' + (consents.marketing ? '1' : '0');
624    }
625
626    // ─── Core consent application ────────────────────────────────────────────────
627    function pushConsentEvent(eventName, analyticsGranted, marketingGranted) {
628      var detail = {
629        consent_analytics:        analyticsGranted ? 'granted' : 'denied',
630        consent_marketing:        marketingGranted ? 'granted' : 'denied',
631        consent_country:          window.__cmpRegion.country,
632        consent_regulated_region: window.__cmpRegion.regulated ? 'true' : 'false'
633      };
634
635      window.dataLayer.push({
636        event:                    eventName,
637        consent_analytics:        detail.consent_analytics,
638        consent_marketing:        detail.consent_marketing,
639        consent_country:          detail.consent_country,
640        consent_regulated_region: detail.consent_regulated_region
641      });
642
643      window.__wtwhConsentDebug.consentEvents.push({ event: eventName, detail: detail, ts: Date.now() });
644      dispatchWindowEvent(eventName, detail);
645      log('Consent event fired:', eventName, detail);
646    }
647
648    function updateGoogleConsent(consents) {
649      gtag('consent', 'update', {
650        analytics_storage:     consents.analytics ? 'granted' : 'denied',
651        ad_storage:            consents.marketing ? 'granted' : 'denied',
652        ad_user_data:          consents.marketing ? 'granted' : 'denied',
653        ad_personalization:    consents.marketing ? 'granted' : 'denied',
654        functionality_storage: 'granted',
655        security_storage:      'granted'
656      });
657    }
658
659    function applyInitialConsent(consents) {
660      if (!consents) return;
661      var sig = consentSignature(consents);
662      if (consentState.initialized) {
663        log('applyInitialConsent called after already initialized — skipping');
664        return;
665      }
666      updateGoogleConsent(consents);
667      pushConsentEvent('consent_initialized', consents.analytics, c
667onsents.marketing);
668      consentState.initialized          = true;
669      consentState.lastAppliedSignature = sig;
670    }
671
672    function applyUpdatedConsent(consents) {
673      if (!consents) return;
674      var sig = consentSignature(consents);
675      if (sig === consentState.lastAppliedSignature) {
676        log('Consent unchanged — skipping duplicate consent_updated');
677        return;
678      }
679      updateGoogleConsent(consents);
680      pushConsentEvent('consent_updated', consents.analytics, consents.marketing);
681      consentState.initialized          = true;
682      consentState.lastAppliedSignature = sig;
683    }
684
685    // ─── Step 1: gtag default ────────────────────────────────────────────────────
686    gtag('consent', 'default', {
687      ad_storage:            window.__cmpRegion.regulated ? 'denied' : 'granted',
688      ad_user_data:          window.__cmpRegion.regulated ? 'denied' : 'granted',
689      ad_personalization:    window.__cmpRegion.regulated ? 'denied' : 'granted',
690      analytics_storage:     window.__cmpRegion.regulated ? 'denied' : 'granted',
691      functionality_storage: 'granted',
692      security_storage:      'granted'
693    });
694
695    // ─── Step 2: Non-regulated — initialize immediately as fully granted ─────────
696    if (!window.__cmpRegion.regulated) {
697      var openConsents = { analytics: true, marketing: true };
698      consentState.initialized          = true;
699      consentState.lastAppliedSignature = consentSignature(openConsents);
700      pushConsentEvent('consent_initialized', true, true);
701    }
702
703    // ─── Klaro config ────────────────────────────────────────────────────────────
704    window.klaroConfig = {
705      version:               1,
706      elementID:             'klaro',
707      storageMethod:         'cookie',
708      storageName:           'klaro-consent',
709      cookieExpiresAfterDays: 365,
710      default:               false,
711      mustConsent:           true,
712      acceptAll:             true,
713      hideDeclineAll:        false,
714      htmlTexts:             true,
715      lang:                  'en',
716      translations: {
717        en: {
718          consentNotice: {
719            description: 'We use cookies for analytics and marketing. You can manage your preferences at any time.',
720            learnMore:   'Manage preferences'
721          },
722          consentModal: {
723            title:       'This website uses cookies',
724            description: 'We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you\u2019ve provided to them or that they\u2019ve collected from your use of their services.'
725          },
726          ok:      'Accept all',
727          decline: 'Reject all',
728          save:    'Save preferences',
729          close:   'Close'
730        }
731      },
732      services: [
733        { name: 'analytics', title: 'Analytics', purposes: ['analytics'], required: false, default: false },
734        { name: 'marketing', title: 'Marketing', purposes: ['marketing'], required: false, default: false }
735      ],
736      callback: function (consent, service) {
737        try {
738          var manager = getKlaroManager();
739          if (!manager || !manager.consents) return;
740
741          var currentConsents = {
742            analytics: !!manager.consents.analytics,
743            marketing: !!manager.consents.marketing
744          };
745
746          if (!consentState.initialized && hasKlaroCookie()) {
747            applyInitialConsent(currentConsents);
748            return;
749          }
750
751          applyUpdatedConsent(currentConsents);
752        } catch (e) {
753          console.error('Klaro callback error', e);
754        }
755      }
756    };
757
758    // ─── Open consent modal ──────────────────────────────────────────────────────
759    window.openConsentSettings = function () {
760      try {
761        if (window.klaro && typeof window.klaro.show === 'function') {
762          window.klaro.show(window.klaroConfig, true);
763          return;
764        }
765        var manager = getKlaroManager();
766        if (manager && typeof manager.showConsentModal === 'function') {
767          manager.showConsentModal();
768        }
769      } catch (e) {
770        console.warn('Unable to open Klaro consent settings', e);
771      }
772    };
773
774    // ─── Klaro onload handler ────────────────────────────────────────────────────
775    window.__applyKlaroInitialConsent = function () {
776      try {
777        if (!window.__cmpRegion.regulated) return;
778        if (!hasKlaroCookie()) return;
779        var manager = getKlaroManager();
780        if (!manager || !manager.consents) return;
781        applyInitialConsent({
782          analytics: !!manager.consents.analytics,
783          marketing: !!manager.consents.marketing
784        });
785      } catch (e) {
786        console.warn('Klaro consent initialization failed', e);
787      }
788    };
789
790    // ─── GPT bootstrap ───────────────────────────────────────────────────────────
791    // Always uses securepubads (standard GPT).
792    // For denied-consent users, applies nonPersonalizedAds instead of switching
793    // to the limited GPT URL — this preserves pubads() availability and gives
794    // access to the standard demand pool (contextual only, no user signals).
795    (function () {
796      if (window.__wtwhGptBootstrapInitialized) return;
797      window.__wtwhGptBootstrapInitialized = true;
798
799      var GPT_MODE_FULL    = 'full';
800      var GPT_MODE_NPA     = 'npa';   // non-personalized ads — replaces "limited"
801
802      // Single GPT URL for all cases
803      var GPT_URL = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js';
804
805      var gptScriptRequested   = false;
806      var gptScriptLoaded      = false;
807      var gptDecisionFinalized = false;
808
809      function redactUrl(rawUrl) {
810        if (!rawUrl) return '';
811        try {
812          var url = new URL(rawUrl, window.location.origin);
813          ['s', 'loc'].forEach(function (key) {
814            if (url.searchParams.has(key)) url.searchParams.set(key, 'REDACTED');
815          });
816          return url.href;
817        } catch (e) {
818          return rawUrl;
819        }
820      }
821
822      // Returns null when consent state is not yet known (regulated, Klaro not loaded yet).
823      // Returning null defers GPT loading until a consent signal arrives.
824      function selectGptMode() {
825        if (!window.__cmpRegion.regulated) return GPT_MODE_FULL;
826
827        var marketingConsent = getMarketingConsentState();
828        if (marketingConsent === true)  return GPT_MODE_FULL;
829        if (marketingConsent === false) return GPT_MODE_NPA;
830
831        // null = Klaro hasn't restored consent yet — wait
832        return null;
833      }
834
835      function dispatchGptReady(mode) {
836        window.__gptMode  = mode;
837        window.__gptReady = true;
838        window.__wtwhConsentDebug.gptMode = mode;
839
840        window.dataLayer.push({ event: 'gpt_ready', gpt_mode: mode });
841        dispatchWindowEvent('gpt_ready', { gpt_mode: mode });
842        log('gpt_ready dispatched with mode:', mode);
843      }
844
845      function configureGptAfterLoad(mode) {
846        window.googletag.cmd.push(function () {
847          try {
848            if (typeof googletag.pubads !== 'function') {
849              log('pubads() unavailable after GPT load');
850              return;
851            }
852
853            if (mode === GPT_MODE_NPA) {
854              // Consent denied: serve non-personalized ads.
855              // Uses standard GPT pipeline with no user signals.
856              // Better fill rate than limited ads URL; compliant with
857              // ad_storage: denied + nonPersonalizedAds: true.
858              try {
859                googletag.pubads().setPrivacySettings({
860                  nonPersonalizedAds: true
861                });
862                log('Configured GPT for non-personalized ads (consent denied)');
863              } catch (e) {
864                log('Failed to set nonPersonalizedAds', e);
865              }
866            } else {
867              log('Configured GPT for full personalized ads');
868            }
869
870            var cleanPage = redactUrl(window.location.href);
871            var cleanRef  = redactUrl(document.referrer);
872
873            try { googletag.pubads().set('page_url', cleanPage); } catch (e) {}
874            if (cleanRef) {
875              try { googletag.pubads().set('referrer_url', cleanRef); } catch (e) {}
876            }
877            try {
878              googletag.pubads().setTargeting('s',   'REDACTED');
879              googletag.pubads().setTargeting('loc', 'REDACTED');
880            } catch (e) {}
881
882            dispatchGptReady(mode);
883          } catch (e) {
884            log('Error during GPT configuration', e);
885          }
886        });
887      }
888
889      function loadGptScript(mode) {
890        if (gptScriptRequested || gptScriptLoaded || gptDecisionFinalized) {
891          log('GPT already requested/loaded — skipping');
892          return;
893        }
894
895        gptDecisionFinalized = true;
896        gptScriptRequested   = true;
897
898        var script   = document.createElement('script');
899        script.async = true;
900        script.src   = GPT_URL;
901
902        script.onload = function () {
903          gptScriptLoaded = true;
904          log('GPT script loaded, mode:', mode);
905          configureGptAfterLoad(mode);
906        };
907
908        script.onerror = function () {
909          gptScriptRequested   = false;
910          gptScriptLoaded      = false;
911          gptDecisionFinalized = false;
912          log('Failed to load GPT script');
913        };
914
915        document.head.appendChild(script);
916        log('Requested GPT script, mode:', mode);
917      }
918
919      function tryLoadGpt() {
920        if (gptDecisionFinalized) return true;
921        var mode = selectGptMode();
922        if (mode === null) return false;
923        loadGptScript(mode);
924        return true;
925      }
926
927      // Non-regulated: load immediately
928      if (!window.__cmpRegion.regulated) {
929        tryLoadGpt();
930        return;
931      }
932
933      // Regulated: wait for a consent signal before loading GPT
934      window.addEventListener('consent_initialized', tryLoadGpt);
935      window.addEventListener('consent_updated',     tryLoadGpt);
936
937      // Poll briefly in case Klaro resolves before listeners fire
938      var pollCount    = 0;
939      var maxPolls     = 3;
940      var pollInterval = setInterval(function () {
941        pollCount++;
942        if (tryLoadGpt() || pollCount >= maxPolls) {
943          clearInterval(pollInterval);
944        }
945      }, 100);
946
947      // Hard fallback: no consent signal after a short bootstrap grace period → load NPA
948      setTimeout(function () {
949        if (!gptDecisionFinalized) {
950          log('Consent timeout — falling back to non-personalized GPT');
951          loadGptScript(GPT_MODE_NPA);
952        }
953      }, 300);
954    })();
955  })();
956</script>
vendor: 1 bytes, line 956
956
957<script data-wtwh-analytics-loader>(function(w,d){'use strict';
958var cfg={"scriptUrl":"https://scripts.wtwhmedia.com/developer/wtwh_analytics/env/prod/index.js","endpoint":"https://collect.wtwhmedia.com/v1/events","site":"www.evengineeringonline.com","pageUrl":"https://www.evengineeringonline.com/ev-engineering-articles/","country":"US","consentDenied":false};
959var consentMessageType="arrowfly:analytics-consent";
960if(w.__wtwhAnalyticsEdgeLoaderInstalled)return;
961w.__wtwhAnalyticsEdgeLoaderInstalled=true;
962var analytics=null;
963var pageTracker=null;
964var consentGranted=!cfg.consentDenied;
965function browserConsent(){
966  var n=w.navigator||{};
967  return n.globalPrivacyControl!==true&&n.doNotTrack!=='1';
968}
969function canTrack(){return consentGranted&&browserConsent();}
970function embedFrames(){
971  return d.querySelectorAll('iframe[src*="embeds.wtwhmedia.com"],iframe[src*="embeds.dev.wtwhmedia.com"]');
972}
973function broadcastEmbedConsent(){
974  var msg={type:consentMessageType,granted:canTrack()};
975  var frames=embedFrames();
976  for(var i=0;i<frames.length;i++){
977    try{
978      var frame=frames[i];
979      var targetOrigin=new URL(frame.src,w.location.href).origin;
980      if(frame.contentWindow)frame.contentWindow.postMessage(msg,targetOrigin);
981    }catch(_){}
982  }
983}
984function startPageTracking(){
985  if(!analytics||pageTracker||!canTrack())return;
986  var api=w.wtwh&&w.wtwh.analytics;
987  if(api&&typeof api.trackPage==='function'){
988    pageTracker=api.trackPage(analytics,{props:{source:'edge-router',country:cfg.country}});
989    return;
990  }
991  analytics.track('page_view',{
992    page_url:cfg.pageUrl,
993    page_host:w.location.hostname,
994    page_path:w.location.pathname,
995    referer:d.referrer||'',
996    props:{source:'edge-router',country:cfg.country,navigation_type:'initial'}
997  });
998  analytics.flush();
999}
1000function stopPageTracking(){
1001  if(!pageTracker)return;
1002  pageTracker.destroy();
1003  pageTracker=null;
1004}
1005function setConsent(granted){
1006  consentGranted=!!granted;
1007  if(consentGranted)startPageTracking();
1008  else stopPageTracking();
1009  broadcastEmbedConsent();
1010}
1011function applyConsentEvent(event){
1012  var value=event&&event.detail&&event.detail.consent_analytics;
1013  if(value==='granted')setConsent(true);
1014  else if(value==='denied')setConsent(false);
1015}
1016function readKlaroConsent(){
1017  try{
1018    var manager=w.klaro&&typeof w.klaro.getManager==='function'&&w.klaro.getManager();
1019    if(manager&&manager.consents&&typeof manager.consents.analytics==='boolean'){
1020      setConsent(manager.consents.analytics);
1021      return true;
1022    }
1023  }catch(_){}
1024  return false;
1025}
1026function pollKlaroConsent(){
1027  if(!cfg.consentDenied)return;
1028  var attempts=0;
1029  var timer=w.setInterval(function(){
1030    attempts++;
1031    if(readKlaroConsent()||attempts>=20)w.clearInterval(timer);
1032  },500);
1033}
1034function start(){
1035  var api=w.wtwh&&w.wtwh.analytics;
1036  if(!api||typeof api.create!=='function')return;
1037  analytics=api.create({
1038    site:String(cfg.site||w.location.hostname),
1039    endpoint:String(cfg.endpoint),
1040    context:{
1041      page_url:String(cfg.pageUrl||w.location.href),
1042      page_host:w.location.hostname,
1043      page_path:w.location.pathname,
1044      referer:d.referrer||''
1045    },
1046    consent:canTrack
1047  });
1048  readKlaroConsent();
1049  startPageTracking();
1050  broadcastEmbedConsent();
1051}
1052w.addEventListener('consent_initialized',applyConsentEvent);
1053w.addEventListener('consent_updated',applyConsentEvent);
1054w.addEventListener('load',broadcastEmbedConsent);
1055d.addEventListener('load',function(event){
1056  if(event.target&&event.target.tagName==='IFRAME')broadcastEmbedConsent();
1057},true);
1058if(w.wtwh&&w.wtwh.analytics)start();
1059else{
1060  var script=d.createElement('script');
1061  script.async=true;
1062  script.src=String(cfg.scriptUrl);
1063  script.onload=start;
1064  (d.head||d.documentElement).appendChild(script);
1065}
1066pollKlaroConsent();
1067})(window,document);</script>
1067<script data-wtwh-ad-info>window.dataLayer=window.dataLayer||[];window.dataLayer.push({"wtwhAdInfo":{"request":"unrestricted","verified_bot_category":"","traffic_channel":"direct_or_unknown","traffic_channel_group":"direct_or_unknown"}});</script>
1067</head>
1068<body class="blog wp-theme-genesis wp-child-theme-ThemeWTWH header-image content-sidebar genesis-breadcrumbs-hidden archive"><!-- Google Tag Manager GLOBAL (noscript) -->
vendor: 69 bytes, lines 1068-1069
1068
1069<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1069GTM-MMC9PJ9
vendor: 85 bytes, lines 1069-1070
1069"
1070height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1071<!-- End Google Tag Manager GLOBAL (noscript) -->
1072
1073<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 1073-1074
1073
1074<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1074GTM-WKS3GR3W
vendor: 85 bytes, lines 1074-1075
1074"
1075height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1076<!-- End Google Tag Manager (noscript) -->
1077
1078        <div id="div-gpt-wallpaper"></div>
1079                    <div id="spotible-wallpaper-ad-container"></div>
1080                        <div id="div-gpt-allstreamflex"></div>
1081                    <div id="spotible-allstreamflex-ad-container"></div>
1082                        <div id="div-gpt-allstreamprelude"></div>
1083                    <div id="spotible-allstreamprelude-ad-container"></div>
1084                <div class="site-container"><header class="site-header"><div class="wrap"><div class="title-area"><p class="site-title"><a href="https://www.evengineeringonline.com/">EV Engineering &amp; Infrastructure</a></p></div><div class="widget-area header-widget-area"><section id="custom_html-3" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-eveng-header'>
1085	
1085<script>
1086    googletag.cmd.push(function() { googletag.display('div-gpt-eveng-header'); });
1087  </script>
1087
1088</div></div></div></section>
1089</div><div class="mobile-toggles"><a href="#" class="search-toggle"><i class="icon-search"></i></a><a href="#" class="mobile-menu-toggle"><i class="icon-menu"></i></a></div></div></header><nav class="nav-primary" aria-label="Main"><div class="wrap"><ul id="menu-main-menu" class="menu genesis-nav-menu menu-primary"><li id="menu-item-22" class="menu-item"><a href="https://www.evengineeringonline.com/category/technology-news/"><span >News</span></a></li>
1090<li id="menu-item-4023" class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/faq/"><span >Articles</span></a>
1091<ul class="sub-menu">
1092	<li id="menu-item-9992" class="menu-item"><a href="https://www.evengineeringonline.com/category/qas/"><span >Q&amp;As</span></a></li>
1093	<li id="menu-item-9991" class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-spotlight/"><span >Tech Spotlight</span></a></li>
1094</ul>
1095</li>
1096<li id="menu-item-17" class="menu-item"><a href="https://www.evengineeringonline.com/category/batteries/"><span >Batteries</span></a></li>
1097<li id="menu-item-3554" class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/charging/"><span >Charging</span></a>
1098<ul class="sub-menu">
1099	<li id="menu-item-4671" class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/wireless-charging/"><span >Wireless Charging</span></a></li>
1100	<li id="menu-item-4670" class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/vehicle-to-grid-v2g/"><span >Vehicle-to-Grid (V2G)</span></a></li>
1101</ul>
1102</li>
1103<li id="menu-item-2716" class="menu-item"><a href="https://www.evengineeringonline.com/category/electrification/"><span >Electrification</span></a></li>
1104<li id="menu-item-20" class="menu-item"><a href="https://www.evengineeringonline.com/category/testing-safety/"><span >Testing and Safety</span></a></li>
1105<li id="menu-item-2087" class="menu-item menu-item-has-children"><a><span >Learn</span></a>
1106<ul class="sub-menu">
1107	<li id="menu-item-2088" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/learning-center"><span >Learning Center</span></a></li>
1108	<li id="menu-item-10291" class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/"><span >Tech Toolboxes</span></a></li>
1109	<li id="menu-item-1979" class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering"><span >Webinars</span></a></li>
1110</ul>
1111</li>
1112<li id="menu-item-2084" class="menu-item menu-item-has-children"><a><span >Resources</span></a>
1113<ul class="sub-menu">
1114	<li id="menu-item-12735" class="menu-item"><a href="https://www.evengineeringonline.com/category/digital-issues/"><span >Digital Editions</span></a></li>
1115	<li id="menu-item-2086" class="menu-item"><a target="_blank" href="https://www.designworldonline.com/category/news/engineering-diversity/"><span >Diversity &#038; Inclusion</span></a></li>
1116	<li id="menu-item-9096" class="menu-item"><a href="/voices/"><span >Voices</span></a></li>
1117</ul>
1118</li>
1119<li id="menu-item-8517" class="menu-item"><a target="_blank" href="https://www.mediakit.evengineeringonline.com/"><span >Advertise</span></a></li>
1120<li id="menu-item-12734" class="site-header--subscribe menu-item"><a href="https://www.evengineeringonline.com/welcome-ev-community/"><span >Subscribe</span></a></li>
1121<li class="menu-item search"><a href="#" class="search-toggle"><i class="icon-search"></i></a></li></ul></div></nav>    <div style="padding-top:10px;text-align:center">
1122        <div id="jumbo-banner-ad-container" style="min-width: 970px; min-height: 90px;"></div>
1123    </div>
1124    <div class="site-inner"><div class="wrap"><div class="content-sidebar-wrap"><main class="content"><article class="type-post entry has-post-thumbnail" aria-label="Q&#038;A: How EV architectures are changing high-speed connectivity"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1124Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/">Q&#038;A: How EV architectures are changing high-speed connectivity</a></h2>
1125</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" aria-hidden="true" tabindex="-1"><img width="300" height="169" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-300x169.png" class="alignleft post-image entry-image wp-image-13688" alt="" decoding="async" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-300x169.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-1024x576.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-768x432.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-1536x864.png 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-368x207.png 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator.png 1672w" sizes="(max-width: 300px) 100vw, 300px" /></a><p>As electric vehicles (EVs) add more cameras, radar, and other high-bandwidth sensors, the amount of data moving through the vehicle continues to grow.
1126
1127
1128
1129At the same time, those data links have to operate alongside high-voltage power electronics &#x02026; <a href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="White paper calls for new reliability testing approach for EV BMS"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/">White paper calls for new reliability testing approach for EV BMS</a></h2>
1130</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/" aria-hidden="true" tabindex="-1"><img width="300" height="271" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-300x271.png" class="alignleft post-image entry-image wp-image-13674" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-300x271.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-1024x926.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-768x695.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-263x238.png 263w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM.png 1276w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>The Global Electronics Association has released a new white paper examining reliability challenges in battery management systems as electric vehicle (EV) architectures move toward higher voltages, continuous operation and longer service lives.
1131
1132The &#x02026; <a href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Coesia to showcase integrated battery manufacturing at The Battery Show"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1132Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/">Coesia to showcase integrated battery manufacturing at The Battery Show</a></h2>
1133</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-300x225.jpg" class="alignleft post-image entry-image wp-image-13677" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-300x225.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-317x238.jpg 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110.jpg 700w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Coesia will showcase a range of manufacturing technologies at The Battery Show North America, designed to support higher-volume lithium-ion battery production, with a focus on improving process control, automation, and scalability for electric &#x02026; <a href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="ROHM SiC MOSFETs selected for BMW Neue Klasse EV powertrain"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/">ROHM SiC MOSFETs selected for BMW Neue Klasse EV powertrain</a></h2>
1134</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/" aria-hidden="true" tabindex="-1"><img width="300" height="200" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-300x200.webp" class="alignleft post-image entry-image wp-image-13680" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-300x200.webp 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-768x512.webp 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-357x238.webp 357w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic.webp 810w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>ROHM’s silicon carbide (SiC) MOSFETs are being integrated into BMW’s Neue Klasse electric powertrain architecture as part of the automaker’s sixth-generation electric vehicle (EV) technology.
1135
1136The SiC devices will support power conversion within &#x02026; <a href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Researchers improve anode-free lithium metal battery stability"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/">Researchers improve anode-free lithium metal battery stability</a></h2>
1137</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-300x225.jpg" class="alignleft post-image entry-image wp-image-13671" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-300x225.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-317x238.jpg 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1.jpg 430w" sizes="auto, (max-width: 300px) 100v
1137w, 300px" /></a><p>Researchers patterned copper current collectors with nanoscale structures and an MXene coating to suppress lithium dendrite growth without adding excess lithium.
1138
1139
1140
1141A research team at the Korea Advanced Institute of Science and Technology (KAIST) &#x02026; <a href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Semi-dry braking architecture reduces residual brake drag"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/">Semi-dry braking architecture reduces residual brake drag</a></h2>
1142</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/" aria-hidden="true" tabindex="-1"><img width="300" height="296" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-300x296.png" class="alignleft post-image entry-image wp-image-13667" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-300x296.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-768x757.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-241x238.png 241w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM.png 866w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>AUMOVIO has developed a semi-dry brake system that combines electromechanical braking with a conventional hydraulic front axle, using active brake-pad clearance to reduce residual drag in electric vehicles (EVs).
1143The system uses a near-production &#x02026; <a href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Mercedes-Benz to test ProLogium Gen4 solid-state cells for future EVs"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/">Mercedes-Benz to test ProLogium Gen4 solid-state cells for future EVs</a></h2>
1144</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/" aria-hidden="true" tabindex="-1"><img width="300" height="157" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-300x157.png" class="alignleft post-image entry-image wp-image-13664" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-300x157.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-1024x536.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-768x402.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-1536x804.png 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-368x193.png 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM.png 1906w" sizes="auto, (max-width: 300px) 100v
1144w, 300px" /></a><p>Mercedes-Benz and ProLogium have signed a joint testing agreement covering ProLogium’s latest Gen4 solid-state battery cells, with the automaker evaluating the technology for potential use in future electric vehicles (EVs).
1145Testing will include &#x02026; <a href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Automotive rectifiers combine low forward voltage with high avalanche capability"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/">Automotive rectifiers combine low forward voltage with high avalanche capability</a></h2>
1146</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/" aria-hidden="true" tabindex="-1"><img width="300" height="230" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-300x230.jpg" class="alignleft post-image entry-image wp-image-13655" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-300x230.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-768x589.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-310x238.jpg 310w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP.jpg 900w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Diodes Incorporated has introduced a family of AEC-qualified field-plated Super Barrier Rectifiers designed for automotive power systems.
1147The devices are intended as drop-in replacements for comparable Schottky and PN junction diodes, with lower &#x02026; <a href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Battery intelligence software adds deeper health data to EV battery passports"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/">Battery intelligence software adds deeper health data to EV battery passports</a></h2>
1148</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/" aria-hidden="true" tabindex="-1"><img width="300" height="209" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-300x209.png" class="alignleft post-image entry-image wp-image-13660" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-300x209.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-342x238.png 342w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM.png 692w" sizes="auto, (max-width: 300px) 100v
1148w, 300px" /></a><p>Qnovo has introduced a new software application built on its Battery Genome platform to give automakers a more detailed view of electric vehicle (EV) battery condition and residual value.
1149The application is intended to address limitations in battery &#x02026; <a href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Why e-axle fluids have become an EV engineering problem"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/">Why e-axle fluids have become an EV engineering problem</a></h2>
1150</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-300x225.png" class="alignleft post-image entry-image wp-image-13649" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-300x225.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-1024x768.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-768x576.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-317x238.png 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle.png 1448w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Electric vehicle (EV) drive units keep getting smaller and more integrated, and that's changed what the fluid inside them has to do. In a conventional gearbox, lubricant selection mostly comes down to protecting the gears while keeping friction &#x02026; <a href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Cabot expands US production of battery conductive additives"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/">Cabot expands US production of battery conductive additives</a></h2>
1151</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/" aria-hidden="true" tabindex="-1"><img width="300" height="169" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-300x169.jpg" class="alignleft post-image entry-image wp-image-13639" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-300x169.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-1024x576.jpg 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-768x432.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-368x207.jpg 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black.jpg 1280w" sizes="auto, (max-width: 300px) 100v
1151w, 300px" /></a><p>Cabot Corporation plans to expand domestic production of battery-grade conductive additives at its facilities in Franklin, Louisiana, and Pampa, Texas, with support from a modified $50 million US Department of Energy (DOE) grant and approximately $75 &#x02026; <a href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="New Titan rare-earth-free motor for heavy-duty EVs"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/">New Titan rare-earth-free motor for heavy-duty EVs</a></h2>
1152</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/" aria-hidden="true" tabindex="-1"><img width="300" height="214" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-300x214.png" class="alignleft post-image entry-image wp-image-13636" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-300x214.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-768x548.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-334x238.png 334w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM.png 962w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Advanced Electric Machines (AEM) has developed Titan, a new heavy-duty electric motor that expands the company’s HDRM range for commercial vehicle applications.
1153Titan is the largest and highest-torque motor in the HDRM family and is designed for &#x02026; <a href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Brake-by-wire and steer-by-wire systems expand for EV platforms"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/">Brake-by-wire and steer-by-wire systems expand for EV platforms</a></h2>
1154</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/" aria-hidden="true" tabindex="-1"><img width="300" height="200" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-300x200.jpg" class="alignleft post-image entry-image wp-image-13633" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-300x200.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-357x238.jpg 357w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Leekr Technology is expanding its intelligent chassis portfolio for electric and software-defined vehicles, with technologies spanning brake-by-wire, electric steering, steer-by-wire, and centralized chassis control.
1155The company has moved its DHB-LK &#x02026; <a href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Velion chargers receive Make It American certification"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1155Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/">Velion chargers receive Make It American certification</a></h2>
1156</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/" aria-hidden="true" tabindex="-1"><img width="300" height="214" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-300x214.jpeg" class="alignleft post-image entry-image wp-image-13630" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-300x214.jpeg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-768x549.jpeg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-333x238.jpeg 333w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger.jpeg 784w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Lincoln Electric has received product-level certification under NEMA’s Make It American program for its Velion dc fast-charging equipment.
1157The certification verifies domestic manufacturing and content requirements for the chargers, which Lincoln &#x02026; <a href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="How to catch EV faults before they become failures"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.such.com" class="entry-author-link" rel="author"><span class="entry-author-name">Faisal Mahmood; Content Strategist | SUCH.COM</span></a></span> | <time class="entry-time">September 23, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/">How to catch EV faults before they become failures</a></h2>
1158</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" aria-hidden="true" tabindex="-1"><img width="300" height="202" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-300x202.png" class="alignleft post-image entry-image wp-image-13624" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-300x202.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-1024x688.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-768x516.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-354x238.png 354w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults.png 1306w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Most electric vehicle (EV) battery failures do not happen out of nowhere. Long before a pack trips into a protective shutdown, there are usually small signs sitting quietly in the data, a cell running a few millivolts higher than its neighbors, or a &#x02026; <a href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Wide-bandgap-ready MCUs add high-speed control for EV charging"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1158Michelle Froese</span></a></span> | <time class="entry-time">September 23, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/">Wide-bandgap-ready MCUs add high-speed control for EV charging</a></h2>
1159</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/" aria-hidden="true" tabindex="-1"><img width="300" height="280" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-300x280.jpg" class="alignleft post-image entry-image wp-image-13619" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-300x280.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-1024x957.jpg 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-768x717.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-1536x1435.jpg 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-2048x1913.jpg 2048w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-255x238.jpg 255w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Infineon Technologies has introduced its PSOC Control C3 Performance Line microcontroller family for real-time control in power-conversion and motor-control applications, including electric vehicle (EV) charging systems.
1160The MCUs use an Arm &#x02026; <a href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><div class="archive-pagination pagination"><div class="pagination-next alignright"><a href="https://www.evengineeringonline.com/ev-engineering-articles/page/2/"  class="button">Next ></a></div></div></main><aside class="sidebar sidebar-primary widget-area" role="complementary" aria-label="Primary Sidebar"><section id="search-3" class="widget widget_search"><div class="widget-wrap"><form class="search-form" method="get" action="https://www.evengineeringonline.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-1" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.evengineeringonline.com/?s={s}"></form></div></section>
1161<section id="custom_html-4" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget">				
1162<div id='div-gpt-eveng_sidebar1'>
1163	
1163<script>
1164    googletag.cmd.push(function() { googletag.display('div-gpt-eveng_sidebar1'); });
1165  </script>
1165
1166</div></div></div></section>
1167<section id="custom_html-2" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><center>
1168<div style="display: flex; flex-direction: column; justify-content: center; width: 300px;">
1169<div align="center"><a href="/welcome-ev-community/" target="_blank"><img src="https://www.evengineeringonline.com/wp-content/uploads/2025/11/AdobeStock_437936229.jpg" alt=“ee newsletter”></a></div>
1170<div align="center" style="width: 300px; line-height: 20px; padding-top: 10px;"><span style="font-weight: bold; color: #0c506d; text-align: center; font-size: 20px;">EXPAND YOUR KNOWLEDGE AND STAY CONNECTED</span></div>
1171<div align="center" style="line-height: 16px; padding-top: 5px;"><span style="text-align: center; font-size: 16px;">Get the latest info on technologies, tools and strategies for EV professionals.</span></div>
1172<div align="center" style="padding-top: 10px;"><a href="/welcome-ev-community/" target="_self"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">GET THE ENEWSLETTER</button></a></div>
1173</div>
1174</center></div></div></section>
1175<section id="category-posts-5" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Tech Spotlight</h4>
1176<ul id="category-posts-5-internal" class="category-posts-internal">
1177<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/why-high-power-ev-charging-is-pushing-control-integration-into-one-ecu/" title="Why high-power EV charging is pushing control integration into one ECU"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/07/Screenshot-2026-07-13-at-4.36.57-PM-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-12559 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/why-high-power-ev-charging-is-pushing-control-integration-into-one-ecu/" rel="bookmark">Why high-power EV charging is pushing control integration into one ECU</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/designing-safety-into-the-cell-the-case-for-system-level-solid-state-batteries/" title="Designing safety into the cell: The case for system-level solid-state batteries"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/06/PhotoforTechSpotlight2-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-12257 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/designing-safety-into-the-cell-the-case-for-system-level-solid-state-batteries/" rel="bookmark">Designing safety into the cell: The case for system-level solid-state batteries</a></div></li></ul>
1178<a class="cat-post-footer-link" href="https://www.evengineeringonline.com/category/tech-spotlight/">More Tech Spotlight</a></div></section>
1179<section id="category-posts-4" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Featured Contributions</h4>
1180<ul id="category-posts-4-internal" class="category-posts-internal">
1181<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" title="Q&amp;A: How EV architectures are changing high-speed connectivity"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13688 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" rel="bookmark">Q&#038;A: How EV architectures are changing high-speed connectivity</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" title="How to catch EV faults before they become failures"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13624 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" rel="bookmark">How to catch EV faults before they become failures</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/busbar-design-and-stray-inductance-affect-ev-power-electronics/" title="How do busbar design and stray inductance affect EV power electronics?"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Featured-Image-800-X-500-EV-Engineering-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-13597 
1181wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/busbar-design-and-stray-inductance-affect-ev-power-electronics/" rel="bookmark">How do busbar design and stray inductance affect EV power electronics?</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-do-battery-pack-design-choices-affect-ev-assembly/" title="Q&amp;A: How do battery-pack design choices affect EV assembly?"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/9M0A2129_B_01_edit-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13570 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-do-battery-pack-design-choices-affect-ev-assembly/" rel="bookmark">Q&#038;A: How do battery-pack design choices affect EV assembly?</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/engineering-reliable-charging-hubs-for-autonomous-ev-fleets/" title="Engineering reliable charging hubs for autonomous EV fleets"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Voltera-LA-Site-CS3_005-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-13536 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/engineering-reliable-charging-hubs-for-autonomous-ev-fleets/" rel="bookmark">Engineering reliable charging hubs for autonomous EV fleets</a></div></li></ul>
1182<a class="cat-post-footer-link" href="https://www.evengineeringonline.com/category/featured-contributions/">More Featured Contributions</a></div></section>
1183<section id="custom_html-9" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EV TECH TOOLBOX</h4>
1184<div class="textwidget custom-html-widget"><center>
1185<div style="display: flex; flex-direction: column; justify-content: center;
1186width: 300px;">
1187<div align="center"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/" target="_blank"><img src="https://www.evengineeringonline.com/wp-content/uploads/2025/11/EV-TechToolbox-BatteryBasics_Cover-scaled.jpg" alt=“ee
1188tech toolbox”></a></div>
1189<div align="center" style="line-height: 18px; padding-top: 10px;"><span
1190style="text-align: center; font-size: 16px;"> Explore the EV Engineering Tech Toolboxes: a collection of high-impact articles that break down the latest EV design trends and technologies. Download to stay aligned with today’s evolving EV design challenges.
1191</span></div>
1192<div align="center" style="padding-top: 10px;"><a
1193href="https://www.evengineeringonline.com/category/tech-toolboxes/"
1194target="_blank"><button style="background-color: #57BF9B; color: white;
1195font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor:
1196pointer;">View All Tech Toolboxes</button></a></div>
1197</div>
1198</center></div></div></section>
1199<section id="custom_html-6" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">Learning Center</h4>
1200<div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://www.eeworldonline.com/learning-center" target="_blank" rel="noopener"><img src="https://www.evengineeringonline.com/wp-content/uploads/2024/08/300x250-2-EE-LearnCtr.png" alt="EE Learning Center" style="max-width: 270px;" /></a>
1201</div>
1202</center></div></div></section>
1203<section id="category-posts-3" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Sponsored Content</h4>
1204<ul id="category-posts-3-internal" class="category-posts-internal">
1205<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/converting-custom-materials-for-ev-applications/" title="Converting custom materials for EV applications"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2024/11/Prismatic-EV-Battery--150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-6808 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/converting-custom-materials-for-ev-applications/" rel="bookmark">Converting custom materials for EV applications</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/advantech-powers-versatile-electric-vehicle-charging-systems/" title="Advantech Powers Versatile Electric Vehicle Charging Systems"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2023/12/advantechembeddediotgroup-sponsored-featured-image-january2024-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-2175 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/advantech-powers-versatile-electric-vehicle-charging-systems/" rel="bookmark">Advantech Powers Versatile Electric Vehicle Charging Systems</a></div></li></ul>
1206</div></section>
1207<section id="custom_html-12" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EV Training Days</h4>
1208<div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering" target="_blank" rel="noopener"><img src="https://www.evengineeringonline.com/wp-content/uploads/2026/05/300x250-EV.jpg" alt="ev" /></a>
1209</div>
1210</center></div></div></section>
1211<section id="custom_html-5" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-eveng_sidebarbotton'>
1212	
1212<script>
1213    googletag.cmd.push(function() { googletag.display('div-gpt-eveng_sidebarbotton'); });
1214  </script>
1214
1215</div></div></div></section>
1216<section id="custom_html-13" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><a href="/category/qas/"><img src="/wp-content/uploads/2025/12/qa-series-ad.jpg" alt="Q&A"></a></div></div></section>
1217</aside></div></div></div><div class="footer-socials"><div class="wrap"><label style="color:#ffffff">Connect with EV Engineering & Infrastructure</label> <a href="https://www.linkedin.com/company/evengineering/" target="_blank" rel="noopener noreferrer"><i class="icon-linkedin"></i></a></div></div><footer class="site-footer"><div class="wrap"><div class="row"><div class="footer-logo"><a href="https://www.evengineeringonline.com">EV Engineering &amp; Infrastructure</a></div><div class="footer-menu"><div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"><li id="menu-item-1090" class="menu-item"><a target="_blank" href="https://www.5gtechnologyworld.com/">5G Technology</a></li>
1218<li id="menu-item-1091" class="menu-item"><a target="_blank" href="https://www.analogictips.com/">Analog IC Tips</a></li>
1219<li id="menu-item-1325" class="menu-item"><a target="_blank" href="https://www.batterypowertips.com/">Battery Power Tips</a></li>
1220<li id="menu-item-1092" class="menu-item"><a target="_blank" href="https://www.connectortips.com/">Connector Tips</a></li>
1221<li id="menu-item-1094" class="menu-item"><a target="_blank" href="https://www.edaboard.com/">EDABoard Forums</a></li>
1222<li id="menu-item-1095" class="menu-item"><a target="_blank" href="https://www.electro-tech-online.com/">Electro-Tech-Online Forums</a></li>
1223<li id="menu-item-1096" class="menu-item"><a target="_blank" href="https://www.engineersgarage.com/">Engineer&#8217;s Garage</a></li>
1224<li id="menu-item-1097" class="menu-item"><a target="_blank" href="https://www.microcontrollertips.com/">Microcontroller Tips</a></li>
1225<li id="menu-item-1098" class="menu-item"><a target="_blank" href="https://www.powerelectronictips.com/">Power Electronic Tips</a></li>
1226<li id="menu-item-1099" class="menu-item"><a target="_blank" href="https://www.sensortips.com/">Sensor Tips</a></li>
1227<li id="menu-item-1100" class="menu-item"><a target="_blank" href="https://www.testandmeasurementtips.com/">Test and Measurement Tips</a></li>
1228<li id="menu-item-1103" class="menu-item"><a href="/contact/">Contact Us</a></li>
1229</ul></div></div><div class="footer-copyright"><p>Copyright &copy; 2026 Arrowfly LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Arrowfly<br /> <a href="https://www.arrowfly.com/privacy-policy/" target="_blank">Privacy Policy</a>  | <a href="https://www.mediakit.evengineeringonline.com/" target="_blank">Advertising</a>  | <a href="/about-ev-engineering/">About Us</a> </p></div></div></div></footer></div><div class="site-search"><div class="wrap"><div class="search-inner"><h2>Search EV Engineering & Infrastructure</h2><form class="search-form" method="get" action="https://www.evengineeringonline.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-2" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.evengineeringonline.com/?s={s}"></form></div></div></div>
1229<script type="speculationrules">
1230{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/ThemeWTWH/*","/wp-content/themes/genesis/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1231</script>
1231
1232
1233
1234<div id="sidr-mobile-menu" class="sidr right"><a class="sidr-menu-close" href="#"><i class="icon-close"></i></a><div class="menu-main-menu-container"><ul id="menu-main-menu-1" class="menu"><li class="menu-item"><a href="https://www.evengineeringonline.com/category/technology-news/">News</a></li>
1235<li class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/faq/">Articles</a>
1236<ul class="sub-menu">
1237	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/qas/">Q&amp;As</a></li>
1238	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-spotlight/">Tech Spotlight</a></li>
1239</ul>
1240</li>
1241<li class="menu-item"><a href="https://www.evengineeringonline.com/category/batteries/">Batteries</a></li>
1242<li class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/charging/">Charging</a>
1243<ul class="sub-menu">
1244	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/wireless-charging/">Wireless Charging</a></li>
1245	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/vehicle-to-grid-v2g/">Vehicle-to-Grid (V2G)</a></li>
1246</ul>
1247</li>
1248<li class="menu-item"><a href="https://www.evengineeringonline.com/category/electrification/">Electrification</a></li>
1249<li class="menu-item"><a href="https://www.evengineeringonline.com/category/testing-safety/">Testing and Safety</a></li>
1250<li class="menu-item menu-item-has-children"><a>Learn</a>
1251<ul class="sub-menu">
1252	<li class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/learning-center">Learning Center</a></li>
1253	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/">Tech Toolboxes</a></li>
1254	<li class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering">Webinars</a></li>
1255</ul>
1256</li>
1257<li class="menu-item menu-item-has-children"><a>Resources</a>
1258<ul class="sub-menu">
1259	<li class="menu-item"><a href="https://www.evengineeringonline.com/category/digital-issues/">Digital Editions</a></li>
1260	<li class="menu-item"><a target="_blank" href="https://www.designworldonline.com/category/news/engineering-diversity/">Diversity &#038; Inclusion</a></li>
1261	<li class="menu-item"><a href="/voices/">Voices</a></li>
1262</ul>
1263</li>
1264<li class="menu-item"><a target="_blank" href="https://www.mediakit.evengineeringonline.com/">Advertise</a></li>
1265<li class="site-header--subscribe menu-item"><a href="https://www.evengineeringonline.com/welcome-ev-community/">Subscribe</a></li>
1266</ul></div></div></div>
1266<script type="text/javascript">
1267jQuery( function() {
1268if ( window.Cookies ) {
1269Cookies.set( "gp_easy_passthrough_session", "72803481f17b7c2c6347f273c6b3bf37||1790661779||1790661419", {"expires": new Date( new Date().getTime() + 1800000 ),"path": "/","domain": "","SameSite": "Lax","secure": false} );
1270}
1271} );
1272</script>
1272
1273
1274		
1274<script type="text/html" id="tmpl-media-frame">
1275		<div class="media-frame-title" id="media-frame-title"></div>
1276		<h2 class="media-frame-menu-heading">Actions</h2>
1277		<button type="button" class="button button-link media-frame-menu-toggle" aria-expanded="false">
1278			Menu			<span class="dashicons dashicons-arrow-down" aria-hidden="true"></span>
1279		</button>
1280		<div class="media-frame-menu"></div>
1281		<div class="media-frame-tab-panel">
1282			<div class="media-frame-router"></div>
1283			<div class="media-frame-content"></div>
1284		</div>
1285		<h2 class="media-frame-actions-heading screen-reader-text">
1286		Selected media actions		</h2>
1287		<div class="media-frame-toolbar"></div>
1288		<div class="media-frame-uploader"></div>
1289	</script>
1289
1290
1291		
1291<script type="text/html" id="tmpl-media-modal">
1292		<div id="wp-media-modal" tabindex="0" class="media-modal wp-core-ui" role="dialog" aria-labelledby="media-frame-title">
1293			<# if ( data.hasCloseButton ) { #>
1294				<button type="button" class="media-modal-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text">
1295					Close dialog				</span></button>
1296			<# } #>
1297			<div class="media-modal-content" role="document"></div>
1298		</div>
1299		<div class="media-modal-backdrop"></div>
1300	</script>
1300
1301
1302		
1302<script type="text/html" id="tmpl-uploader-window">
1303		<div class="uploader-window-content">
1304			<div class="uploader-editor-title">Drop files to upload</div>
1305		</div>
1306	</script>
1306
1307
1308		
1308<script type="text/html" id="tmpl-uploader-editor">
1309		<div class="uploader-editor-content">
1310			<div class="uploader-editor-title">Drop files to upload</div>
1311		</div>
1312	</script>
1312
1313
1314		
1314<script type="text/html" id="tmpl-uploader-inline">
1315		<# var messageClass = data.message ? 'has-upload-message' : 'no-upload-message'; #>
1316		<# if ( data.canClose ) { #>
1317		<button class="close dashicons dashicons-no"><span class="screen-reader-text">
1318			Close uploader		</span></button>
1319		<# } #>
1320		<div class="uploader-inline-content {{ messageClass }}">
1321		<# if ( data.message ) { #>
1322			<h2 class="upload-message">{{ data.message }}</h2>
1323		<# } #>
1324					<div class="upload-ui">
1325				<h2 class="upload-instructions drop-instructions">Drop files to upload</h2>
1326				<p class="upload-instructions drop-instructions">or</p>
1327				<button type="button" class="browser button button-hero" aria-describedby="post-upload-info">Select Files</button>
1328			</div>
1329
1330			<div class="upload-inline-status"></div>
1331
1332			<div class="post-upload-ui" id="post-upload-info">
1333				
1334				<p class="max-upload-size">
1335				Maximum upload file size: 50 MB.				</p>
1336
1337				<# if ( data.suggestedWidth && data.suggestedHeight ) { #>
1338					<p class="suggested-dimensions">
1339						Suggested image dimensions: {{data.suggestedWidth}} by {{data.suggestedHeight}} pixels.					</p>
1340				<# } #>
1341
1342							</div>
1343				</div>
1344	</script>
1344
1345
1346		
1346<script type="text/html" id="tmpl-media-library-view-switcher">
1347		<a href="https://www.evengineeringonline.com/wp-admin/upload.php?mode=list" class="view-list">
1348			<span class="screen-reader-text">
1349				List view			</span>
1350		</a>
1351		<a href="https://www.evengineeringonline.com/wp-admin/upload.php?mode=grid" class="view-grid current" aria-current="page">
1352			<span class="screen-reader-text">
1353				Grid view			</span>
1354		</a>
1355	</script>
1355
1356
1357		
1357<script type="text/html" id="tmpl-uploader-status">
1358		<h2>Uploading</h2>
1359
1360		<div class="media-progress-bar"><div></div></div>
1361		<div class="upload-details">
1362			<span class="upload-count">
1363				<span class="upload-index"></span> / <span class="upload-total"></span>
1364			</span>
1365			<span class="upload-detail-separator">&ndash;</span>
1366			<span class="upload-filename"></span>
1367		</div>
1368		<div class="upload-errors"></div>
1369		<button type="button" class="button upload-dismiss-errors">Dismiss errors</button>
1370	</script>
1370
1371
1372		
1372<script type="text/html" id="tmpl-uploader-status-error">
1373		<span class="upload-error-filename word-wrap-break-word">{{{ data.filename }}}</span>
1374		<span class="upload-error-message">{{ data.message }}</span>
1375	</script>
1375
1376
1377		
1377<script type="text/html" id="tmpl-edit-attachment-frame">
1378		<div class="edit-media-header">
1379			<button class="left dashicons"<# if ( ! data.hasPrevious ) { #> disabled<# } #>><span class="screen-reader-text">Edit previous media item</span></button>
1380			<button class="right dashicons"<# if ( ! data.hasNext ) { #> disabled<# } #>><span class="screen-reader-text">Edit next media item</span></button>
1381			<button type="button" class="media-modal-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text">Close dialog</span></button>
1382		</div>
1383		<div class="media-frame-title"></div>
1384		<div class="media-frame-content"></div>
1385	</script>
1385
1386
1387		
1387<script type="text/html" id="tmpl-attachment-details-two-column">
1388		<div class="attachment-media-view {{ data.orientation }}">
1389						<h2 class="screen-reader-text">Attachment Preview</h2>
1390			<div class="thumbnail thumbnail-{{ data.type }}">
1391				<# if ( data.uploading ) { #>
1392					<div class="media-progress-bar"><div></div></div>
1393				<# } else if ( data.sizes && data.sizes.full ) { #>
1394					<img class="details-image" src="{{ data.sizes.full.url }}" draggable="false" alt="" />
1395				<# } else if ( data.sizes && data.sizes.large ) { #>
1396					<img class="details-image" src="{{ data.sizes.large.url }}" draggable="false" alt="" />
1397				<# } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #>
1398					<img class="details-image icon" src="{{ data.icon }}" draggable="false" alt="" />
1399				<# } #>
1400
1401				<# if ( 'audio' === data.type ) { #>
1402				<div class="wp-media-wrapper wp-audio">
1403					<audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none">
1404						<source type="{{ data.mime }}" src="{{ data.url }}" />
1405					</audio>
1406				</div>
1407				<# } else if ( 'video' === data.type ) {
1408					var w_rule = '';
1409					if ( data.width ) {
1410						w_rule = 'width: ' + data.width + 'px;';
1411					} else if ( wp.media.view.settings.contentWidth ) {
1412						w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;';
1413					}
1414				#>
1415				<div style="{{ w_rule }}" class="wp-media-wrapper wp-video">
1416					<video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata"
1417						<# if ( data.width ) { #>width="{{ data.width }}"<# } #>
1418						<# if ( data.height ) { #>height="{{ data.height }}"<# } #>
1419						<# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>>
1420						<source type="{{ data.mime }}" src="{{ data.url }}" />
1421					</video>
1422				</div>
1423				<# } #>
1424
1425				<div class="attachment-actions">
1426					<# if ( 'image' === data.type && ! data.uploading && data.sizes && data.can.save ) { #>
1427					<button type="button" class="button edit-attachment">Edit Image</button>
1428					<# } else if ( 'pdf' === data.subtype && data.sizes ) { #>
1429					<p>Document Preview</p>
1430					<# } #>
1431				</div>
1432			</div>
1433		</div>
1434		<div class="attachment-info">
1435			<span class="settings-save-status" role="status">
1436				<span class="spinner"></span>
1437				<span class="saved">Saved.</span>
1438			</span>
1439			<div class="details">
1440				<h2 class="screen-reader-text">
1441					Details				</h2>
1442				<div class="uploaded"><strong>Uploaded on:</strong> {{ data.dateFormatted }}</div>
1443				<div class="uploaded-by word-wrap-break-word">
1444					<strong>Uploaded by:</strong>
1445						<# if ( data.authorLink ) { #>
1446							<a href="{{ data.authorLink }}">{{ data.authorName }}</a>
1447						<# } else { #>
1448							{{ data.authorName }}
1449						<# } #>
1450				</div>
1451				<# if ( data.uploadedToTitle ) { #>
1452					<div class="uploaded-to">
1453						<strong>Uploaded to:</strong>
1454						<# if ( data.uploadedToLink ) { #>
1455							<a href="{{ data.uploadedToLink }}">{{ data.uploadedToTitle }}</a>
1456						<# } else { #>
1457							{{ data.uploadedToTitle }}
1458						<# } #>
1459					</div>
1460				<# } #>
1461				<div class="filename"><strong>File name:</strong> {{ data.filename }}</div>
1462				<div class="file-type"><strong>File type:</strong> {{ data.mime }}</div>
1463				<div class="file-size"><strong>File size:</strong> {{ data.filesizeHumanReadable }}</div>
1464				<# if ( 'image' === data.type && ! data.uploading ) { #>
1465					<# if ( data.width && data.height ) { #>
1466						<div class="dimensions"><strong>Dimensions:</strong>
1467							{{ data.width }} by {{ data.height }} pixels						</div>
1468					<# } #>
1469
1470					<# if ( data.originalImageURL && data.originalImageName ) { #>
1471						<div class="word-wrap-break-word">
1472							<strong>Original image:</strong>
1473							<a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a>
1474						</div>
1475					<# } #>
1476				<# } #>
1477
1478				<# if ( data.fileLength && data.fileLengthHumanReadable ) { #>
1479					<div class="file-length"><strong>Length:</strong>
1480						<span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span>
1481						<span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span>
1482					</div>
1483				<# } #>
1484
1485				<# if ( 'audio' === data.type && data.meta.bitrate ) { #>
1486					<div class="bitrate">
1487						<strong>Bitrate:</strong> {{ Math.round( data.meta.bitrate / 1000 ) }}kb/s
1488						<# if ( data.meta.bitrate_mode ) { #>
1489						{{ ' ' + data.meta.bitrate_mode.toUpperCase() }}
1490						<# } #>
1491					</div>
1492				<# } #>
1493
1494				<# if ( data.mediaStates ) { #>
1495					<div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div>
1496				<# } #>
1497
1498				<div class="compat-meta">
1499					<# if ( data.compat && data.compat.meta ) { #>
1500						{{{ data.compat.meta }}}
1501					<# } #>
1502				</div>
1503			</div>
1504
1505			<div class="settings">
1506				<# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
1507				<# if ( 'image' === data.type ) { #>
1508					<span class="setting alt-text has-description" data-setting="alt">
1509						<label for="attachment-details-two-column-alt-text" class="name">Alternative Text</label>
1510						<textarea id="attachment-details-two-column-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea>
1511					</span>
1512					<p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p>
1513				<# } #>
1514								<span class="setting" data-setting="title">
1515					<label for="attachment-details-two-column-title" class="name">Title</label>
1516					<input type="text" id="attachment-details-two-column-title" value="{{ data.title }}" {{ maybeReadOnly }} />
1517				</span>
1518								<# if ( 'audio' === data.type ) { #>
1519								<span class="setting" data-setting="artist">
1520					<label for="attachment-details-two-column-artist" class="name">Artist</label>
1521					<input type="text" id="attachment-details-two-column-artist" value="{{ data.artist || data.meta.artist || '' }}" />
1522				</span>
1523								<span class="setting" data-setting="album">
1524					<label for="attachment-details-two-column-album" class="name">Album</label>
1525					<input type="text" id="attachment-details-two-column-album" value="{{ data.album || data.meta.album || '' }}" />
1526				</span>
1527								<# } #>
1528				<span class="setting" data-setting="caption">
1529					<# if ( 'image' === data.type ) { #>
1530					<label for="attachment-details-two-column-caption" class="name">Image Caption</label>
1531					<# } else { #>
1532					<label for="attachment-details-two-column-caption" class="name">Short Description</label>
1533					<# } #>
1534					<textarea id="attachment-details-two-column-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea>
1535				</span>
1536				<span class="setting" data-setting="description">
1537					<label for="attachment-details-two-column-description" class="name">Description</label>
1538					<textarea id="attachment-details-two-column-description" {{ maybeReadOnly }}>{{ data.description }}</textarea>
1539				</span>
1540				<span class="setting" data-setting="url">
1541					<label for="attachment-details-two-column-copy-link" class="name">File URL:</label>
1542					<input type="text" class="attachment-details-copy-link ltr" id="attachment-details-two-column-copy-link" value="{{ data.url }}" readonly />
1543					<span class="copy-to-clipboard-container">
1544						<button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-two-column-copy-link">Copy URL to clipboard</button>
1545						<span class="success hidden" aria-hidden="true">Copied!</span>
1546					</span>
1547				</span>
1548				<div class="attachment-compat"></div>
1549			</div>
1550
1551			<div class="actions">
1552				<# if ( data.link ) { #>
1553										<a class="view-attachment" href="{{ data.link }}">View attachment page</a>
1554				<# } #>
1555				<# if ( data.can.save ) { #>
1556					<# if ( data.link ) { #>
1557						<span class="links-separator">|</span>
1558					<# } #>
1559					<a href="{{ data.editLink }}">Edit more details</a>
1560				<# } #>
1561				<# if ( data.can.save && data.link ) { #>
1562					<span class="links-separator">|</span>
1563					<a href="{{ data.url }}" download>Download file</a>
1564				<# } #>
1565				<# if ( ! data.uploading && data.can.remove ) { #>
1566					<# if ( data.link || data.can.save ) { #>
1567						<span class="links-separator">|</span>
1568					<# } #>
1569											<button type="button" class="button-link delete-attachment">Delete permanently</button>
1570									<# } #>
1571			</div>
1572		</div>
1573	</script>
1573
1574
1575		
1575<script type="text/html" id="tmpl-attachment">
1576		<div class="attachment-preview js--select-attachment type-{{ data.type }} subtype-{{ data.subtype }} {{ data.orientation }}">
1577			<div class="thumbnail">
1578				<# if ( data.uploading ) { #>
1579					<div class="media-progress-bar"><div style="width: {{ data.percent }}%"></div></div>
1580				<# } else if ( 'image' === data.type && data.size && data.size.url ) { #>
1581					<div class="centered">
1582						<img src="{{ data.size.url }}" draggable="false" alt="" />
1583					</div>
1584				<# } else { #>
1585					<div class="centered">
1586						<# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>
1587							<img src="{{ data.image.src }}" class="thumbnail" draggable="false" alt="" />
1588						<# } else if ( data.sizes ) {
1589								if ( data.sizes.medium ) { #>
1590									<img src="{{ data.sizes.medium.url }}" class="thumbnail" draggable="false" alt="" />
1591								<# } else { #>
1592									<img src="{{ data.sizes.full.url }}" class="thumbnail" draggable="false" alt="" />
1593								<# } #>
1594						<# } else { #>
1595							<img src="{{ data.icon }}" class="icon" draggable="false" alt="" />
1596						<# } #>
1597					</div>
1598					<div class="filename">
1599						<div>{{ data.filename }}</div>
1600					</div>
1601				<# } #>
1602			</div>
1603			<# if ( data.buttons.close ) { #>
1604				<button type="button" class="button-link attachment-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text">
1605					Remove				</span></button>
1606			<# } #>
1607		</div>
1608		<# if ( data.buttons.check ) { #>
1609			<button type="button" class="check" tabindex="-1"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text">
1610				Deselect			</span></button>
1611		<# } #>
1612		<#
1613		var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly';
1614		if ( data.describe ) {
1615			if ( 'image' === data.type ) { #>
1616				<input type="text" value="{{ data.caption }}" class="describe" data-setting="caption"
1617					aria-label="Caption"
1618					placeholder="Caption&hellip;" {{ maybeReadOnly }} />
1619			<# } else { #>
1620				<input type="text" value="{{ data.title }}" class="describe" data-setting="title"
1621					<# if ( 'video' === data.type ) { #>
1622						aria-label="Video title"
1623						placeholder="Video title&hellip;"
1624					<# } else if ( 'audio' === data.type ) { #>
1625						aria-label="Audio title"
1626						placeholder="Audio title&hellip;"
1627					<# } else { #>
1628						aria-label="Media title"
1629						placeholder="Media title&hellip;"
1630					<# } #> {{ maybeReadOnly }} />
1631			<# }
1632		} #>
1633	</script>
1633
1634
1635		
1635<script type="text/html" id="tmpl-attachment-details">
1636		<h2>
1637			Attachment Details			<span class="settings-save-status" role="status">
1638				<span class="spinner"></span>
1639				<span class="saved">Saved.</span>
1640			</span>
1641		</h2>
1642		<div class="attachment-info">
1643
1644			<# if ( 'audio' === data.type ) { #>
1645				<div class="wp-media-wrapper wp-audio">
1646					<audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none">
1647						<source type="{{ data.mime }}" src="{{ data.url }}" />
1648					</audio>
1649				</div>
1650			<# } else if ( 'video' === data.type ) {
1651				var w_rule = '';
1652				if ( data.width ) {
1653					w_rule = 'width: ' + data.width + 'px;';
1654				} else if ( wp.media.view.settings.contentWidth ) {
1655					w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;';
1656				}
1657			#>
1658				<div style="{{ w_rule }}" class="wp-media-wrapper wp-video">
1659					<video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata"
1660						<# if ( data.width ) { #>width="{{ data.width }}"<# } #>
1661						<# if ( data.height ) { #>height="{{ data.height }}"<# } #>
1662						<# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>>
1663						<source type="{{ data.mime }}" src="{{ data.url }}" />
1664					</video>
1665				</div>
1666			<# } else { #>
1667				<div class="thumbnail thumbnail-{{ data.type }}">
1668					<# if ( data.uploading ) { #>
1669						<div class="media-progress-bar"><div></div></div>
1670					<# } else if ( 'image' === data.type && data.size && data.size.url ) { #>
1671						<img src="{{ data.size.url }}" draggable="false" alt="" />
1672					<# } else { #>
1673						<img src="{{ data.icon }}" class="icon" draggable="false" alt="" />
1674					<# } #>
1675				</div>
1676			<# } #>
1677
1678			<div class="details">
1679				<div class="filename">{{ data.filename }}</div>
1680				<div class="uploaded">{{ data.dateFormatted }}</div>
1681
1682				<div class="file-size">{{ data.filesizeHumanReadable }}</div>
1683				<# if ( 'image' === data.type && ! data.uploading ) { #>
1684					<# if ( data.width && data.height ) { #>
1685						<div class="dimensions">
1686							{{ data.width }} by {{ data.height }} pixels						</div>
1687					<# } #>
1688
1689					<# if ( data.originalImageURL && data.originalImageName ) { #>
1690						<div class="word-wrap-break-word">
1691							Original image:							<a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a>
1692						</div>
1693					<# } #>
1694
1695					<# if ( data.can.save && data.sizes ) { #>
1696						<a class="edit-attachment" href="{{ data.editLink }}&amp;image-editor" target="_blank">Edit Image</a>
1697					<# } #>
1698				<# } #>
1699
1700				<# if ( data.fileLength && data.fileLengthHumanReadable ) { #>
1701					<div class="file-length">Length:						<span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span>
1702						<span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span>
1703					</div>
1704				<# } #>
1705
1706				<# if ( data.mediaStates ) { #>
1707					<div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div>
1708				<# } #>
1709
1710				<# if ( ! data.uploading && data.can.remove ) { #>
1711											<button type="button" class="button-link delete-attachment">Delete permanently</button>
1712									<# } #>
1713
1714				<div class="compat-meta">
1715					<# if ( data.compat && data.compat.meta ) { #>
1716						{{{ data.compat.meta }}}
1717					<# } #>
1718				</div>
1719			</div>
1720		</div>
1721		<# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
1722		<# if ( 'image' === data.type ) { #>
1723			<span class="setting alt-text has-description" data-setting="alt">
1724				<label for="attachment-details-alt-text" class="name">Alt Text</label>
1725				<textarea id="attachment-details-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea>
1726			</span>
1727			<p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p>
1728		<# } #>
1729				<span class="setting" data-setting="title">
1730			<label for="attachment-details-title" class="name">Title</label>
1731			<input type="text" id="attachment-details-title" value="{{ data.title }}" {{ maybeReadOnly }} />
1732		</span>
1733				<# if ( 'audio' === data.type ) { #>
1734				<span class="setting" data-setting="artist">
1735			<label for="attachment-details-artist" class="name">Artist</label>
1736			<input type="text" id="attachment-details-artist" value="{{ data.artist || data.meta.artist || '' }}" />
1737		</span>
1738				<span class="setting" data-setting="album">
1739			<label for="attachment-details-album" class="name">Album</label>
1740			<input type="text" id="attachment-details-album" value="{{ data.album || data.meta.album || '' }}" />
1741		</span>
1742				<# } #>
1743		<span class="setting" data-setting="caption">
1744			<# if ( 'image' === data.type ) { #>
1745			<label for="attachment-details-caption" class="name">Image Caption</label>
1746			<# } else { #>
1747			<label for="attachment-details-caption" class="name">Short Description</label>
1748			<# } #>
1749			<textarea id="attachment-details-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea>
1750		</span>
1751		<span class="setting" data-setting="description">
1752			<label for="attachment-details-description" class="name">Description</label>
1753			<textarea id="attachment-details-description" {{ maybeReadOnly }}>{{ data.description }}</textarea>
1754		</span>
1755		<span class="setting" data-setting="url">
1756			<label for="attachment-details-copy-link" class="name">File URL:</label>
1757			<input type="text" class="attachment-details-copy-link ltr" id="attachment-details-copy-link" value="{{ data.url }}" readonly />
1758			<div class="copy-to-clipboard-container">
1759				<button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-copy-link">Copy URL to clipboard</button>
1760				<span class="success hidden" aria-hidden="true">Copied!</span>
1761			</div>
1762		</span>
1763	</script>
1763
1764
1765		
1765<script type="text/html" id="tmpl-media-selection">
1766		<div class="selection-info">
1767			<span class="count"></span>
1768			<# if ( data.editable ) { #>
1769				<button type="button" class="button-link edit-selection">Edit Selection</button>
1770			<# } #>
1771			<# if ( data.clearable ) { #>
1772				<button type="button" class="button-link clear-selection">Clear</button>
1773			<# } #>
1774		</div>
1775		<div class="selection-view"></div>
1776	</script>
1776
1777
1778		
1778<script type="text/html" id="tmpl-attachment-display-settings">
1779		<h2>Attachment Display Settings</h2>
1780
1781		<# if ( 'image' === data.type ) { #>
1782			<span class="setting align">
1783				<label for="attachment-display-settings-alignment" class="name">Alignment</label>
1784				<select id="attachment-display-settings-alignment" class="alignment"
1785					data-setting="align"
1786					<# if ( data.userSettings ) { #>
1787						data-user-setting="align"
1788					<# } #>>
1789
1790					<option value="left">
1791						Left					</option>
1792					<option value="center">
1793						Center					</option>
1794					<option value="right">
1795						Right					</option>
1796					<option value="none" selected>
1797						None					</option>
1798				</select>
1799			</span>
1800		<# } #>
1801
1802		<span class="setting">
1803			<label for="attachment-display-settings-link-to" class="name">
1804				<# if ( data.model.canEmbed ) { #>
1805					Embed or Link				<# } else { #>
1806					Link To				<# } #>
1807			</label>
1808			<select id="attachment-display-settings-link-to" class="link-to"
1809				data-setting="link"
1810				<# if ( data.userSettings && ! data.model.canEmbed ) { #>
1811					data-user-setting="urlbutton"
1812				<# } #>>
1813
1814			<# if ( data.model.canEmbed ) { #>
1815				<option value="embed" selected>
1816					Embed Media Player				</option>
1817				<option value="file">
1818			<# } else { #>
1819				<option value="none" selected>
1820					None				</option>
1821				<option value="file">
1822			<# } #>
1823				<# if ( data.model.canEmbed ) { #>
1824					Link to Media File				<# } else { #>
1825					Media File				<# } #>
1826				</option>
1827				<option value="post">
1828				<# if ( data.model.canEmbed ) { #>
1829					Link to Attachment Page				<# } else { #>
1830					Attachment Page				<# } #>
1831				</option>
1832			<# if ( 'image' === data.type ) { #>
1833				<option value="custom">
1834					Custom URL				</option>
1835			<# } #>
1836			</select>
1837		</span>
1838		<span class="setting">
1839			<label for="attachment-display-settings-link-to-custom" class="name">URL</label>
1840			<input type="text" id="attachment-display-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" />
1841		</span>
1842
1843		<# if ( 'undefined' !== typeof data.sizes ) { #>
1844			<span class="setting">
1845				<label for="attachment-display-settings-size" class="name">Size</label>
1846				<select id="attachment-display-settings-size" class="size" name="size"
1847					data-setting="size"
1848					<# if ( data.userSettings ) { #>
1849						data-user-setting="imgsize"
1850					<# } #>>
1851											<#
1852						var size = data.sizes['thumbnail'];
1853						if ( size ) { #>
1854							<option value="thumbnail" >
1855								Thumbnail &ndash; {{ size.width }} &times; {{ size.height }}
1856							</option>
1857						<# } #>
1858											<#
1859						var size = data.sizes['medium'];
1860						if ( size ) { #>
1861							<option value="medium" >
1862								Medium &ndash; {{ size.width }} &times; {{ size.height }}
1863							</option>
1864						<# } #>
1865											<#
1866						var size = data.sizes['large'];
1867						if ( size ) { #>
1868							<option value="large" >
1869								Large &ndash; {{ size.width }} &times; {{ size.height }}
1870							</option>
1871						<# } #>
1872											<#
1873						var size = data.sizes['full'];
1874						if ( size ) { #>
1875							<option value="full"  selected='selected'>
1876								Full Size &ndash; {{ size.width }} &times; {{ size.height }}
1877							</option>
1878						<# } #>
1879									</select>
1880			</span>
1881		<# } #>
1882	</script>
1882
1883
1884		
1884<script type="text/html" id="tmpl-gallery-settings">
1885		<h2>Gallery Settings</h2>
1886
1887		<span class="setting">
1888			<label for="gallery-settings-link-to" class="name">Link To</label>
1889			<select id="gallery-settings-link-to" class="link-to"
1890				data-setting="link"
1891				<# if ( data.userSettings ) { #>
1892					data-user-setting="urlbutton"
1893				<# } #>>
1894
1895				<option value="post" <# if ( ! wp.media.galleryDefaults.link || 'post' === wp.media.galleryDefaults.link ) {
1896					#>selected="selected"<# }
1897				#>>
1898					Attachment Page				</option>
1899				<option value="file" <# if ( 'file' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
1900					Media File				</option>
1901				<option value="none" <# if ( 'none' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
1902					None				</option>
1903			</select>
1904		</span>
1905
1906		<span class="setting">
1907			<label for="gallery-settings-columns" class="name select-label-inline">Columns</label>
1908			<select id="gallery-settings-columns" class="columns" name="columns"
1909				data-setting="columns">
1910									<option value="1" <#
1911						if ( 1 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1912					#>>
1913						1					</option>
1914									<option value="2" <#
1915						if ( 2 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1916					#>>
1917						2					</option>
1918									<option value="3" <#
1919						if ( 3 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1920					#>>
1921						3					</option>
1922									<option value="4" <#
1923						if ( 4 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1924					#>>
1925						4					</option>
1926									<option value="5" <#
1927						if ( 5 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1928					#>>
1929						5					</option>
1930									<option value="6" <#
1931						if ( 6 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1932					#>>
1933						6					</option>
1934									<option value="7" <#
1935						if ( 7 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1936					#>>
1937						7					</option>
1938									<option value="8" <#
1939						if ( 8 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1940					#>>
1941						8					</option>
1942									<option value="9" <#
1943						if ( 9 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
1944					#>>
1945						9					</option>
1946							</select>
1947		</span>
1948
1949		<span class="setting">
1950			<input type="checkbox" id="gallery-settings-random-order" data-setting="_orderbyRandom" />
1951			<label for="gallery-settings-random-order" class="checkbox-label-inline">Random Order</label>
1952		</span>
1953
1954		<span class="setting size">
1955			<label for="gallery-settings-size" class="name">Size</label>
1956			<select id="gallery-settings-size" class="size" name="size"
1957				data-setting="size"
1958				<# if ( data.userSettings ) { #>
1959					data-user-setting="imgsize"
1960				<# } #>
1961				>
1962									<option value="thumbnail">
1963						Thumbnail					</option>
1964									<option value="medium">
1965						Medium					</option>
1966									<option value="large">
1967						Large					</option>
1968									<option value="full">
1969						Full Size					</option>
1970							</select>
1971		</span>
1972	</script>
1972
1973
1974		
1974<script type="text/html" id="tmpl-playlist-settings">
1975		<h2>Playlist Settings</h2>
1976
1977		<# var emptyModel = _.isEmpty( data.model ),
1978			isVideo = 'video' === data.controller.get('library').props.get('type'); #>
1979
1980		<span class="setting">
1981			<input type="checkbox" id="playlist-settings-show-list" data-setting="tracklist" <# if ( emptyModel ) { #>
1982				checked="checked"
1983			<# } #> />
1984			<label for="playlist-settings-show-list" class="checkbox-label-inline">
1985				<# if ( isVideo ) { #>
1986				Show Video List				<# } else { #>
1987				Show Tracklist				<# } #>
1988			</label>
1989		</span>
1990
1991		<# if ( ! isVideo ) { #>
1992		<span class="setting">
1993			<input type="checkbox" id="playlist-settings-show-artist" data-setting="artists" <# if ( emptyModel ) { #>
1994				checked="checked"
1995			<# } #> />
1996			<label for="playlist-settings-show-artist" class="checkbox-label-inline">
1997				Show Artist Name in Tracklist			</label>
1998		</span>
1999		<# } #>
2000
2001		<span class="setting">
2002			<input type="checkbox" id="playlist-settings-show-images" data-setting="images" <# if ( emptyModel ) { #>
2003				checked="checked"
2004			<# } #> />
2005			<label for="playlist-settings-show-images" class="checkbox-label-inline">
2006				Show Images			</label>
2007		</span>
2008	</script>
2008
2009
2010		
2010<script type="text/html" id="tmpl-embed-link-settings">
2011		<span class="setting link-text">
2012			<label for="embed-link-settings-link-text" class="name">Link Text</label>
2013			<input type="text" id="embed-link-settings-link-text" class="alignment" data-setting="linkText" />
2014		</span>
2015		<div class="embed-container" style="display: none;">
2016			<div class="embed-preview"></div>
2017		</div>
2018	</script>
2018
2019
2020		
2020<script type="text/html" id="tmpl-embed-image-settings">
2021		<div class="wp-clearfix">
2022			<div class="thumbnail">
2023				<img src="{{ data.model.url }}" draggable="false" alt="" />
2024			</div>
2025		</div>
2026
2027		<span class="setting alt-text has-description">
2028			<label for="embed-image-settings-alt-text" class="name">Alternative Text</label>
2029			<textarea id="embed-image-settings-alt-text" data-setting="alt" aria-describedby="alt-text-description"></textarea>
2030		</span>
2031		<p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p>
2032
2033					<span class="setting caption">
2034				<label for="embed-image-settings-caption" class="name">Caption</label>
2035				<textarea id="embed-image-settings-caption" data-setting="caption"></textarea>
2036			</span>
2037		
2038		<fieldset class="setting-group">
2039			<legend class="name">Align</legend>
2040			<span class="setting align">
2041				<span class="button-group button-large" data-setting="align">
2042					<button class="button" value="left">
2043						Left					</button>
2044					<button class="button" value="center">
2045						Center					</button>
2046					<button class="button" value="right">
2047						Right					</button>
2048					<button class="button active" value="none">
2049						None					</button>
2050				</span>
2051			</span>
2052		</fieldset>
2053
2054		<fieldset class="setting-group">
2055			<legend class="name">Link To</legend>
2056			<span class="setting link-to">
2057				<span class="button-group button-large" data-setting="link">
2058					<button class="button" value="file">
2059						Image URL					</button>
2060					<button class="button" value="custom">
2061						Custom URL					</button>
2062					<button class="button active" value="none">
2063						None					</button>
2064				</span>
2065			</span>
2066			<span class="setting">
2067				<label for="embed-image-settings-link-to-custom" class="name">URL</label>
2068				<input type="text" id="embed-image-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" />
2069			</span>
2070		</fieldset>
2071	</script>
2071
2072
2073		
2073<script type="text/html" id="tmpl-image-details">
2074		<div class="media-embed">
2075			<div class="embed-media-settings">
2076				<div class="column-settings">
2077					<span class="setting alt-text has-description">
2078						<label for="image-details-alt-text" class="name">Alternative Text</label>
2079						<textarea id="image-details-alt-text" data-setting="alt" aria-describedby="alt-text-description">{{ data.model.alt }}</textarea>
2080					</span>
2081					<p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p>
2082
2083											<span class="setting caption">
2084							<label for="image-details-caption" class="name">Caption</label>
2085							<textarea id="image-details-caption" data-setting="caption">{{ data.model.caption }}</textarea>
2086						</span>
2087					
2088					<h2>Display Settings</h2>
2089					<fieldset class="setting-group">
2090						<legend class="legend-inline">Align</legend>
2091						<span class="setting align">
2092							<span class="button-group button-large" data-setting="align">
2093								<button class="button" value="left">
2094									Left								</button>
2095								<button class="button" value="center">
2096									Center								</button>
2097								<button class="button" value="right">
2098									Right								</button>
2099								<button class="button active" value="none">
2100									None								</button>
2101							</span>
2102						</span>
2103					</fieldset>
2104
2105					<# if ( data.attachment ) { #>
2106						<# if ( 'undefined' !== typeof data.attachment.sizes ) { #>
2107							<span class="setting size">
2108								<label for="image-details-size" class="name">Size</label>
2109								<select id="image-details-size" class="size" name="size"
2110									data-setting="size"
2111									<# if ( data.userSettings ) { #>
2112										data-user-setting="imgsize"
2113									<# } #>>
2114																			<#
2115										var size = data.sizes['thumbnail'];
2116										if ( size ) { #>
2117											<option value="thumbnail">
2118												Thumbnail &ndash; {{ size.width }} &times; {{ size.height }}
2119											</option>
2120										<# } #>
2121																			<#
2122										var size = data.sizes['medium'];
2123										if ( size ) { #>
2124											<option value="medium">
2125												Medium &ndash; {{ size.width }} &times; {{ size.height }}
2126											</option>
2127										<# } #>
2128																			<#
2129										var size = data.sizes['large'];
2130										if ( size ) { #>
2131											<option value="large">
2132												Large &ndash; {{ size.width }} &times; {{ size.height }}
2133											</option>
2134										<# } #>
2135																			<#
2136										var size = data.sizes['full'];
2137										if ( size ) { #>
2138											<option value="full">
2139												Full Size &ndash; {{ size.width }} &times; {{ size.height }}
2140											</option>
2141										<# } #>
2142																		<option value="custom">
2143										Custom Size									</option>
2144								</select>
2145							</span>
2146						<# } #>
2147							<div class="custom-size wp-clearfix<# if ( data.model.size !== 'custom' ) { #> hidden<# } #>">
2148								<span class="custom-size-setting">
2149									<label for="image-details-size-width">Width</label>
2150									<input type="number" id="image-details-size-width" aria-describedby="image-size-desc" data-setting="customWidth" step="1" value="{{ data.model.customWidth }}" />
2151								</span>
2152								<span class="sep" aria-hidden="true">&times;</span>
2153								<span class="custom-size-setting">
2154									<label for="image-details-size-height">Height</label>
2155									<input type="number" id="image-details-size-height" aria-describedby="image-size-desc" data-setting="customHeight" step="1" value="{{ data.model.customHeight }}" />
2156								</span>
2157								<p id="image-size-desc" class="description">Image size in pixels</p>
2158							</div>
2159					<# } #>
2160
2161					<span class="setting link-to">
2162						<label for="image-details-link-to" class="name">Link To</label>
2163						<select id="image-details-link-to" data-setting="link">
2164						<# if ( data.attachment ) { #>
2165							<option value="file">
2166								Media File							</option>
2167							<option value="post">
2168								Attachment Page							</option>
2169						<# } else { #>
2170							<option value="file">
2171								Image URL							</option>
2172						<# } #>
2173							<option value="custom">
2174								Custom URL							</option>
2175							<option value="none">
2176								None							</option>
2177						</select>
2178					</span>
2179					<span class="setting">
2180						<label for="image-details-link-to-custom" class="name">URL</label>
2181						<input type="text" id="image-details-link-to-custom" class="link-to-custom" data-setting="linkUrl" />
2182					</span>
2183
2184					<div class="advanced-section">
2185						<h2><button type="button" class="button-link advanced-toggle">Advanced Options</button></h2>
2186						<div class="advanced-settings hidden">
2187							<div class="advanced-image">
2188								<span class="setting title-text">
2189									<label for="image-details-title-attribute" class="name">Image Title Attribute</label>
2190									<input type="text" id="image-details-title-attribute" data-setting="title" value="{{ data.model.title }}" />
2191								</span>
2192								<span class="setting extra-classes">
2193									<label for="image-details-css-class" class="name">Image CSS Class</label>
2194									<input type="text" id="image-details-css-class" data-setting="extraClasse
2194s" value="{{ data.model.extraClasses }}" />
2195								</span>
2196							</div>
2197							<div class="advanced-link">
2198								<span class="setting link-target">
2199									<input type="checkbox" id="image-details-link-target" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>>
2200									<label for="image-details-link-target" class="checkbox-label">Open link in a new tab</label>
2201								</span>
2202								<span class="setting link-rel">
2203									<label for="image-details-link-rel" class="name">Link Rel</label>
2204									<input type="text" id="image-details-link-rel" data-setting="linkRel" value="{{ data.model.linkRel }}" />
2205								</span>
2206								<span class="setting link-class-name">
2207									<label for="image-details-link-css-class" class="name">Link CSS Class</label>
2208									<input type="text" id="image-details-link-css-class" data-setting="linkClassName" value="{{ data.model.linkClassName }}" />
2209								</span>
2210							</div>
2211						</div>
2212					</div>
2213				</div>
2214				<div class="column-image">
2215					<div class="image">
2216						<img src="{{ data.model.url }}" draggable="false" alt="" />
2217						<# if ( data.attachment && window.imageEdit ) { #>
2218							<div class="actions">
2219								<input type="button" class="edit-attachment button" value="Edit Original" />
2220								<input type="button" class="replace-attachment button" value="Replace" />
2221							</div>
2222						<# } #>
2223					</div>
2224				</div>
2225			</div>
2226		</div>
2227	</script>
2227
2228
2229		
2229<script type="text/html" id="tmpl-image-editor">
2230		<div id="media-head-{{ data.id }}"></div>
2231		<div id="image-editor-{{ data.id }}"></div>
2232	</script>
2232
2233
2234		
2234<script type="text/html" id="tmpl-audio-details">
2235		<# var ext, html5types = {
2236			mp3: wp.media.view.settings.embedMimes.mp3,
2237			ogg: wp.media.view.settings.embedMimes.ogg
2238		}; #>
2239
2240				<div class="media-embed media-embed-details">
2241			<div class="embed-media-settings embed-audio-settings">
2242				<audio crossorigin="anonymous" style="visibility: hidden"
2243	controls
2244	class="wp-audio-shortcode"
2245	width="{{ _.isUndefined( data.model.width ) ? 400 : data.model.width }}"
2246	preload="{{ _.isUndefined( data.model.preload ) ? 'none' : data.model.preload }}"
2247	<#
2248		if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) {
2249		#> autoplay<#
2250	}
2251		if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) {
2252		#> loop<#
2253	}
2254	#>
2255>
2256	<# if ( ! _.isEmpty( data.model.src ) ) { #>
2257	<source src="{{ data.model.src }}" type="{{ wp.media.view.settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
2258	<# } #>
2259
2260		<# if ( ! _.isEmpty( data.model.mp3 ) ) { #>
2261	<source src="{{ data.model.mp3 }}" type="{{ wp.media.view.settings.embedMimes[ 'mp3' ] }}" />
2262	<# } #>
2263			<# if ( ! _.isEmpty( data.model.ogg ) ) { #>
2264	<source src="{{ data.model.ogg }}" type="{{ wp.media.view.settings.embedMimes[ 'ogg' ] }}" />
2265	<# } #>
2266			<# if ( ! _.isEmpty( data.model.flac ) ) { #>
2267	<source src="{{ data.model.flac }}" type="{{ wp.media.view.settings.embedMimes[ 'flac' ] }}" />
2268	<# } #>
2269			<# if ( ! _.isEmpty( data.model.m4a ) ) { #>
2270	<source src="{{ data.model.m4a }}" type="{{ wp.media.view.settings.embedMimes[ 'm4a' ] }}" />
2271	<# } #>
2272			<# if ( ! _.isEmpty( data.model.wav ) ) { #>
2273	<source src="{{ data.model.wav }}" type="{{ wp.media.view.settings.embedMimes[ 'wav' ] }}" />
2274	<# } #>
2275		</audio>
2276	
2277				<# if ( ! _.isEmpty( data.model.src ) ) {
2278					ext = data.model.src.split('.').pop();
2279					if ( html5types[ ext ] ) {
2280						delete html5types[ ext ];
2281					}
2282				#>
2283				<span class="setting">
2284					<label for="audio-details-source" class="name">URL</label>
2285					<input type="text" id="audio-details-source" readonly data-setting="src" value="{{ data.model.src }}" />
2286					<button type="button" class="button-link remove-setting">Remove audio source</button>
2287				</span>
2288				<# } #>
2289								<# if ( ! _.isEmpty( data.model.mp3 ) ) {
2290					if ( ! _.isUndefined( html5types.mp3 ) ) {
2291						delete html5types.mp3;
2292					}
2293				#>
2294				<span class="setting">
2295					<label for="audio-details-mp3-source" class="name">MP3</label>
2296					<input type="text" id="audio-details-mp3-source" readonly data-setting="mp3" value="{{ data.model.mp3 }}" />
2297					<button type="button" class="button-link remove-setting">Remove audio source</button>
2298				</span>
2299				<# } #>
2300								<# if ( ! _.isEmpty( data.model.ogg ) ) {
2301					if ( ! _.isUndefined( html5types.ogg ) ) {
2302						delete html5types.ogg;
2303					}
2304				#>
2305				<span class="setting">
2306					<label for="audio-details-ogg-source" class="name">OGG</label>
2307					<input type="text" id="audio-details-ogg-source" readonly data-setting="ogg" value="{{ data.model.ogg }}" />
2308					<button type="button" class="button-link remove-setting">Remove audio source</button>
2309				</span>
2310				<# } #>
2311								<# if ( ! _.isEmpty( data.model.flac ) ) {
2312					if ( ! _.isUndefined( html5types.flac ) ) {
2313						delete html5types.flac;
2314					}
2315				#>
2316				<span class="setting">
2317					<label for="audio-details-flac-source" class="name">FLAC</label>
2318					<input type="text" id="audio-details-flac-source" readonly data-setting="flac" value="{{ data.model.flac }}" />
2319					<button type="button" class="button-link remove-setting">Remove audio source</button>
2320				</span>
2321				<# } #>
2322								<# if ( ! _.isEmpty( data.model.m4a ) ) {
2323					if ( ! _.isUndefined( html5types.m4a ) ) {
2324						delete html5types.m4a;
2325					}
2326				#>
2327				<span class="setting">
2328					<label for="audio-details-m4a-source" class="name">M4A</label>
2329					<input type="text" id="audio-details-m4a-source" readonly data-setting="m4a" value="{{ data.model.m4a }}" />
2330					<button type="button" class="button-link remove-setting">Remove audio source</button>
2331				</span>
2332				<# } #>
2333								<# if ( ! _.isEmpty( data.model.wav ) ) {
2334					if ( ! _.isUndefined( html5types.wav ) ) {
2335						delete html5types.wav;
2336					}
2337				#>
2338				<span class="setting">
2339					<label for="audio-details-wav-source" class="name">WAV</label>
2340					<input type="text" id="audio-details-wav-source" readonly data-setting="wav" value="{{ data.model.wav }}" />
2341					<button type="button" class="button-link remove-setting">Remove audio source</button>
2342				</span>
2343				<# } #>
2344				
2345				<# if ( ! _.isEmpty( html5types ) ) { #>
2346				<fieldset class="setting-group">
2347					<legend class="name">Add alternate sources for maximum HTML5 playback</legend>
2348					<span class="setting">
2349						<span class="button-large">
2350						<# _.each( html5types, function (mime, type) { #>
2351							<button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button>
2352						<# } ) #>
2353						</span>
2354					</span>
2355				</fieldset>
2356				<# } #>
2357
2358				<fieldset class="setting-group">
2359					<legend class="name">Preload</legend>
2360					<span class="setting preload">
2361						<span class="button-group button-large" data-setting="preload">
2362							<button class="button" value="auto">Auto</button>
2363							<button class="button" value="metadata">Metadata</button>
2364							<button class="button active" value="none">None</button>
2365						</span>
2366					</span>
2367				</fieldset>
2368
2369				<span class="setting-group">
2370					<span class="setting checkbox-setting autoplay">
2371						<input type="checkbox" id="audio-details-autoplay" data-setting="autoplay" />
2372						<label for="audio-details-autoplay" class="checkbox-label">Autoplay</label>
2373					</span>
2374
2375					<span class="setting checkbox-setting">
2376						<input type="checkbox" id="audio-details-loop" data-setting="loop" />
2377						<label for="audio-details-loop" class="checkbox-label">Loop</label>
2378					</span>
2379				</span>
2380			</div>
2381		</div>
2382	</script>
2382
2383
2384		
2384<script type="text/html" id="tmpl-video-details">
2385		<# var ext, html5types = {
2386			mp4: wp.media.view.settings.embedMimes.mp4,
2387			ogv: wp.media.view.settings.embedMimes.ogv,
2388			webm: wp.media.view.settings.embedMimes.webm
2389		}; #>
2390
2391				<div class="media-embed media-embed-details">
2392			<div class="embed-media-settings embed-video-settings">
2393				<div class="wp-video-holder">
2394				<#
2395				var w = ! data.model.width || data.model.width > 640 ? 640 : data.model.width,
2396					h = ! data.model.height ? 360 : data.model.height;
2397
2398				if ( data.model.width && w !== data.model.width ) {
2399					h = Math.ceil( ( h * w ) / data.model.width );
2400				}
2401				#>
2402
2403				<#  var w_rule = '', classes = [],
2404		w, h, settings = wp.media.view.settings,
2405		isYouTube = isVimeo = false;
2406
2407	if ( ! _.isEmpty( data.model.src ) ) {
2408		isYouTube = data.model.src.match(/youtube|youtu\.be/);
2409		isVimeo = -1 !== data.model.src.indexOf('vimeo');
2410	}
2411
2412	if ( settings.contentWidth && data.model.width >= settings.contentWidth ) {
2413		w = settings.contentWidth;
2414	} else {
2415		w = data.model.width;
2416	}
2417
2418	if ( w !== data.model.width ) {
2419		h = Math.ceil( ( data.model.height * w ) / data.model.width );
2420	} else {
2421		h = data.model.height;
2422	}
2423
2424	if ( w ) {
2425		w_rule = 'width: ' + w + 'px; ';
2426	}
2427
2428	if ( isYouTube ) {
2429		classes.push( 'youtube-video' );
2430	}
2431
2432	if ( isVimeo ) {
2433		classes.push( 'vimeo-video' );
2434	}
2435
2436#>
2437<div style="{{ w_rule }}" class="wp-video">
2438<video crossorigin="anonymous" controls
2439	class="wp-video-shortcode {{ classes.join( ' ' ) }}"
2440	<# if ( w ) { #>width="{{ w }}"<# } #>
2441	<# if ( h ) { #>height="{{ h }}"<# } #>
2442			<#
2443		if ( ! _.isUndefined( data.model.poster ) && data.model.poster ) {
2444			#> poster="{{ data.model.poster }}"<#
2445		} #>
2446			preload			="{{ _.isUndefined( data.model.preload ) ? 'metadata' : data.model.preload }}"
2447				<#
2448		if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) {
2449		#> autoplay<#
2450	}
2451		if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) {
2452		#> loop<#
2453	}
2454	#>
2455>
2456	<# if ( ! _.isEmpty( data.model.src ) ) {
2457		if ( isYouTube ) { #>
2458		<source src="{{ data.model.src }}" type="video/youtube" />
2459		<# } else if ( isVimeo ) { #>
2460		<source src="{{ data.model.src }}" type="video/vimeo" />
2461		<# } else { #>
2462		<source src="{{ data.model.src }}" type="{{ settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
2463		<# }
2464	} #>
2465
2466		<# if ( data.model.mp4 ) { #>
2467	<source src="{{ data.model.mp4 }}" type="{{ settings.embedMimes[ 'mp4' ] }}" />
2468	<# } #>
2469		<# if ( data.model.m4v ) { #>
2470	<source src="{{ data.model.m4v }}" type="{{ settings.embedMimes[ 'm4v' ] }}" />
2471	<# } #>
2472		<# if ( data.model.webm ) { #>
2473	<source src="{{ data.model.webm }}" type="{{ settings.embedMimes[ 'webm' ] }}" />
2474	<# } #>
2475		<# if ( data.model.ogv ) { #>
2476	<source src="{{ data.model.ogv }}" type="{{ settings.embedMimes[ 'ogv' ] }}" />
2477	<# } #>
2478		<# if ( data.model.flv ) { #>
2479	<source src="{{ data.model.flv }}" type="{{ settings.embedMimes[ 'flv' ] }}" />
2480	<# } #>
2481		{{{ data.model.content }}}
2482</video>
2483</div>
2484	
2485				<# if ( ! _.isEmpty( data.model.src ) ) {
2486					ext = data.model.src.split('.').pop();
2487					if ( html5types[ ext ] ) {
2488						delete html5types[ ext ];
2489					}
2490				#>
2491				<span class="setting">
2492					<label for="video-details-source" class="name">URL</label>
2493					<input type="text" id="video-details-source" readonly data-setting="src" value="{{ data.model.src }}" />
2494					<button type="button" class="button-link remove-setting">Remove video source</button>
2495				</span>
2496				<# } #>
2497								<# if ( ! _.isEmpty( data.model.mp4 ) ) {
2498					if ( ! _.isUndefined( html5types.mp4 ) ) {
2499						delete html5types.mp4;
2500					}
2501				#>
2502				<span class="setting">
2503					<label for="video-details-mp4-source" class="name">MP4</label>
2504					<input type="text" id="video-details-mp4-source" readonly data-setting="mp4" value="{{ data.model.mp4 }}" />
2505					<button type="button" class="button-link remove-setting">Remove video source</button>
2506				</span>
2507				<# } #>
2508								<# if ( ! _.isEmpty( data.model.m4v ) ) {
2509					if ( ! _.isUndefined( html5types.m4v ) ) {
2510						delete html5types.m4v;
2511					}
2512				#>
2513				<span class="setting">
2514					<label for="video-details-m4v-source" class="name">M4V</label>
2515					<input type="text" id="video-details-m4v-source" readonly data-setting="m4v" value="{{ data.model.m4v }}" />
2516					<button type="button" class="button-link remove-setting">Remove video source</button>
2517				</span>
2518				<# } #>
2519								<# if ( ! _.isEmpty( data.model.webm ) ) {
2520					if ( ! _.isUndefined( html5types.webm ) ) {
2521						delete html5types.webm;
2522					}
2523				#>
2524				<span class="setting">
2525					<label for="video-details-webm-source" class="name">WEBM</label>
2526					<input type="text" id="video-details-webm-source" readonly data-setting="webm" value="{{ data.model.webm }}" />
2527					<button type="button" class="button-link remove-setting">Remove video source</button>
2528				</span>
2529				<# } #>
2530								<# if ( ! _.isEmpty( data.model.ogv ) ) {
2531					if ( ! _.isUndefined( html5types.ogv ) ) {
2532						delete html5types.ogv;
2533					}
2534				#>
2535				<span class="setting">
2536					<label for="video-details-ogv-source" class="name">OGV</label>
2537					<input type="text" id="video-details-ogv-source" readonly data-setting="ogv" value="{{ data.model.ogv }}" />
2538					<button type="button" class="button-link remove-setting">Remove video source</button>
2539				</span>
2540				<# } #>
2541								<# if ( ! _.isEmpty( data.model.flv ) ) {
2542					if ( ! _.isUndefined( html5types.flv ) ) {
2543						delete html5types.flv;
2544					}
2545				#>
2546				<span class="setting">
2547					<label for="video-details-flv-source" class="name">FLV</label>
2548					<input type="text" id="video-details-flv-source" readonly data-setting="flv" value="{{ data.model.flv }}" />
2549					<button type="button" class="button-link remove-setting">Remove video source</button>
2550				</span>
2551				<# } #>
2552								</div>
2553
2554				<# if ( ! _.isEmpty( html5types ) ) { #>
2555				<fieldset class="setting-group">
2556					<legend class="name">Add alternate sources for maximum HTML5 playback</legend>
2557					<span class="setting">
2558						<span class="button-large">
2559						<# _.each( html5types, function (mime, type) { #>
2560							<button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button>
2561						<# } ) #>
2562						</span>
2563					</span>
2564				</fieldset>
2565				<# } #>
2566
2567				<# if ( ! _.isEmpty( data.model.poster ) ) { #>
2568				<span class="setting">
2569					<label for="video-details-poster-image" class="name">Poster Image</label>
2570					<input type="text" id="video-details-poster-image" readonly data-setting="poster" value="{{ data.model.poster }}" />
2571					<button type="button" class="button-link remove-setting">Remove poster image</button>
2572				</span>
2573				<# } #>
2574
2575				<fieldset class="setting-group">
2576					<legend class="name">Preload</legend>
2577					<span class="setting preload">
2578						<span class="button-group button-large" data-setting="preload">
2579							<button class="button" value="auto">Auto</button>
2580							<button class="button" value="metadata">Metadata</button>
2581							<button class="button active" value="none">None</button>
2582						</span>
2583					</span>
2584				</fieldset>
2585
2586				<span class="setting-group">
2587					<span class="setting checkbox-setting autoplay">
2588						<input type="checkbox" id="video-details-autoplay" data-setting="autoplay" />
2589						<label for="video-details-autoplay" class="checkbox-label">Autoplay</label>
2590					</span>
2591
2592					<span class="setting checkbox-setting">
2593						<input type="checkbox" id="video-details-loop" data-setting="loop" />
2594						<label for="video-details-loop" class="checkbox-label">Loop</label>
2595					</span>
2596				</span>
2597
2598				<span class="setting" data-setting="content">
2599					<#
2600					var content = '';
2601					if ( ! _.isEmpty( data.model.content ) ) {
2602						var tracks = jQuery( data.model.content ).filter( 'track' );
2603						_.each( tracks.toArray(), function( track, index ) {
2604							content += track.outerHTML; #>
2605						<label for="video-details-track-{{ index }}" class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</label>
2606						<input class="content-track" type="text" id="video-details-track-{{ index }}" aria-describedby="video-details-track-desc-{{ index }}" value="{{ track.outerHTML }}" />
2607						<span class="description" id="video-details-track-desc-{{ index }}">
2608						The srclang, label, and kind values can be edited to set the video track language and kind.						</span>
2609						<button type="button" class="button-link remove-setting remove-track">Remove video track</button><br />
2610						<# } ); #>
2611					<# } else { #>
2612					<span class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</span><br />
2613					<em>There are no associated subtitles.</em>
2614					<# } #>
2615					<textarea class="hidden content-setting">{{ content }}</textarea>
2616				</span>
2617			</div>
2618		</div>
2619	</script>
2619
2620
2621		
2621<script type="text/html" id="tmpl-editor-gallery">
2622		<# if ( data.attachments.length ) { #>
2623			<div class="gallery gallery-columns-{{ data.columns }}">
2624				<# _.each( data.attachments, function( attachment, index ) { #>
2625					<dl class="gallery-item">
2626						<dt class="gallery-icon">
2627							<# if ( attachment.thumbnail ) { #>
2628								<img src="{{ attachment.thumbnail.url }}" width="{{ attachment.thumbnail.width }}" height="{{ attachment.thumbnail.height }}" alt="{{ attachment.alt }}" />
2629							<# } else { #>
2630								<img src="{{ attachment.url }}" alt="{{ attachment.alt }}" />
2631							<# } #>
2632						</dt>
2633						<# if ( attachment.caption ) { #>
2634							<dd class="wp-caption-text gallery-caption">
2635								{{{ data.verifyHTML( attachment.caption ) }}}
2636							</dd>
2637						<# } #>
2638					</dl>
2639					<# if ( index % data.columns === data.columns - 1 ) { #>
2640						<br style="clear: both;" />
2641					<# } #>
2642				<# } ); #>
2643			</div>
2644		<# } else { #>
2645			<div class="wpview-error">
2646				<div class="dashicons dashicons-format-gallery"></div><p>No items found.</p>
2647			</div>
2648		<# } #>
2649	</script>
2649
2650
2651		
2651<script type="text/html" id="tmpl-crop-content">
2652		<img class="crop-image" src="{{ data.url }}" alt="Image crop area preview. Requires mouse interaction." />
2653		<div class="upload-errors"></div>
2654	</script>
2654
2655
2656		
2656<script type="text/html" id="tmpl-site-icon-preview-crop">
2657		<style>
2658			:root{
2659				--site-icon-url: url( "{{ data.url }}" );
2660			}
2661		</style>
2662		<h2>Site Icon Preview</h2>
2663		<p>As an app icon and a browser icon.</p>
2664		<div class="site-icon-preview crop">
2665			<div class="image-preview-wrap app-icon-preview">
2666				<img id="preview-app-icon" src="{{ data.url }}" class="app-icon-preview" alt="Preview as an app icon" />
2667			</div>
2668			<div class="site-icon-preview-browser">
2669				<svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="browser-buttons"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 20a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm18 0a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm24-6a6 6 0 1 0 0 12 6 6 0 0 0 0-12Z" /></svg>
2670				<div class="site-icon-preview-tab">
2671					<div class="image-preview-wrap browser">
2672						<img id="preview-favicon" src="{{ data.url }}" class="browser-icon-preview" alt="Preview as a browser icon" />
2673					</div>
2674					<div class="site-icon-preview-site-title" aria-hidden="true"><# print( 'EV Engineering &amp; Infrastructure' ) #></div>
2675						<svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="close-button">
2676							<path d="M12 13.0607L15.7123 16.773L16.773 15.7123L13.0607 12L16.773 8.28772L15.7123 7.22706L12 10.9394L8.28771 7.22705L7.22705 8.28771L10.9394 12L7.22706 15.7123L8.28772 16.773L12 13.0607Z" />
2677						</svg>
2678					</div>
2679				</div>
2680			</div>
2681		</div>
2682	</script>
2682
2683
2684	
2684<script id="wtwh-ai-search-script-js" src="https://scripts.wtwhmedia.com/developer/ai_search/env/prod/index.js?ver=1790659979"></script>
vendor: 1 bytes, line 2684
2684
2685<script id="thickbox-js-extra">
2686var thickboxL10n = {"next":"Next \u003E","prev":"\u003C Prev","image":"Image","of":"of","close":"Close","noiframes":"This feature requires inline frames. You have iframes disabled or your browser does not support them.","loadingAnimation":"https://www.evengineeringonline.com/wp-includes/js/thickbox/loadingAnimation.gif"};
2687//# sourceURL=thickbox-js-extra
2688</script>
vendor: 1 bytes, line 2688
2688
2689<script id="thickbox-js" src="https://www.evengineeringonline.com/wp-includes/js/thickbox/thickbox.js?ver=3.1-20121105"></script>
vendor: 1 bytes, line 2689
2689
2690<script id="underscore-js" src="https://www.evengineeringonline.com/wp-includes/js/underscore.min.js?ver=1.13.8"></script>
vendor: 1 bytes, line 2690
2690
2691<script id="shortcode-js" src="https://www.evengineeringonline.com/wp-includes/js/shortcode.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2691
2691
2692<script id="media-upload-js" src="https://www.evengineeringonline.com/wp-admin/js/media-upload.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2692
2692
2693<script id="backbone-js" src="https://www.evengineeringonline.com/wp-includes/js/backbone.min.js?ver=1.6.1"></script>
vendor: 1 bytes, line 2693
2693
2694<script id="wp-util-js-extra">
2695var _wpUtilSettings = {"ajax":{"url":"/wp-admin/admin-ajax.php"}};
2696//# sourceURL=wp-util-js-extra
2697</script>
vendor: 1 bytes, line 2697
2697
2698<script id="wp-util-js" src="https://www.evengineeringonline.com/wp-includes/js/wp-util.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2698
2698
2699<script id="wp-backbone-js" src="https://www.evengineeringonline.com/wp-includes/js/wp-backbone.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2699
2699
2700<script id="media-models-js-extra">
2701var _wpMediaModelsL10n = {"settings":{"ajaxurl":"/wp-admin/admin-ajax.php","post":{"id":0}}};
2702//# sourceURL=media-models-js-extra
2703</script>
vendor: 1 bytes, line 2703
2703
2704<script id="media-models-js" src="https://www.evengineeringonline.com/wp-includes/js/media-models.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2704
2704
2705<script id="wp-plupload-js-extra">
2706var pluploadL10n = {"queue_limit_exceeded":"You have attempted to queue too many files.","file_exceeds_size_limit":"%s exceeds the maximum upload size for this site.","zero_byte_file":"This file is empty. Please try another.","invalid_filetype":"This file cannot be processed by the web server.","not_an_image":"This file is not an image. Please try another.","image_memory_exceeded":"Memory exceeded. Please try another smaller file.","image_dimensions_exceeded":"This is larger than the maximum size. Please try another.","default_error":"An error occurred in the upload. Please try again later.","missing_upload_url":"There was a configuration error. Please contact the server administrator.","upload_limit_exceeded":"You may only upload 1 file.","http_error":"Unexpected response from the server. The file may have been uploaded successfully. Check in the Media Library or reload the page.","http_error_image":"The server cannot process the image. This can happen if the server is busy or does not have enough resources to complete the task. Uploading a smaller image may help. Suggested maximum size is 2560 pixels.","upload_failed":"Upload failed.","big_upload_failed":"Please try uploading this file with the %1$sbrowser uploader%2$s.","big_upload_queued":"%s exceeds the maximum upload size for the multi-file uploader when used in your browser.","io_error":"IO error.","security_error":"Security error.","file_cancelled":"File canceled.","upload_stopped":"Upload stopped.","dismiss":"Dismiss","crunching":"Crunching\u2026","deleted":"moved to the Trash.","error_uploading":"\u201c%s\u201d has failed to upload.","unsupported_image":"The server cannot process HEIC images. Convert it to JPEG before uploading.","noneditable_image":"The web server cannot generate responsive image sizes for this image. Convert it to JPEG or PNG before uploading.","file_url_copied":"The file URL has been copied to your clipboard"};
2707var _wpPluploadSettings = {"defaults":{"file_data_name":"async-upload","url":"/wp-admin/async-upload.php","filters":{"max_file_size":"52428800b","mime_types":[{"extensions":"jpg,jpeg,jpe,gif,png,bmp,tiff,tif,webp,avif,ico,heic,heif,heics,heifs,asf,asx,wmv,wmx,wm,avi,divx,flv,mov,qt,mpeg,mpg,mpe,mp4,m4v,ogv,webm,mkv,3gp,3gpp,3g2,3gp2,txt,asc,c,cc,h,srt,csv,tsv,ics,rtx,css,vtt,dfxp,mp3,m4a,m4b,aac,ra,ram,wav,x-wav,ogg,oga,flac,mid,midi,wma,wax,mka,rtf,pdf,class,tar,zip,gz,gzip,rar,7z,psd,xcf,doc,pot,pps,ppt,wri,xla,xls,xlt,xlw,mdb,mpp,docx,docm,dotx,dotm,xlsx,xlsm,xlsb,xltx,xltm,xlam,pptx,pptm,ppsx,ppsm,potx,potm,ppam,sldx,sldm,onetoc,onetoc2,onetmp,onepkg,oxps,xps,odt,odp,ods,odg,odc,odb,odf,wp,wpd,key,numbers,pages"}]},"multipart_params":{"action":"upload-attachment","_wpnonce":"ad9d4e6d50"}},"browser":{"mobile":false,"supported":true},"limitExceeded":false};
2708//# sourceURL=wp-plupload-js-extra
2709</script>
vendor: 1 bytes, line 2709
2709
2710<script id="wp-plupload-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/wp-plupload.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2710
2710
2711<script id="jquery-ui-core-js-before">
2712jQuery.uiBackCompat = true;
2713//# sourceURL=jquery-ui-core-js-before
2714</script>
vendor: 1 bytes, line 2714
2714
2715<script id="jquery-ui-core-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2715
2715
2716<script id="jquery-ui-mouse-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2716
2716
2717<script id="jquery-ui-sortable-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2717
2717
2718<script id="mediaelement-core-js-before">
2719var mejsL10n = {"language":"en","strings":{"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}};
2720//# sourceURL=mediaelement-core-js-before
2721</script>
vendor: 1 bytes, line 2721
2721
2722<script id="mediaelement-core-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver=4.2.17"></script>
vendor: 1 bytes, line 2722
2722
2723<script id="mediaelement-migrate-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2723
2723
2724<script id="mediaelement-js-extra">
2725var _wpmejsSettings = {"pluginPath":"/wp-includes/js/mediaelement/","classPrefix":"mejs-","stretching":"responsive","audioShortcodeLibrary":"mediaelement","videoShortcodeLibrary":"mediaelement"};
2726//# sourceURL=mediaelement-js-extra
2727</script>
vendor: 1 bytes, line 2727
2727
2728<script id="wp-mediaelement-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2728
2728
2729<script id="wp-api-request-js-extra">
2730var wpApiSettings = {"root":"https://www.evengineeringonline.com/wp-json/","nonce":"63a515630f","versionString":"wp/v2/"};
2731//# sourceURL=wp-api-request-js-extra
2732</script>
vendor: 1 bytes, line 2732
2732
2733<script id="wp-api-request-js" src="https://www.evengineeringonline.com/wp-includes/js/api-request.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2733
2733
2734<script id="wp-dom-ready-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/dom-ready.min.js?ver=3fe927cab37bf38d6a23"></script>
vendor: 1 bytes, line 2734
2734
2735<script id="wp-hooks-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 2735
2735
2736<script id="wp-i18n-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 2736
2736
2737<script id="wp-i18n-js-after">
2738wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
2739//# sourceURL=wp-i18n-js-after
2740</script>
vendor: 1 bytes, line 2740
2740
2741<script id="wp-a11y-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/a11y.min.js?ver=31c6cec5a4ff7aff483d"></script>
vendor: 1 bytes, line 2741
2741
2742<script id="clipboard-js" src="https://www.evengineeringonline.com/wp-includes/js/clipboard.min.js?ver=2.0.11"></script>
vendor: 1 bytes, line 2742
2742
2743<script id="media-views-js-extra">
2744var _wpMediaViewsL10n = {"mediaFrameDefaultTitle":"Media","url":"URL","addMedia":"Add media","search":"Search","select":"Select","cancel":"Cancel","update":"Update","replace":"Replace","remove":"Remove","back":"Back","selected":"%d selected","dragInfo":"Drag and drop to reorder media files.","uploadFilesTitle":"Upload files","uploadImagesTitle":"Upload images","mediaLibraryTitle":"Media Library","insertMediaTitle":"Add media","createNewGallery":"Create a new gallery","createNewPlaylist":"Create a new playlist","createNewVideoPlaylist":"Create a new video playlist","returnToLibrary":"\u2190 Go to library","allMediaItems":"All media items","allDates":"All dates","noItemsFound":"No items found.","insertIntoPost":"Insert into post","unattached":"Unattached","mine":"Mine","trash":"Trash","uploadedToThisPost":"Uploaded to this post","warnDelete":"You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete.","warnBulkDelete":"You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete.","warnBulkTrash":"You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete.","bulkSelect":"Bulk select","trashSelected":"Move to Trash","restoreSelected":"Restore from Trash","deletePermanently":"Delete permanently","errorDeleting":"Error in deleting the attachment.","apply":"Apply","filterByDate":"Filter by date","filterByType":"Filter by type","searchLabel":"Search media","searchMediaLabel":"Search media","searchMediaPlaceholder":"Search media items...","mediaFound":"Number of media items found: %d","noMedia":"No media items found.","noMediaTryNewSearch":"No media items found. Try a different search.","mediaItemViewed":"Viewing media item: %s","attachmentDetails":"Attachment details","insertFromUrlTitle":"Insert from URL","setFeaturedImageTitle":"Featured image","setFeaturedImage":"Set featured image","createGalleryTitle":"Create gallery","editGalleryTitle":"Edit gallery","cancelGalleryTitle":"\u2190 Cancel gallery","insertGallery":"Insert gallery","updateGallery":"Update gallery","addToGallery":"Add to gallery","addToGalleryTitle":"Add to gallery","reverseOrder":"Reverse order","imageDetailsTitle":"Image details","imageReplaceTitle":"Replace image","imageDetailsCancel":"Cancel edit","editImage":"Edit image","chooseImage":"Choose image","selectAndCrop":"Select and crop","skipCropping":"Skip cropping","cropImage":"Crop image","cropYourImage":"Crop your image","cropping":"Cropping\u2026","suggestedDimensions":"Suggested image dimensions: %1$s by %2$s pixels.","cropError":"There has been an error cropping your image.","audioDetailsTitle":"Audio details","audioReplaceTitle":"Replace audio","audioAddSourceTitle":"Add audio source","audioDetailsCancel":"Cancel edit","videoDetailsTitle":"Video details","videoReplaceTitle":"Replace video","videoAddSourceTitle":"Add video source","videoDetailsCancel":"Cancel edit","videoSelectPosterImageTitle":"Select poster image","videoAddTrackTitle":"Add subtitles","playlistDragInfo":"Drag and drop to reorder tracks.","createPlaylistTitle":"Create audio playlist","editPlaylistTitle":"Edit audio playlist","cancelPlaylistTitle":"\u2190 Cancel audio playlist","insertPlaylist":"Insert audio playlist","updatePlaylist":"Update audio playlist","addToPlaylist":"Add to audio playlist","addToPlaylistTitle":"Add to Audio Playlist","videoPlaylistDragInfo":"Drag and drop to reorder videos.","createVideoPlaylistTitle":"Create video playlist","editVideoPlaylistTitle":"Edit video playlist","cancelVideoPlaylistTitle":"\u2190 Cancel video playlist","insertVideoPlaylist":"Insert video playlist","updateVideoPlaylist":"Update video playlist","addToVideoPlaylist":"Add to video playlist","addToVideoPlaylistTitle":"Add to video Playlist","filterAttachments":"Filter media","attachmentsList":"Media list","settings":{"tabs":[],"tabUrl":"https://www.evengineeringonline.com/wp-admin/media-upload.php?chromeless=1","mimeTypes":{"image":"Images","audio":"Audio","video":"Video","application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-word.document.macroEnabled.12,application/vnd.ms-word.template.macroEnabled.12,application/vnd.oasis.opendocument.text,application/vnd.apple.pages,application/pdf,application/vnd.ms-xpsdocument,application/oxps,application/rtf,application/wordperfect,application/octet-stream":"Documents","application/vnd.apple.numbers,application/vnd.oasis.opendocument.spreadsheet,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel.sheet.macroEnabled.12,application/vnd.ms-excel.sheet.binary.macroEnabled.12":"Spreadsheets","application/x-gzip,application/rar,a
2744pplication/x-tar,application/zip,application/x-7z-compressed":"Archives"},"captions":true,"nonce":{"sendToEditor":"97af9d88b4","setAttachmentThumbnail":"cbfa373a68"},"post":{"id":0},"defaultProps":{"link":"none","align":"","size":""},"attachmentCounts":{"audio":1,"video":1},"oEmbedProxyUrl":"https://www.evengineeringonline.com/wp-json/oembed/1.0/proxy","embedExts":["mp3","ogg","flac","m4a","wav","mp4","m4v","webm","ogv","flv"],"embedMimes":{"mp3":"audio/mpeg","ogg":"audio/ogg","flac":"audio/flac","m4a":"audio/mpeg","wav":"audio/wav","mp4":"video/mp4","m4v":"video/mp4","webm":"video/webm","ogv":"video/ogg","flv":"video/x-flv"},"contentWidth":740,"months":[{"year":"2026","month":"9","text":"September 2026"},{"year":"2026","month":"8","text":"August 2026"},{"year":"2026","month":"7","text":"July 2026"},{"year":"2026","month":"6","text":"June 2026"},{"year":"2026","month":"5","text":"May 2026"},{"year":"2026","month":"4","text":"April 2026"},{"year":"2026","month":"3","text":"March 2026"},{"year":"2026","month":"2","text":"February 2026"},{"year":"2026","month":"1","text":"January 2026"},{"year":"2025","month":"12","text":"December 2025"},{"year":"2025","month":"11","text":"November 2025"},{"year":"2025","month":"10","text":"October 2025"},{"year":"2025","month":"9","text":"September 2025"},{"year":"2025","month":"8","text":"August 2025"},{"year":"2025","month":"7","text":"July 2025"},{"year":"2025","month":"6","text":"June 2025"},{"year":"2025","month":"5","text":"May 2025"},{"year":"2025","month":"4","text":"April 2025"},{"year":"2025","month":"3","text":"March 2025"},{"year":"2025","month":"2","text":"February 2025"},{"year":"2025","month":"1","text":"January 2025"},{"year":"2024","month":"12","text":"December 2024"},{"year":"2024","month":"11","text":"November 2024"},{"year":"2024","month":"10","text":"October 2024"},{"year":"2024","month":"9","text":"September 2024"},{"year":"2024","month":"8","text":"August 2024"},{"year":"2024","month":"7","text":"July 2024"},{"year":"2024","month":"6","text":"June 2024"},{"year":"2024","month":"5","text":"May 2024"},{"year":"2024","month":"4","text":"April 2024"},{"year":"2024","month":"3","text":"March 2024"},{"year":"2024","month":"2","text":"February 2024"},{"year":"2024","month":"1","text":"January 2024"},{"year":"2023","month":"12","text":"December 2023"},{"year":"2023","month":"11","text":"November 2023"},{"year":"2023","month":"10","text":"October 2023"},{"year":"2023","month":"9","text":"September 2023"},{"year":"2023","month":"8","text":"August 2023"}],"mediaTrash":0,"infiniteScrolling":1}};
2745//# sourceURL=media-views-js-extra
2746</script>
vendor: 1 bytes, line 2746
2746
2747<script id="media-views-js" src="https://www.evengineeringonline.com/wp-includes/js/media-views.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2747
2747
2748<script id="media-editor-js" src="https://www.evengineeringonline.com/wp-includes/js/media-editor.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2748
2748
2749<script id="media-audiovideo-js" src="https://www.evengineeringonline.com/wp-includes/js/media-audiovideo.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2749
2749
2750<script id="ea-global-js" src="https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/assets/js/global-min.js?ver=1749463231"></script>
vendor: 1 bytes, line 2750
2750
2751<script id="wp-emoji-settings" type="application/json">
2752{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.evengineeringonline.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
2753</script>
vendor: 1 bytes, line 2753
2753
2754<script type="module">
2755/*! This file is auto-generated */
2756var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
2757//# sourceURL=https://www.evengineeringonline.com/wp-includes/js/wp-emoji-loader.min.js
2758</script>
vendor: 1 bytes, line 2758
2758
2759<script>"undefined"!=typeof jQuery&&jQuery(document).ready(function(){"objectFit"in document.documentElement.style==!1&&(jQuery(".cat-post-item figure").removeClass("cat-post-crop"),jQuery(".cat-post-item figure").addClass("cat-post-crop-not-supported")),(document.documentMode||/Edge/.test(navigator.userAgent))&&(jQuery(".cat-post-item figure img").height("+=1"),window.setTimeout(function(){jQuery(".cat-post-item figure img").height("-=1")},0))});</script>
2759		
2759<script type="text/javascript">
2760			if (typeof jQuery !== 'undefined') {
2761
2762				var cat_posts_namespace              = window.cat_posts_namespace || {};
2763				cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {};
2764				cat_posts_namespace.layout_img_size  = cat_posts_namespace.layout_img_size || {};
2765
2766				cat_posts_namespace.layout_wrap_text = {
2767					
2768					add : function(_this){
2769						var _that  = jQuery(_this),
2770							_text  = _that.find('p.cpwp-excerpt-text'),
2771							_stage = _text.closest('.cpwp-wrap-text-stage');
2772
2773						if ( 0 === _text.length ) {
2774							return;
2775						}
2776						
2777						_stage.removeClass( "cpwp-wrap-text" );
2778						_text.addClass( "cpwp-wrap-text" );
2779
2780						if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 
2781							return; 
2782						}
2783						
2784						_text.removeClass( "cpwp-wrap-text" );
2785						_stage.addClass( "cpwp-wrap-text" );
2786						return;
2787					},
2788					
2789					handleLazyLoading : function(_this) {
2790						var width = jQuery(_this).find('img').width();
2791						
2792						if( 0 !== width ){
2793							cat_posts_namespace.layout_wrap_text.add(_this);
2794						} else {
2795							jQuery(_this).find('img').one("load", function(){
2796								cat_posts_namespace.layout_wrap_text.add(_this);
2797							});
2798						}
2799						return;
2800					},
2801					
2802					setClass : function (widget) {
2803						// var _widget = jQuery(widget);
2804						jQuery(widget).find('.cat-post-item').each(function(){
2805							cat_posts_namespace.layout_wrap_text.handleLazyLoading(this);
2806						});
2807						return;
2808					}
2809				}
2810				cat_posts_namespace.layout_img_size = {
2811					
2812					replace : function(_this){
2813						var _that = jQuery(_this),
2814						resp_w = _that.width(),
2815						resp_h = _that.height(),
2816						orig_w = _that.data('cat-posts-width'),
2817						orig_h = _that.data('cat-posts-height');
2818						
2819						if( resp_w < orig_w ){
2820							_that.height( resp_w * orig_h / orig_w );
2821						} else {
2822							_that.height( '' );
2823						}
2824						return;
2825					},
2826					
2827					handleLazyLoading : function(_this) {
2828						var width = jQuery(_this).width();
2829						
2830						if( 0 !== width ){
2831							cat_posts_namespace.layout_img_size.replace(_this);
2832						} else {
2833							jQuery(_this).one("load", function(){
2834								cat_posts_namespace.layout_img_size.replace(_this);
2835							});
2836						}
2837						return;
2838					},
2839					setHeight : function (widget) {
2840						jQuery(widget).find('.cat-post-item img').each(function(){
2841							cat_posts_namespace.layout_img_size.handleLazyLoading(this);
2842						});
2843						return;
2844					}
2845				}
2846
2847				let widget = jQuery('#category-posts-5-internal');
2848
2849								
2850				const observer = new MutationObserver(function () {
2851					let widget = jQuery('#category-posts-5-internal');
2852					if (widget.length) {
2853						cat_posts_namespace.layout_wrap_text.setClass(widget);
2854					}
2855				});
2856
2857				observer.observe(document.body, {
2858					childList: true,
2859					subtree: true,
2860					characterData: true
2861				});
2862				
2863
2864				
2865				jQuery( document ).ready(function () {
2866										cat_posts_namespace.layout_wrap_text.setClass(widget);
2867					
2868					
2869					
2870						cat_posts_namespace.layout_img_size.setHeight(widget);
2871					
2872				});
2873
2874				jQuery(window).on('load resize', function() {
2875										cat_posts_namespace.layout_wrap_text.setClass(widget);
2876					
2877					
2878					
2879						cat_posts_namespace.layout_img_size.setHeight(widget);
2880					
2881				});
2882
2883				// low-end mobile
2884								cat_posts_namespace.layout_wrap_text.setClass(widget);
2885				
2886				
2887				
2888					cat_posts_namespace.layout_img_size.setHeight(widget);
2889				
2890
2891			}
2892		</script>
2892
2893				
2893<script type="text/javascript">
2894			if (typeof jQuery !== 'undefined') {
2895
2896				var cat_posts_namespace              = window.cat_posts_namespace || {};
2897				cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {};
2898				cat_posts_namespace.layout_img_size  = cat_posts_namespace.layout_img_size || {};
2899
2900				cat_posts_namespace.layout_wrap_text = {
2901					
2902					add : function(_this){
2903						var _that  = jQuery(_this),
2904							_text  = _that.find('p.cpwp-excerpt-text'),
2905							_stage = _text.closest('.cpwp-wrap-text-stage');
2906
2907						if ( 0 === _text.length ) {
2908							return;
2909						}
2910						
2911						_stage.removeClass( "cpwp-wrap-text" );
2912						_text.addClass( "cpwp-wrap-text" );
2913
2914						if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 
2915							return; 
2916						}
2917						
2918						_text.removeClass( "cpwp-wrap-text" );
2919						_stage.addClass( "cpwp-wrap-text" );
2920						return;
2921					},
2922					
2923					handleLazyLoading : function(_this) {
2924						var width = jQuery(_this).find('img').width();
2925						
2926						if( 0 !== width ){
2927							cat_posts_namespace.layout_wrap_text.add(_this);
2928						} else {
2929							jQuery(_this).find('img').one("load", function(){
2930								cat_posts_namespace.layout_wrap_text.add(_this);
2931							});
2932						}
2933						return;
2934					},
2935					
2936					setClass : function (widget) {
2937						// var _widget = jQuery(widget);
2938						jQuery(widget).find('.cat-post-item').each(function(){
2939							cat_posts_namespace.layout_wrap_text.handleLazyLoading(this);
2940						});
2941						return;
2942					}
2943				}
2944				cat_posts_namespace.layout_img_size = {
2945					
2946					replace : function(_this){
2947						var _that = jQuery(_this),
2948						resp_w = _that.width(),
2949						resp_h = _that.height(),
2950						orig_w = _that.data('cat-posts-width'),
2951						orig_h = _that.data('cat-posts-height');
2952						
2953						if( resp_w < orig_w ){
2954							_that.height( resp_w * orig_h / orig_w );
2955						} else {
2956							_that.height( '' );
2957						}
2958						return;
2959					},
2960					
2961					handleLazyLoading : function(_this) {
2962						var width = jQuery(_this).width();
2963						
2964						if( 0 !== width ){
2965							cat_posts_namespace.layout_img_size.replace(_this);
2966						} else {
2967							jQuery(_this).one("load", function(){
2968								cat_posts_namespace.layout_img_size.replace(_this);
2969							});
2970						}
2971						return;
2972					},
2973					setHeight : function (widget) {
2974						jQuery(widget).find('.cat-post-item img').each(function(){
2975							cat_posts_namespace.layout_img_size.handleLazyLoading(this);
2976						});
2977						return;
2978					}
2979				}
2980
2981				let widget = jQuery('#category-posts-4-internal');
2982
2983								
2984				const observer = new MutationObserver(function () {
2985					let widget = jQuery('#category-posts-4-internal');
2986					if (widget.length) {
2987						cat_posts_namespace.layout_wrap_text.setClass(widget);
2988					}
2989				});
2990
2991				observer.observe(document.body, {
2992					childList: true,
2993					subtree: true,
2994					characterData: true
2995				});
2996				
2997
2998				
2999				jQuery( document ).ready(function () {
3000										cat_posts_namespace.layout_wrap_text.setClass(widget);
3001					
3002					
3003					
3004						cat_posts_namespace.layout_img_size.setHeight(widget);
3005					
3006				});
3007
3008				jQuery(window).on('load resize', function() {
3009										cat_posts_namespace.layout_wrap_text.setClass(widget);
3010					
3011					
3012					
3013						cat_posts_namespace.layout_img_size.setHeight(widget);
3014					
3015				});
3016
3017				// low-end mobile
3018								cat_posts_namespace.layout_wrap_text.setClass(widget);
3019				
3020				
3021				
3022					cat_posts_namespace.layout_img_size.setHeight(widget);
3023				
3024
3025			}
3026		</script>
3026
3027				
3027<script type="text/javascript">
3028			if (typeof jQuery !== 'undefined') {
3029
3030				var cat_posts_namespace              = window.cat_posts_namespace || {};
3031				cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {};
3032				cat_posts_namespace.layout_img_size  = cat_posts_namespace.layout_img_size || {};
3033
3034				cat_posts_namespace.layout_wrap_text = {
3035					
3036					add : function(_this){
3037						var _that  = jQuery(_this),
3038							_text  = _that.find('p.cpwp-excerpt-text'),
3039							_stage = _text.closest('.cpwp-wrap-text-stage');
3040
3041						if ( 0 === _text.length ) {
3042							return;
3043						}
3044						
3045						_stage.removeClass( "cpwp-wrap-text" );
3046						_text.addClass( "cpwp-wrap-text" );
3047
3048						if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 
3049							return; 
3050						}
3051						
3052						_text.removeClass( "cpwp-wrap-text" );
3053						_stage.addClass( "cpwp-wrap-text" );
3054						return;
3055					},
3056					
3057					handleLazyLoading : function(_this) {
3058						var width = jQuery(_this).find('img').width();
3059						
3060						if( 0 !== width ){
3061							cat_posts_namespace.layout_wrap_text.add(_this);
3062						} else {
3063							jQuery(_this).find('img').one("load", function(){
3064								cat_posts_namespace.layout_wrap_text.add(_this);
3065							});
3066						}
3067						return;
3068					},
3069					
3070					setClass : function (widget) {
3071						// var _widget = jQuery(widget);
3072						jQuery(widget).find('.cat-post-item').each(function(){
3073							cat_posts_namespace.layout_wrap_text.handleLazyLoading(this);
3074						});
3075						return;
3076					}
3077				}
3078				cat_posts_namespace.layout_img_size = {
3079					
3080					replace : function(_this){
3081						var _that = jQuery(_this),
3082						resp_w = _that.width(),
3083						resp_h = _that.height(),
3084						orig_w = _that.data('cat-posts-width'),
3085						orig_h = _that.data('cat-posts-height');
3086						
3087						if( resp_w < orig_w ){
3088							_that.height( resp_w * orig_h / orig_w );
3089						} else {
3090							_that.height( '' );
3091						}
3092						return;
3093					},
3094					
3095					handleLazyLoading : function(_this) {
3096						var width = jQuery(_this).width();
3097						
3098						if( 0 !== width ){
3099							cat_posts_namespace.layout_img_size.replace(_this);
3100						} else {
3101							jQuery(_this).one("load", function(){
3102								cat_posts_namespace.layout_img_size.replace(_this);
3103							});
3104						}
3105						return;
3106					},
3107					setHeight : function (widget) {
3108						jQuery(widget).find('.cat-post-item img').each(function(){
3109							cat_posts_namespace.layout_img_size.handleLazyLoading(this);
3110						});
3111						return;
3112					}
3113				}
3114
3115				let widget = jQuery('#category-posts-3-internal');
3116
3117								
3118				const observer = new MutationObserver(function () {
3119					let widget = jQuery('#category-posts-3-internal');
3120					if (widget.length) {
3121						cat_posts_namespace.layout_wrap_text.setClass(widget);
3122					}
3123				});
3124
3125				observer.observe(document.body, {
3126					childList: true,
3127					subtree: true,
3128					characterData: true
3129				});
3130				
3131
3132				
3133				jQuery( document ).ready(function () {
3134										cat_posts_namespace.layout_wrap_text.setClass(widget);
3135					
3136					
3137					
3138						cat_posts_namespace.layout_img_size.setHeight(widget);
3139					
3140				});
3141
3142				jQuery(window).on('load resize', function() {
3143										cat_posts_namespace.layout_wrap_text.setClass(widget);
3144					
3145					
3146					
3147						cat_posts_namespace.layout_img_size.setHeight(widget);
3148					
3149				});
3150
3151				// low-end mobile
3152								cat_posts_namespace.layout_wrap_text.setClass(widget);
3153				
3154				
3155				
3156					cat_posts_namespace.layout_img_size.setHeight(widget);
3157				
3158
3159			}
3160		</script>
3160
3161		
3161<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4289c458953018a',t:'MTc5MDY1OTk3OQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
3161</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.