{"id":27505,"date":"2026-03-10T11:43:35","date_gmt":"2026-03-10T11:43:35","guid":{"rendered":"https:\/\/volatusaerospace.com\/?page_id=27505"},"modified":"2026-09-09T11:25:17","modified_gmt":"2026-09-09T11:25:17","slug":"home","status":"publish","type":"page","link":"https:\/\/volatusaerospace.com\/fr-ca\/","title":{"rendered":"Volatus Aerospace | Solutions a\u00e9riennes intelligentes et par drones"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27505\" class=\"elementor elementor-27505\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-46cf90a dark-section e-con-full e-flex e-con e-parent\" data-id=\"46cf90a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-485b6e4 elementor-absolute elementor-widget elementor-widget-html\" data-id=\"485b6e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Aerospace Topography<\/title>\r\n    <link rel=\"preconnect\" href=\"https:\/\/unpkg.com\" crossorigin>\r\n    <link rel=\"dns-prefetch\" href=\"https:\/\/unpkg.com\">\r\n<style>\r\n    #webgl-background { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; overflow: hidden; background-color: #0b0b0b; z-index: 0; cursor: none; }\r\n    #webgl-background canvas { display: block; cursor: none; }\r\n    #webgl-background::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: 100% 100%, 100% 3px; pointer-events: none; z-index: 2; }\r\n    body.in-hero-section, body.in-hero-section * { cursor: none !important; }\r\n    body.in-hero-section a, body.in-hero-section a *, body.in-hero-section button, body.in-hero-section button *, body.in-hero-section .elementor-button, body.in-hero-section .elementor-button * { cursor: pointer !important; }\r\n    .tactical-cursor { position: fixed; top: 0; left: 0; width: 50px; height: 50px; pointer-events: none; transform: translate(-50%, -50%); z-index: 99999; display: flex; justify-content: center; align-items: center; opacity: 0; transition: opacity 0.15s ease, transform 0.15s ease; }\r\n    .tactical-cursor svg { width: 100%; height: 100%; color: #ffffff; }\r\n    .tactical-cursor.cursor-hover { opacity: 0 !important; transform: translate(-50%, -50%) scale(0.5); }\r\n    .tactical-hud { position: fixed; bottom: 40px; left: 40px; z-index: 99999; font-family: 'Courier New', Courier, monospace; color: rgba(255, 255, 255, 0.8); border-left: 2px solid #FFB601; padding: 16px 20px; pointer-events: none; display: flex; flex-direction: column; gap: 8px; font-size: 0.85rem; letter-spacing: 1.5px; backdrop-filter: blur(0.5px); }\r\n    .hud-status { display: flex; align-items: center; justify-content: flex-start; gap: 12px; color: #ff3333; font-weight: bold; margin-bottom: 8px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 8px; }\r\n    .status-title { display: flex; align-items: center; gap: 10px; }\r\n    .status-icons { display: flex; align-items: center; gap: 8px; color: #FFB601; }\r\n    .live-dot { width: 8px; height: 8px; background-color: #ff3333; border-radius: 50%; box-shadow: 0 0 8px #ff3333; animation: pulseFade 3s infinite ease-in-out alternate; }\r\n    @keyframes pulseFade { 0% { opacity: 1; transform: scale(1); } 50% { opacity: 0.2; transform: scale(0.8); } 100% { opacity: 1; transform: scale(1); } }\r\n    .hud-line { display: flex; width: 220px; justify-content: space-between; }\r\n    .hud-label { color: #FFB601; font-weight: bold; }\r\n    @media (max-width: 768px) { .tactical-hud { display: none !important; } }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div id=\"webgl-background\"><\/div>\r\n\r\n<div class=\"tactical-cursor\" id=\"custom-cursor\">\r\n   <svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\">\r\n        <path fill=\"#ffffff\" d=\"M464.64,230.13c-1.37-1.76-9.03-3.08-13.23-.12l-10.38,7.32c-7.77,5.48-14,12.07-19.56,19.75-2.75,3.79-4.31,7.64-2.99,12.57-3.71.49-6.81,1.66-9.25,3.99-3.37,3.22-3.84,7.84-.65,11.7l-4.02.59-102.19-32.69-.17-7.82-7.89-6.76,63.65-17.9.31,5.83c.13,2.46,1.98,3.96,4.4,4.1,8.83.5,7.59-4.89,10.82-11.21,2.07-1.53,4.78-2.79,5.51-5.74l1.29-5.23c8.9,9.45,23.53,14.84,35.49,18.24,6.55,1.87,12.79,3.82,19.56,4.61,3.03.35,8.3-.64,7.69-2.78-.12-.41-.62-1.42-1.02-1.67l-45.81-29.05c-4.89-3.1-10.31-1.74-15.86-1.71.42-3.74-2.3-6.07-5.5-6.58-.73-1.44-1.46-3.25-2.89-4.02-1.62-.87-3.71-.41-5.45,0-2.28-2.43-5.7-2.13-8.24.2-4.88-2.91-9.39-6.59-14.51-9.22-8.55-4.39-17.05-8.09-25.85-11.87-7.43-3.19-9.24.75-8.15,1.3l37.03,18.65c3.69,1.86,7.18,3.32,10.98,4.73-.34.89-.89,3.1-.11,3.63l4.39,2.99c-2.73.38-3.91,2.1-3.99,4.58-1.85,2.22-17.19,6.9-19.58,7.37l-44.24,8.61-.04,7.13-2.22-.15-.05-6.76-11.53-5.43c-1.16-3.43-3.86-18.07-7.64-18.8-11.12-2.16-22.42-2.46-33.52.02-3.85.86-6.44,15.24-7.64,18.76l-11.53,5.44-.06,6.65c-.31.26-1.55.32-2.18.21l-.13-7.08-42.96-8.32c-3.22-.62-18.42-5.14-20.75-7.63-.24-2.49-1.21-4.08-3.92-4.61l4.42-3.18c.63-.45,0-2.68-.25-3.43,3.52-1.3,6.77-2.62,10.2-4.35l37.8-19.01c.9-.45-.76-2.53-1.49-2.51-6.31.14-28.41,10.44-32.73,13.18l-14.31,9.06c-2.45-2.06-5.84-2.89-8.1-.16-1.73-.41-3.64-.82-5.32-.15-1.66.66-2.37,2.66-3.17,4.14-3.32.53-6.01,3.1-5.51,6.65-5.63-.27-11.14-1.34-15.85,1.65l-45.79,29.04c-.51.32-1.03,1.47-1.04,1.96-.05,2.14,5.21,2.78,7.71,2.5,6.76-.78,13-2.77,19.54-4.62,11.89-3.36,26.67-8.82,35.49-18.24l1.39,5.48c.74,2.91,3.6,3.85,5.36,5.55,3.32,5.81,1.87,11.73,10.89,11.16,2.46-.16,4.22-1.63,4.4-4.11l.41-5.8,63.57,17.88-7.89,6.76-.17,7.82-102.19,32.69-4.03-.59c3.12-3.77,2.76-8.28-.46-11.5-2.45-2.45-5.64-3.67-9.41-4.18,1.28-4.93-.26-8.78-3.01-12.56-5.57-7.68-11.79-14.26-19.57-19.74l-10.38-7.32c-3.78-2.67-10.87-1.97-13.11-.07-2.21,1.87,3.56,12.57,4.85,15.25,6.51,13.55,15.05,21.58,27.35,29.78-2.17,3.16-2.12,7.01.33,9.89,1.08,1.27,2.47,2.29,3.88,3.3-2.2,1.77-3.49,4.22-2.95,7.05-2,.97-7.8,2.61-8.47,4.52-.68,1.91,1.97,3.6,3.43,4.64-1.64,2.09-1.95,4.5-1.27,6.95,1,3.61,2.19,8.29,6.16,9.36,2.46.66,4.83,1,7.51,1.16.31-6.46.71-12.46,2.84-18.18l.22,11.86c.06,3.25.75,6.45,1.39,9.62,1.27,6.28,4.02,11.67,7.91,16.75,5.4,7.04,11.41,13.31,18.19,19.05,3.71,3.13,7.75,5.63,12.17,7.46,5.05,2.08,10.82-2.11,13.72-6.03-.28-1.62-.53-3.03-1.06-4.65-5.44-16.64-11.54-32.83-18.68-49.1l83.46-29.24.16-8.5c.57-.33,2.1-.14,2.1.37.14,7.67-.21,14.75.33,22.33.17,2.47,3.16,4.68,5.27,5.71,5.73,2.81,11.27,5.01,17.17,7.52l1.02,15.54,5.61,7.28,2.3.46c2.19,5.81,7.54,9.47,13.56,9.47,6,0,11.39-3.64,13.55-9.46l2.36-.47,5.63-7.45.96-15.38c5.92-2.52,11.44-4.71,17.18-7.52,2.1-1.03,5.1-3.24,5.27-5.71.52-7.57.2-14.67.31-22.31,0-.63,2.09-.82,2.1-.21l.19,8.31,83.43,29.23c-7.04,16.19-13.29,32.57-18.75,49.42-.49,1.51-.71,2.83-.96,4.34,2.88,3.92,8.65,8.11,13.71,6.03,4.41-1.81,8.47-4.32,12.16-7.45,6.79-5.75,12.78-11.97,18.27-19.15,3.94-5.15,6.57-10.44,7.83-16.64.67-3.27,1.36-6.6,1.42-9.96l.18-11.64c2.17,5.91,2.54,11.9,2.88,18.29,3.28-.3,6.91-.31,9.54-2.23,2.88-2.09,6.33-11.66,2.84-15.26,1.29-.86,2.49-1.69,3.21-2.95,1.93-3.36-6.25-4.99-8.24-6.15.42-2.8-.54-5.09-2.84-6.9.03-.08.38-.53.5-.61,4.81-3.2,6.8-7.53,3.61-12.78,12.24-8.08,20.83-16.29,27.19-29.48,1.41-2.93,6.89-13.02,5.1-15.33ZM399.63,202.87l34.59,23.59c-2.51.14-5.03-.22-7.68-.55-.38-.05-.75-.1-1.14-.14l-25.77-22.9h0s0,0,0,0ZM365.57,224.02c.11-.38.32-.74.56-1.08.24-.34.52-.64.78-.9.13-.13.25-.24.37-.35.04-.03.09-.06.16-.09.46-.19,1.49-.2,1.64.14.06.12.1.26.13.39.21.96-.18,2.19-.71,2.81-.25.29-.77.64-1.3.84-.13.05-.27.09-.39.12s-.25.04-.37.04c-.23,0-.43-.08-.57-.24-.29-.36-.4-.74-.39-1.11,0-.19.04-.38.1-.57ZM298.44,224.5l53.06-11.96h0s0,0,0,0l-52.42,14.67c-.56-.35-.75-1.18-.73-1.96,0-.26.04-.52.09-.75ZM86.7,225.74c-.77.1-1.51.2-2.23.29-2.16.28-4.2.5-6.72.51h0l17.33-11.86,17.33-11.86h0s0,0,0,0l-25.72,22.92ZM146.3,225.58c-.2.24-.45.34-.72.36-.13,0-.27,0-.42-.03-.57-.12-1.16-.52-1.54-.9-.1-.09-.18-.19-.25-.28-.07-.1-.15-.21-.22-.34-.27-.52-.47-1.25-.43-1.85,0-.15.03-.29.07-.42.08-.26.23-.46.47-.57.12-.03.23-.05.35-.06.58-.05,1.16.2,1.63.61.19.16.37.36.52.57.62.84.91,1.98.52,2.92ZM213.62,225.95c-.06.47-.22.92-.48,1.32h0l-52.72-14.74h0s0,0,0,0l35.4,7.96,17.7,3.98c.13.51.17,1.01.1,1.49ZM82.23,268.44c-.17.15-.36.3-.55.44-.39.28-.83.53-1.29.76-2.24-.89-4.36-1.95-6.35-3.17-1.99-1.22-3.86-2.6-5.6-4.13-.87-.77-1.7-1.57-2.51-2.41-1.6-1.68-3.07-3.51-4.4-5.47-.66-.98-1.29-2-1.88-3.05-.3-.54-.59-1.09-.88-1.63-2.02-3.8-3.75-7.64-4.83-11.95,0,0,0,0,0,0,0,0,0,0,0,0,5.53,10.51,12.93,21.57,23.85,27.79,1.56.89,3.19,1.68,4.9,2.35-.14.17-.29.33-.46.48ZM98.97,280.78c-.12.36-.28.68-.47.9-.89,1.05-1.98,1.79-3.17,2.23-.79.29-1.62.44-2.47.44-.84,0-1.7-.13-2.53-.41-.42-.14-.83-.31-1.24-.53-1.56-.82-2.9-2.41-2.66-4.26.29-2.23,2.24-3.67,4.43-4.16.24.31.49.59.74.84.51.5,1.06.89,1.65,1.19.59.3,1.22.52,1.89.67,1.01.22,2.12.3,3.36.31.27.09.45.31.56.6.05.15.09.31.11.49.06.53-.03,1.15-.21,1.69ZM139.72,361.17l-2.97,1.65-2.97,1.65h0l-7.24-28.55-7.24-28.55h0s0,0,0,0l20.41,53.8ZM207.19,266.89l-50.65,18.06-25.32,9.03h0s0,0,0,0l73.42-30.3h0c.46,0,1.03.12,1.57.28.27.08.53.18.75.28.23.1.43.21.58.31.42.29.26,2.11-.34,2.33ZM272.71,220.47h0s0,0,0,0l-3,8.73,18.04,31.05h0s0,0,0,0l-22.09-30.93,7.05-8.85ZM242.32,229.21l-3-8.74h0s0,0,0,0l7.06,8.86-22.04,30.83h0s0,0,0,0l17.98-30.95ZM257.18,299.24c-21.81,0-35.7-9.36-36.72-9.81l-.05-.72h0c.36.16,35.93,15.47,71.17,0v.58c-12.3,6.62-23.16,9.95-34.41,9.95ZM380.82,293.99l-76.14-27.14c-.04-.06-.08-.14-.12-.22-.15-.35-.27-.87-.28-1.31,0-.11,0-.21.01-.31.03-.19.08-.34.19-.42.39-.31,1.03-.54,1.7-.71.4-.1.81-.18,1.19-.21h0l73.45,30.32h0s0,0,0,0ZM378.26,364.42h0s0,0,0,0l-5.97-3.1,20.42-53.96h0s0,0,0,0l-14.45,57.06ZM424.75,281.94c-.36.48-.82.89-1.32,1.19-2.38,1.46-5.25,1.57-7.58.38-.78-.4-1.5-.94-2.13-1.62-.24-.27-.44-.59-.59-.94-.22-.53-.32-1.12-.28-1.66.04-.55.23-1.05.58-1.41h0c.37.05.74.07,1.09.08s.71,0,1.06-.03c2.08-.19,3.93-1.07,5.45-2.69.24-.04.48-.04.73,0,.25.03.5.1.75.19,1,.38,1.97,1.21,2.55,2.19.15.24.27.5.36.75.09.26.15.52.18.78.11,1.02-.25,2-.86,2.8ZM457,241.4c-.2.58-.42,1.16-.64,1.73-.56,1.43-1.19,2.81-1.86,4.18-.4.82-.82,1.64-1.25,2.45-.29.54-.59,1.08-.89,1.62-2.35,4.21-5.3,7.88-8.77,10.94-3.47,3.06-7.48,5.51-11.95,7.3h0c-.21-.11-.41-.23-.61-.34-.2-.12-.39-.24-.58-.36-.38-.26-.77-.55-1.21-.91.85-.34,1.68-.71,2.49-1.1,9.73-4.7,16.81-13,22.41-22.14,1.4-2.28,2.71-4.62,3.94-6.97-.31,1.23-.68,2.42-1.08,3.59Z\"\/>\r\n   <\/svg>\r\n<\/div>\r\n\r\n<div class=\"tactical-hud\" id=\"hud-panel\">\r\n    <div class=\"hud-status\">\r\n        <div class=\"status-icons\">\r\n            <svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" width=\"25\" height=\"25\" fill=\"currentColor\">\r\n                <path d=\"M256.18,371.08l-108.29,56.03,108.18-248.29,108.23,248.41-108.11-56.15ZM237.21,359.04l-.86-86.65-49.13,112.79,49.99-26.14Z\"\/>\r\n                <path d=\"M291.3,152.55c-2.4,3.33-15.34,4.33-18.15.72l-34.76-44.73-.73,45.88-16.78.23-.04-74.88c4.35-1.11,11.99-1.25,16.59.04l36.03,46.51.92-47.44,16.84.16.07,73.5Z\"\/>\r\n            <\/svg>\r\n        <\/div>\r\n        <div class=\"status-title\"><span class=\"live-dot\"><\/span> LIVE DATA FEED<\/div>\r\n    <\/div>\r\n    <div class=\"hud-line\"><span class=\"hud-label\">LAT:<\/span> <span id=\"hud-lat\">43\u00b030'07.92\"N<\/span><\/div>\r\n    <div class=\"hud-line\"><span class=\"hud-label\">LNG:<\/span> <span id=\"hud-lng\">79\u00b035'37.32\"W<\/span><\/div>\r\n    <div class=\"hud-line\"><span class=\"hud-label\">ALT:<\/span> <span id=\"hud-alt\">1200 m<\/span><\/div>\r\n    <div class=\"hud-line\"><span class=\"hud-label\">SYS:<\/span> <span id=\"hud-time\">00:00:00.000<\/span><\/div>\r\n<\/div>\r\n\r\n<script type=\"module\">\r\n    import * as THREE from 'https:\/\/unpkg.com\/three@0.160.0\/build\/three.module.min.js';\r\n\r\n    let mapInitialized = false;\r\n\r\n    \/\/ We wrap the entire execution in this function\r\n    function initTacticalMap() {\r\n        if (mapInitialized) return;\r\n        mapInitialized = true;\r\n\r\n        const isDesktop = window.innerWidth > 768;\r\n        const config = {\r\n            planeWidth: 350, planeHeight: 450, segments: 600,     \r\n            hoverRadius: isDesktop ? 3.0 : 1.95, flightSpeed: 1.6, \r\n            bgColor: new THREE.Color('#0b0b0b') \r\n        };\r\n\r\n        const container = document.getElementById('webgl-background');\r\n\t\/\/ The top-level page block that contains the hero (canvas + headings + button).\r\n\/\/ The cookie popup\/banner lives in a DIFFERENT DOM branch, so it won't be inside this.\r\nlet heroRoot = container;\r\nwhile (heroRoot.parentElement && heroRoot.parentElement !== document.body) {\r\n    heroRoot = heroRoot.parentElement;\r\n}\r\n\r\n\/\/ Recognise the cookie consent popup \/ banner (or any generic modal) under the pointer.\r\nfunction isConsentOrModal(el) {\r\n    while (el && el !== document.body && el !== document.documentElement) {\r\n        if (el.matches('[class*=\"cookie\" i],[id*=\"cookie\" i],[class*=\"consent\" i],[id*=\"consent\" i],[class*=\"cky\" i],[class*=\"cli\" i],[role=\"dialog\"],[aria-modal=\"true\"],.modal,.popup,.modal-backdrop')) {\r\n            return true;\r\n        }\r\n        el = el.parentElement;\r\n    }\r\n    return false;\r\n}\r\n        const scene = new THREE.Scene();\r\n        scene.background = config.bgColor;\r\n\r\n        const camera = new THREE.PerspectiveCamera(45, window.innerWidth \/ window.innerHeight, 1, 500);\r\n        camera.position.set(0, 40, 70); \r\n        camera.lookAt(0, 0, -10);\r\n\r\n        const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });\r\n        renderer.setSize(window.innerWidth, window.innerHeight);\r\n        renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\r\n        container.appendChild(renderer.domElement);\r\n\r\n        const scanSize = 1024;\r\n        const scanCanvas = document.createElement('canvas');\r\n        scanCanvas.width = scanSize; scanCanvas.height = scanSize;\r\n        const scanCtx = scanCanvas.getContext('2d');\r\n        scanCtx.fillStyle = 'black'; scanCtx.fillRect(0, 0, scanSize, scanSize);\r\n\r\n        const scanTexture = new THREE.CanvasTexture(scanCanvas);\r\n        scanTexture.wrapS = THREE.RepeatWrapping; scanTexture.wrapT = THREE.RepeatWrapping;\r\n\r\n        const geometry = new THREE.PlaneGeometry(config.planeWidth, config.planeHeight, config.segments, config.segments);\r\n        geometry.rotateX(-Math.PI \/ 2); \r\n\r\n        const terrainMaterial = new THREE.ShaderMaterial({\r\n            uniforms: {\r\n                uTime: { value: 0 }, uFlightSpeed: { value: config.flightSpeed },\r\n                uMouse: { value: new THREE.Vector3(9999, 0, 9999) }, uRadius: { value: config.hoverRadius },\r\n                uSegments: { value: config.segments }, uPlaneSize: { value: config.planeWidth },\r\n                uPlaneHeight: { value: config.planeHeight }, uScanTexture: { value: scanTexture } \r\n            },\r\n            vertexShader: `\r\n                uniform float uTime; uniform float uFlightSpeed; uniform vec3 uMouse; uniform float uRadius; uniform float uPlaneHeight;\r\n                varying vec2 vWorldPos; varying vec2 vScanUv; varying vec3 vHiddenLine; varying vec3 vHiddenFill; varying vec3 vTrueColor; varying float vReveal; varying float vDepth; \r\n                vec3 mod289(vec3 x) { return x - floor(x * (1.0 \/ 289.0)) * 289.0; } vec2 mod289(vec2 x) { return x - floor(x * (1.0 \/ 289.0)) * 289.0; } vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); }\r\n                float snoise(vec2 v) {\r\n                    const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439);\r\n                    vec2 i  = floor(v + dot(v, C.yy)); vec2 x0 = v -   i + dot(i, C.xx);\r\n                    vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1;\r\n                    vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0));\r\n                    vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\r\n                    m = m*m ; m = m*m ; vec3 x = 2.0 * fract(p * C.www) - 1.0; vec3 h = abs(x) - 0.5; vec3 ox = floor(x + 0.5);\r\n                    vec3 a0 = x - ox; m *= 1.79284291400159 - 0.85373472095314 * (a0*a0 + h*h); vec3 g; g.x  = a0.x  * x0.x  + h.x  * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw;\r\n                    return 130.0 * dot(m, g);\r\n                }\r\n                void main() {\r\n                    vec3 pos = position; float currentZ = pos.z - uTime * uFlightSpeed; \r\n                    float noiseFreq = 0.015; vec2 p = vec2(pos.x * noiseFreq, currentZ * noiseFreq); \r\n                    float elevation = snoise(p) * 14.0; elevation += snoise(p * 2.0) * 5.0; elevation += snoise(p * 4.0) * 2.0; pos.y += elevation - 4.0; \r\n                    float heightRatio = clamp((elevation + 14.0) \/ 28.0, 0.0, 1.0);\r\n                    vHiddenLine = mix(vec3(0.35, 0.35, 0.4), vec3(0.85, 0.85, 0.9), heightRatio); vHiddenFill = vec3(0.07, 0.07, 0.07);\r\n                    vec3 cDepression = vec3(0.1, 0.0, 0.5); vec3 cLow = vec3(0.0, 0.8, 0.8); vec3 cMidLow = vec3(0.2, 0.9, 0.2); vec3 cMid = vec3(1.0, 0.8, 0.0); vec3 cHigh = vec3(1.0, 0.2, 0.0); \r\n                    vTrueColor = cDepression; vTrueColor = mix(vTrueColor, cLow, smoothstep(0.0, 0.25, heightRatio)); vTrueColor = mix(vTrueColor, cMidLow, smoothstep(0.25, 0.5, heightRatio)); vTrueColor = mix(vTrueColor, cMid, smoothstep(0.5, 0.75, heightRatio)); vTrueColor = mix(vTrueColor, cHigh, smoothstep(0.75, 1.0, heightRatio));\r\n                    float distToMouse = distance(pos.xz, uMouse.xz); vReveal = smoothstep(uRadius, 0.0, distToMouse); \r\n                    float scrollOffset = (uTime * uFlightSpeed) \/ uPlaneHeight; vScanUv = vec2(uv.x, uv.y + scrollOffset);\r\n                    vec4 mvPosition = modelViewMatrix * vec4(pos, 1.0); vDepth = -mvPosition.z; vWorldPos = vec2(pos.x, currentZ); gl_Position = projectionMatrix * mvPosition;\r\n                }\r\n            `,\r\n            fragmentShader: `\r\n                uniform float uSegments; uniform float uPlaneSize; uniform sampler2D uScanTexture;\r\n                varying vec2 vWorldPos; varying vec2 vScanUv; varying vec3 vHiddenLine; varying vec3 vHiddenFill; varying vec3 vTrueColor; varying float vReveal; varying float vDepth; \r\n                void main() {\r\n                    float visualGridDensity = 350.0; vec2 grid = fract(vWorldPos * (visualGridDensity \/ uPlaneSize));\r\n                    float lineW = mix(0.045, 0.015, smoothstep(20.0, 150.0, vDepth)); \r\n                    float lineX = smoothstep(lineW, lineW * 0.5, grid.x) + smoothstep(1.0 - lineW, 1.0 - lineW * 0.5, grid.x); float lineY = smoothstep(lineW, lineW * 0.5, grid.y) + smoothstep(1.0 - lineW, 1.0 - lineW * 0.5, grid.y);\r\n                    float isLine = clamp(lineX + lineY, 0.0, 1.0); float gridAlpha = mix(1.0, 0.1, smoothstep(50.0, 160.0, vDepth)); isLine *= gridAlpha;\r\n                    vec3 unhoveredColor = mix(vHiddenFill, vHiddenLine, isLine); vec3 hoveredFill = vTrueColor; vec3 hoveredLine = vTrueColor + 0.2; vec3 hoveredColor = mix(hoveredFill, hoveredLine, isLine);\r\n                    float memoryReveal = texture2D(uScanTexture, vScanUv).r; float finalReveal = max(vReveal, memoryReveal);\r\n                    vec3 finalColor = mix(unhoveredColor, hoveredColor, finalReveal); float depthFade = smoothstep(160.0, 80.0, vDepth); gl_FragColor = vec4(finalColor, depthFade);\r\n                }\r\n            `,\r\n            transparent: true, depthWrite: false\r\n        });\r\n\r\n        const terrainMesh = new THREE.Mesh(geometry, terrainMaterial); scene.add(terrainMesh);\r\n\r\n        const invisiblePlaneGeometry = new THREE.PlaneGeometry(config.planeWidth, config.planeHeight); invisiblePlaneGeometry.rotateX(-Math.PI \/ 2);\r\n        const invisiblePlaneMaterial = new THREE.MeshBasicMaterial({ visible: false }); const invisibleHitPlane = new THREE.Mesh(invisiblePlaneGeometry, invisiblePlaneMaterial); scene.add(invisibleHitPlane);\r\n        const raycaster = new THREE.Raycaster(); const normalizedMouse = new THREE.Vector2(999, 999);\r\n        let targetMousePos = new THREE.Vector3(9999, 0, 9999); let currentMousePos = new THREE.Vector3(9999, 0, 9999); let isFirstHover = true; let cursorActive = false; let lastDrawPos = null; \r\n\r\n        function fract(x) { return x - Math.floor(x); } function mod289(x) { return x - Math.floor(x * (1.0 \/ 289.0)) * 289.0; } function permute(x) { return mod289(((x * 34.0) + 1.0) * x); }\r\n        function jsSnoise(v_x, v_y) {\r\n            const Cx = 0.211324865405187, Cy = 0.366025403784439, Cz = -0.577350269189626, Cw = 0.024390243902439;\r\n            let dot_v_Cyy = v_x * Cy + v_y * Cy; let ix = Math.floor(v_x + dot_v_Cyy); let iy = Math.floor(v_y + dot_v_Cyy); let dot_i_Cxx = ix * Cx + iy * Cx;\r\n            let x0x = v_x - ix + dot_i_Cxx; let x0y = v_y - iy + dot_i_Cxx; let i1x = (x0x > x0y) ? 1.0 : 0.0; let i1y = (x0x > x0y) ? 0.0 : 1.0;\r\n            let x1x = x0x - i1x + Cx; let x1y = x0y - i1y + Cx; let x2x = x0x - 1.0 + 2.0 * Cx; let x2y = x0y - 1.0 + 2.0 * Cx;\r\n            let p0 = permute(permute(iy + 0.0) + ix + 0.0); let p1 = permute(permute(iy + i1y) + ix + i1x); let p2 = permute(permute(iy + 1.0) + ix + 1.0);\r\n            let m0 = Math.max(0.5 - (x0x*x0x + x0y*x0y), 0.0); let m1 = Math.max(0.5 - (x1x*x1x + x1y*x1y), 0.0); let m2 = Math.max(0.5 - (x2x*x2x + x2y*x2y), 0.0);\r\n            m0 *= m0; m0 *= m0; m1 *= m1; m1 *= m1; m2 *= m2; m2 *= m2;\r\n            let x_vec0 = 2.0 * fract(p0 * Cw) - 1.0; let x_vec1 = 2.0 * fract(p1 * Cw) - 1.0; let x_vec2 = 2.0 * fract(p2 * Cw) - 1.0;\r\n            let h0 = Math.abs(x_vec0) - 0.5; let h1 = Math.abs(x_vec1) - 0.5; let h2 = Math.abs(x_vec2) - 0.5;\r\n            let a0_0 = x_vec0 - Math.floor(x_vec0 + 0.5); let a0_1 = x_vec1 - Math.floor(x_vec1 + 0.5); let a0_2 = x_vec2 - Math.floor(x_vec2 + 0.5);\r\n            m0 *= 1.79284291400159 - 0.85373472095314 * (a0_0*a0_0 + h0*h0); m1 *= 1.79284291400159 - 0.85373472095314 * (a0_1*a0_1 + h1*h1); m2 *= 1.79284291400159 - 0.85373472095314 * (a0_2*a0_2 + h2*h2);\r\n            let g0 = a0_0 * x0x + h0 * x0y; let g1 = a0_1 * x1x + h1 * x1y; let g2 = a0_2 * x2x + h2 * x2y;\r\n            return 130.0 * (m0*g0 + m1*g1 + m2*g2);\r\n        }\r\n        function calculateExactElevation(x, z) {\r\n            const noiseFreq = 0.015; let px = x * noiseFreq; let pz = z * noiseFreq;\r\n            let elevation = jsSnoise(px, pz) * 14.0; elevation += jsSnoise(px * 2.0, pz * 2.0) * 5.0; elevation += jsSnoise(px * 4.0, pz * 4.0) * 2.0; return elevation - 4.0; \r\n        }\r\n\r\n        const hudLat = document.getElementById('hud-lat'); const hudLng = document.getElementById('hud-lng'); const hudAlt = document.getElementById('hud-alt'); const hudTime = document.getElementById('hud-time');\r\n        const BASE_LAT = 43.7705374; const BASE_LNG = -79.6317253;\r\n\r\n        function formatCoordinate(value, isLatitude) {\r\n            const offset = value * 0.00015; const rawCoords = (isLatitude ? BASE_LAT : BASE_LNG) + offset;\r\n            const direction = isLatitude ? (rawCoords >= 0 ? 'N' : 'S') : (rawCoords >= 0 ? 'E' : 'W');\r\n            const absolute = Math.abs(rawCoords); const degrees = Math.floor(absolute); const minutesFloat = (absolute - degrees) * 60;\r\n            const minutes = Math.floor(minutesFloat); const seconds = ((minutesFloat - minutes) * 60).toFixed(3); \r\n            const padDeg = degrees.toString().padStart(isLatitude ? 2 : 3, '0'); const padMin = minutes.toString().padStart(2, '0'); const padSec = seconds.padStart(6, '0'); \r\n            return `${padDeg}\u00b0${padMin}'${padSec}\"${direction}`;\r\n        }\r\n        function formatAltitude(elevationData) { const baseAlt = 1000; const realAltitude = Math.floor(baseAlt + (elevationData * 85)); return realAltitude.toString() + ' m'; }\r\n\r\n        const cursorEl = document.getElementById('custom-cursor'); document.body.appendChild(cursorEl);\r\n        let lastClientX = 0; let lastClientY = 0;\r\n\r\n        function checkCursorVisibility() {\r\n    const rect = container.getBoundingClientRect();\r\n    const isInsideBounds = (lastClientX >= rect.left && lastClientX <= rect.right && lastClientY >= rect.top && lastClientY <= rect.bottom);\r\n\r\n    \/\/ What is actually on top under the pointer?\r\n    const topEl = document.elementFromPoint(lastClientX, lastClientY);\r\n\r\n    \/\/ Release the custom cursor ONLY when we're genuinely over something layered\r\n    \/\/ on top of the hero from OUTSIDE it (the cookie popup \/ banner) \u2014 never over\r\n    \/\/ the hero's own headings, button, or canvas.\r\n    const overOutsideOverlay = !!topEl && !heroRoot.contains(topEl);\r\n    const overConsentUI = isConsentOrModal(topEl);\r\n    const shouldRelease = overOutsideOverlay || overConsentUI;\r\n\r\n    const isInsideHero = isInsideBounds && !shouldRelease;\r\n\r\n    if (isInsideHero) {\r\n        if (!cursorEl.classList.contains('cursor-hover')) cursorEl.style.opacity = '1';\r\n        cursorActive = true; document.body.classList.add('in-hero-section');\r\n    } else {\r\n        cursorEl.style.opacity = '0'; cursorActive = false; document.body.classList.remove('in-hero-section');\r\n        targetMousePos.set(9999, 0, 9999); isFirstHover = true; normalizedMouse.x = 999;\r\n    }\r\n}\r\n\r\n        window.addEventListener('mousemove', (event) => {\r\n            lastClientX = event.clientX; lastClientY = event.clientY; cursorEl.style.left = event.clientX + 'px'; cursorEl.style.top = event.clientY + 'px';\r\n            normalizedMouse.x = (event.clientX \/ window.innerWidth) * 2 - 1; normalizedMouse.y = -(event.clientY \/ window.innerHeight) * 2 + 1; checkCursorVisibility();\r\n        });\r\n        window.addEventListener('scroll', checkCursorVisibility, { passive: true });\r\n        window.addEventListener('touchmove', (event) => {\r\n            if (event.touches.length > 0) { lastClientX = event.touches[0].clientX; lastClientY = event.touches[0].clientY; checkCursorVisibility(); cursorEl.style.display = 'none'; }\r\n        }, { passive: true });\r\n        document.addEventListener('mouseover', (e) => { if(e.target.closest('a') || e.target.closest('button') || e.target.closest('.elementor-button')) cursorEl.classList.add('cursor-hover'); });\r\n        document.addEventListener('mouseout', (e) => { if(e.target.closest('a') || e.target.closest('button') || e.target.closest('.elementor-button')) cursorEl.classList.remove('cursor-hover'); });\r\n        window.addEventListener('resize', () => { camera.aspect = window.innerWidth \/ window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); config.hoverRadius = window.innerWidth > 768 ? 3.0 : 1.95; terrainMaterial.uniforms.uRadius.value = config.hoverRadius; });\r\n\r\n        const clock = new THREE.Clock(); let lastScrollOffset = 0; \r\n        document.addEventListener('visibilitychange', function() { if (document.hidden) clock.stop(); else clock.start(); });\r\n        var lastHudUpdate = 0;\r\n\r\n        function animate() {\r\n            requestAnimationFrame(animate);\r\n            if (document.hidden) return;\r\n            const elapsedTime = clock.getElapsedTime(); terrainMaterial.uniforms.uTime.value = elapsedTime;\r\n\r\n            if (cursorActive && normalizedMouse.x !== 999) {\r\n                raycaster.setFromCamera(normalizedMouse, camera); const ray = raycaster.ray;\r\n                if (ray.direction.y < 0) { \r\n                    const tMin = (15.0 - ray.origin.y) \/ ray.direction.y; const tMax = (-6.0 - ray.origin.y) \/ ray.direction.y;\r\n                    let hit = false; const dt = (tMax - tMin) \/ 50;\r\n                    for (let t = Math.max(0, tMin); t <= tMax; t += dt) {\r\n                        const px = ray.origin.x + ray.direction.x * t; const py = ray.origin.y + ray.direction.y * t; const pz = ray.origin.z + ray.direction.z * t;\r\n                        const simulatedTravelZ = pz - (elapsedTime * config.flightSpeed); const h = calculateExactElevation(px, simulatedTravelZ);\r\n                        if (py <= h) {\r\n                            targetMousePos.set(px, h, pz); hit = true;\r\n                            if (isFirstHover) { currentMousePos.copy(targetMousePos); isFirstHover = false; } break;\r\n                        }\r\n                    }\r\n                    if (!hit) {\r\n                        const intersects = raycaster.intersectObject(invisibleHitPlane);\r\n                        if (intersects.length > 0) {\r\n                            targetMousePos.copy(intersects[0].point);\r\n                            if (isFirstHover) { currentMousePos.copy(targetMousePos); isFirstHover = false; }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            currentMousePos.lerp(targetMousePos, 0.1); terrainMaterial.uniforms.uMouse.value.copy(currentMousePos);\r\n            const scrollOffset = (elapsedTime * config.flightSpeed) \/ config.planeHeight;\r\n            let deltaScroll = scrollOffset - lastScrollOffset; let frontV = scrollOffset % 1.0; if (frontV < 0) frontV += 1.0;\r\n            \r\n            if (deltaScroll > 0) {\r\n                if (deltaScroll > 0.5) { scanCtx.fillStyle = 'black'; scanCtx.fillRect(0, 0, scanSize, scanSize); } else {\r\n                    let pixelsToWipe = deltaScroll * scanSize; let wiperY = (1.0 - frontV) * scanSize;\r\n                    scanCtx.fillStyle = 'black'; scanCtx.fillRect(0, wiperY - 15, scanSize, pixelsToWipe + 30);\r\n                    if (wiperY - 15 < 0) scanCtx.fillRect(0, wiperY - 15 + scanSize, scanSize, pixelsToWipe + 30);\r\n                    if (wiperY + pixelsToWipe + 15 > scanSize) scanCtx.fillRect(0, wiperY - 15 - scanSize, scanSize, pixelsToWipe + 30);\r\n                }\r\n            }\r\n            lastScrollOffset = scrollOffset;\r\n\r\n            if (!isFirstHover && currentMousePos.x !== 9999 && cursorActive) {\r\n                const u = (currentMousePos.x \/ config.planeWidth) + 0.5; const v = (-currentMousePos.z \/ config.planeHeight) + 0.5;\r\n                const brushRadius = (config.hoverRadius \/ config.planeWidth) * scanSize;\r\n\r\n                function drawBrush(x, y) {\r\n                    const gradient = scanCtx.createRadialGradient(x, y, 0, x, y, brushRadius);\r\n                    gradient.addColorStop(0, 'rgba(255, 255, 255, 1.0)'); gradient.addColorStop(1, 'rgba(255, 255, 255, 0)');   \r\n                    scanCtx.fillStyle = gradient; scanCtx.beginPath(); scanCtx.arc(x, y, brushRadius, 0, Math.PI * 2); scanCtx.fill();\r\n                }\r\n                function stampBrush(cx, cy) {\r\n                    drawBrush(cx, cy);\r\n                    if (cx - brushRadius < 0) drawBrush(cx + scanSize, cy);\r\n                    if (cx + brushRadius > scanSize) drawBrush(cx - scanSize, cy);\r\n                    if (cy - brushRadius < 0) drawBrush(cx, cy + scanSize);\r\n                    if (cy + brushRadius > scanSize) drawBrush(cx, cy - scanSize);\r\n                }\r\n\r\n                if (lastDrawPos) {\r\n                    const distU = u - lastDrawPos.u; const distV = v - lastDrawPos.v; const dist = Math.sqrt(distU*distU + distV*distV);\r\n                    const stepSize = (brushRadius * 0.15) \/ scanSize; const steps = Math.max(1, Math.floor(dist \/ stepSize));\r\n                    for (let i = 1; i <= steps; i++) {\r\n                        const interpU = lastDrawPos.u + distU * (i \/ steps); const interpV = lastDrawPos.v + distV * (i \/ steps);\r\n                        let vTarget = (interpV + scrollOffset) % 1.0; if (vTarget < 0) vTarget += 1.0;\r\n                        const cx = interpU * scanSize; const cy = (1.0 - vTarget) * scanSize; stampBrush(cx, cy);\r\n                    }\r\n                } else {\r\n                    let vTarget = (v + scrollOffset) % 1.0; if (vTarget < 0) vTarget += 1.0;\r\n                    const cx = u * scanSize; const cy = (1.0 - vTarget) * scanSize; stampBrush(cx, cy);\r\n                }\r\n                lastDrawPos = { u: u, v: v };\r\n            } else { lastDrawPos = null; }\r\n\r\n            scanTexture.needsUpdate = true;\r\n            var now = performance.now();\r\n            if (now - lastHudUpdate > 100) { \r\n                lastHudUpdate = now; var date = new Date(); hudTime.innerText = date.toISOString().split('T')[1].replace('Z', '');\r\n                if (!isFirstHover) {\r\n                    var simZ = currentMousePos.z - (elapsedTime * config.flightSpeed);\r\n                    hudLat.innerText = formatCoordinate(simZ, true); hudLng.innerText = formatCoordinate(currentMousePos.x, false);\r\n                    var trueElev = calculateExactElevation(currentMousePos.x, simZ) + 24.0; hudAlt.innerText = formatAltitude(trueElev);\r\n                }\r\n            }\r\n            renderer.render(scene, camera);\r\n        }\r\n        animate();\r\n    }\r\n\r\n    \/\/ --- THE LIGHTHOUSE HACK ---\r\n    \/\/ Do NOT start the map until the user interacts (scroll, mouse, touch)\r\n    ['mousemove', 'scroll', 'touchmove', 'click', 'keydown'].forEach(evt => {\r\n        window.addEventListener(evt, initTacticalMap, { once: true, passive: true });\r\n    });\r\n\r\n    \/\/ Safety fallback: if no interaction after 3.5 seconds, load it anyway\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-67a80ee e-con-full e-flex e-con e-child\" data-id=\"67a80ee\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-aca21c4 e-con-full e-flex e-con e-child\" data-id=\"aca21c4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0aa5c3a elementor-widget elementor-widget-heading\" data-id=\"0aa5c3a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Sky is Not the Limit...<br><span style=\"color: #FFB601\">It's Where We Begin.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9359e68 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"9359e68\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Your Full-Stack Aerial Intelligence Partner.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e69c8f elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7e69c8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#eco\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Explore our Solutions<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-26c0ed3 e-con-full e-flex e-con e-child\" data-id=\"26c0ed3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;position&quot;:&quot;absolute&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0fa1684 elementor-widget elementor-widget-html\" data-id=\"0fa1684\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<a href=\"#eco\" class=\"scroll-link\">\r\n  <div class=\"scroll-indicator-container\">\r\n    <svg class=\"scroll-arrow arrow-1\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n      <polyline points=\"6 9 12 15 18 9\"><\/polyline>\r\n    <\/svg>\r\n    <svg class=\"scroll-arrow arrow-2\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n      <polyline points=\"6 9 12 15 18 9\"><\/polyline>\r\n    <\/svg>\r\n    <svg class=\"scroll-arrow arrow-3\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n      <polyline points=\"6 9 12 15 18 9\"><\/polyline>\r\n    <\/svg>\r\n  <\/div>\r\n<\/a>\r\n\r\n<style>\r\n.scroll-link{\r\n  text-decoration:none;\r\n  display:inline-block;\r\n  cursor:pointer;\r\n}\r\n\r\n.scroll-indicator-container {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n}\r\n\r\n.scroll-arrow {\r\n  color: #555555;\r\n  animation: lightSequence 2s infinite;\r\n  margin-top: -12px;\r\n}\r\n\r\n.arrow-1 { animation-delay: 0s; }\r\n.arrow-2 { animation-delay: 0.3s; }\r\n.arrow-3 { animation-delay: 0.6s; }\r\n\r\n@keyframes lightSequence {\r\n  0% { color: #555555; }\r\n  20% { color: #ffffff; }\r\n  40% { color: #555555; }\r\n  100% { color: #555555; }\r\n}\r\n\r\n\/* Smooth scrolling *\/\r\nhtml {\r\n  scroll-behavior: smooth;\r\n}\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1f1c2a6 e-con-full e-flex e-con e-parent\" data-id=\"1f1c2a6\" data-element_type=\"container\" data-e-type=\"container\" id=\"eco\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-7f842cb e-con-full e-flex e-con e-child\" data-id=\"7f842cb\" data-element_type=\"container\" data-e-type=\"container\" id=\"eco-top\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-580ba60 elementor-widget elementor-widget-heading\" data-id=\"580ba60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Ecosystem<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2a3f9f1 elementor-widget elementor-widget-text-editor\" data-id=\"2a3f9f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>We build the tech, we fly the missions, we train the\u00a0pilots.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ca60ce elementor-widget elementor-widget-html\" data-id=\"5ca60ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap');\n\n\/* \u2550\u2550 ELEMENTOR SNAP SCROLL OVERRIDE \u2550\u2550 *\/\n#eco, \n#eco > .e-con-inner, \n#eco > .elementor-container {\n  position: relative !important;\n  overflow: visible !important;\n}\n\n#snap-section {\n  position: -webkit-sticky !important; \n  position: sticky !important;\n  \n  \/* Push it down below the header *\/\n  top: 29px !important; \n  \/* Shrink height to accommodate the offset *\/\n  height: calc(100vh - 90px) !important; \n  \n  width: 100% !important;\n  overflow: hidden !important;\n  display: flex !important; \n  flex-direction: column !important;\n  align-items: center !important;\n  \n  z-index: 10 !important; \n  align-self: flex-start !important;\n  margin-top: 0 !important;\n  padding-top: 2rem !important; \n}\n\n#left-container {\n  display: none !important;\n}\n\n\/* --- DESKTOP HORIZONTAL TABS --- *\/\n.va-tabs-nav {\n  display: flex !important;\n  flex-direction: row !important;\n  justify-content: center !important;\n  align-items: center !important;\n  width: 100% !important;\n  max-width: 1500px !important; \n  gap: 10px !important;\n  padding: 0.2rem 10px 1.1rem 10px !important;\n  margin-top: -15px !important; \n\n  z-index: 100 !important;\n}\n\n\/* --- DESKTOP HORIZONTAL TABS (UNDERLINE DESIGN) --- *\/\n.va-tab {\n  flex: 1 !important;\n  padding: 14px 5px !important;\n  background: transparent !important;\n  border: none !important; \/* Removed the transparent border box *\/\n  border-radius: 0px !important;\n  color: #ffffff !important;\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 15px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  text-align: center !important;\n  cursor: pointer !important;\n  transition: all 0.2s ease !important;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: relative !important; \/* Anchors the new underline *\/\n}\n\n.va-tab:hover {\n  background: transparent !important;\n  color: #FFB601 !important; \n}\n\n.va-tab.active {\n  background: transparent !important; \n  color: #FFB601 !important; \n}\n\n\/* The new active underline indicator *\/\n.va-tab.active::after {\n  content: '';\n  position: absolute;\n  bottom: 0;\n  left: 15%; \/* Slight indent so it doesn't touch the edges *\/\n  width: 70%;\n  height: 3px;\n  background-color: #FFB601 !important;\n  border-radius: 2px 2px 0 0;\n}\n\n\/* \u2550\u2550 NEW: COMPACT LAPTOP RESPONSIVE REFINEMENTS \u2550\u2550 *\/\n@media (max-width: 1440px) and (min-width: 769px) {\n  #snap-section {\n    top: 60px !important; \n    height: calc(100vh - 75px) !important; \/* Reclaims vertical screen real estate *\/\n    padding-top: 0.75rem !important;\n  }\n\n  .va-tabs-nav {\n    margin-top: -5px !important;\n    padding-bottom: 0.5rem !important;\n    gap: 8px !important;\n  }\n\n  .va-tab {\n    padding: 10px 4px !important; \/* Slimmer navigation footprint *\/\n    font-size: 13px !important;\n  }\n\n  \/* Prevent rigid clipping on very short laptop displays *\/\n  .eco-card {\n    overflow-y: auto !important; \n    scrollbar-width: thin;\n  }\n  \n  .eco-card::-webkit-scrollbar {\n    width: 4px;\n  }\n  .eco-card::-webkit-scrollbar-thumb {\n    background: rgba(255, 182, 1, 0.3);\n    border-radius: 2px;\n  }\n}\n\n\/* --- FULL WIDTH CARDS MASK --- *\/\n#snap-right-container {\n  width: 100% !important;\n  flex-grow: 1 !important; \n  overflow: hidden !important;\n  position: relative !important; \n  display: block !important; \n}\n\n#cards-track {\n  position: absolute !important;\n  top: 0 !important;\n  left: 0 !important;\n  width: 100% !important;\n  height: 100% !important; \n  display: flex !important;\n  flex-direction: column !important;\n  flex-wrap: nowrap !important; \n  will-change: transform !important;\n  transition: transform 0.75s cubic-bezier(0.22, 1, 0.36, 1) !important;\n}\n\n.eco-card {\n  height: 100% !important; \n  width: 100% !important;\n  flex: 0 0 100% !important; \n  position: relative !important;\n  overflow: hidden !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n}\n\/* --- ICON DISPLAY LOGIC --- *\/\n.va-tab-icon {\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  margin-right: 8px !important; \/* Space between icon and text *\/\n  flex-shrink: 0 !important;\n}\n\/* --- CUSTOM ICON SIZE --- *\/\n.va-tab-icon svg {\n  width: 24px !important;  \/* Adjust width *\/\n  height: 24px !important; \/* Keep height matching width *\/\n}\n\/* Default state: Hide active icon, show inactive icon *\/\n.va-tab .va-icon-active {\n  display: none !important;\n}\n.va-tab .va-icon-inactive {\n  display: block !important;\n}\n\n\/* Active state: Hide inactive icon, show active icon *\/\n.va-tab.active .va-icon-active {\n  display: block !important;\n}\n.va-tab.active .va-icon-inactive {\n  display: none !important;\n}\n\n\/* --- MOBILE TWEAKS FOR THE NEW ICONS --- *\/\n\n\n@media (max-width: 768px) {\n  #snap-right-container {\n    display: block !important; \n  }\n  \n  .eco-card {\n    flex-direction: column !important; \n    justify-content: flex-start !important; \n    padding: 0px !important;\n    gap: 20px !important; \n  }\n  \n  .eco-card > div, \n  .eco-card > .e-con,\n  .eco-card > .elementor-container {\n    width: 100% !important;\n    min-height: auto !important; \n    flex: 0 0 auto !important; \n  }\n  \n  .va-tabs-nav {\n    padding-top: 0 !important; \n    margin-top: -10px !important;\n    padding-bottom: 1rem !important;\n  }\n  \n\n  \/* \u2550\u2550 MOBILE HEIGHT FIX \u2550\u2550 *\/\n  #snap-right-container {\n    flex: 1 1 0 !important;\n    min-height: 0 !important;\n    height: 0 !important; \n  }\n\n  #cards-track {\n    height: 100% !important;\n    max-height: 100% !important;\n  }\n\n  .eco-card {\n    height: 100% !important;\n    flex: 0 0 100% !important;\n    overflow-y: auto !important; \n    padding: 20px !important;\n    box-sizing: border-box !important;\n  }\n  \n  #snap-section {\n    top: 80px !important; \n    height: calc(100vh - 80px) !important; \n    padding-top: 1rem !important;\n  }\n}\n\/* --- MOBILE RESPONSIVE TABS (FIXED LAYOUT) --- *\/\n@media (max-width: 768px) {\n  .va-tabs-nav {\n    padding: 1rem 10px 0.5rem 10px !important;\n    gap: 15px !important;\n  }\n  \n  .va-tab {\n    flex: 0 0 auto !important; \n    \/* 8px bottom padding pushes the underline down away from the icon *\/\n    padding: 0 0 8px 0 !important; \n    border: none !important;\n    background: transparent !important;\n  }\n\n  \/* Completely removes the old dot pseudo-element *\/\n  .va-tab::before {\n    display: none !important;\n  }\n\n  \/* \u2550\u2550 FIXED UNDERLINE ALIGNMENT \u2550\u2550 *\/\n  .va-tab.active::after {\n    display: none !important;\n  }\n\n  \/* Icon Spacing Logic *\/\n  .va-tab-icon {\n    margin-right: 0 !important;\n    transition: margin 0.3s ease !important;\n  }\n  \n  .va-tab.active .va-tab-icon {\n    margin-right: 6px !important; \/* Restores gap when text slides out *\/\n  }\n\n  \/* Text Slide-out Animation *\/\n  .va-tab span {\n    max-width: 0;\n    opacity: 0;\n    overflow: hidden;\n    white-space: nowrap;\n    font-size: 13px !important; \n    color: #FFB601 !important;\n    transition: all 0.3s ease;\n    display: inline-block;\n    vertical-align: middle;\n    transform: translateY(1px); \/* Slight nudge to perfectly center with icons *\/\n  }\n\n  .va-tab.active span {\n    max-width: 150px; \n    opacity: 1;\n  }\n}\n<\/style>\n\n<script>\n(function() {\n  'use strict';\n\n  function waitAndInit() {\n    const ecoSection  = document.getElementById('eco');\n    const snapSection = document.getElementById('snap-section');\n    const cardsTrack  = document.getElementById('cards-track');\n    const rightCol    = document.getElementById('snap-right-container');\n\n    if (!ecoSection || !snapSection || !cardsTrack || !rightCol) {\n      setTimeout(waitAndInit, 500);\n      return;\n    }\n\n    \/\/ --- BULLETPROOF OVERFLOW SCANNER ---\n    let parent = snapSection.parentElement;\n    while (parent && parent !== document.body) {\n        const style = window.getComputedStyle(parent);\n        if (style.overflow === 'hidden' || style.overflowX === 'hidden' || style.overflowY === 'hidden') {\n            parent.style.setProperty('overflow', 'visible', 'important');\n            parent.style.setProperty('overflow-x', 'clip', 'important');\n        }\n        parent = parent.parentElement;\n    }\n    document.documentElement.style.setProperty('overflow-x', 'clip', 'important');\n    document.body.style.setProperty('overflow-x', 'clip', 'important');\n\n    const cards = document.querySelectorAll('.eco-card');\n    if (cards.length === 0) return;\n    const CARD_COUNT = cards.length;\n\n    const ecoTop = document.getElementById('eco-top');\n    if (ecoTop) {\n      snapSection.insertBefore(ecoTop, snapSection.firstChild);\n    }\n\n    const nav = document.createElement('nav');\n    nav.className = 'va-tabs-nav';\n    const labels = Array.from(cards).map(c => c.dataset.label || '');\n\n    \/\/ --- ICON ARRAY FOR THE 5 DIVISIONS ---\n    \/\/ Replace the dummy <svg> tags below with Saurav's actual SVG code.\n    const tabIcons = [\n      { \/\/ 1. DEFENCE\n        inactive: `<svg class=\"va-icon-inactive\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#ffffff\"><path d=\"M119.74,32.44c23.52,13.07,45.14,21.84,67.18,27.21l-.05,47.13c-.01,15.45-4.28,30.59-13.41,47.63-12.44,21.07-30.48,38.48-53.69,51.81-17.44-9.83-33.27-23.55-45.01-39.11-14.05-18.61-21.5-38.77-21.55-58.31l-.13-49.08c22.17-5.44,44.08-14.42,66.65-27.29M119.96,19.87c-1.77,0-3.53.63-5.42,1.72-23.14,13.27-46.98,23.25-73.47,28.52l.15,58.73c.12,47.43,37.58,90.23,78.65,111.04,26.9-14.22,48.97-33.9,64.06-59.58,9.06-16.84,14.93-34.14,14.95-53.5l.05-56.78c-26.65-5.28-50.76-15.43-74.24-28.56-1.63-1.1-3.18-1.58-4.73-1.58h0Z\"\/><\/svg>`,\n        active: `<svg class=\"va-icon-active\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#FFB601\"><path d=\"M119.87,219.87c-41.07-20.81-78.53-63.61-78.65-111.04l-.15-58.73c26.49-5.26,50.34-15.25,73.47-28.52,3.54-2.03,6.66-2.48,10.15-.13,23.49,13.13,47.59,23.28,74.24,28.56l-.05,56.78c-.02,19.36-5.89,36.66-14.95,53.5-15.09,25.67-37.17,45.36-64.06,59.58Z\"\/><\/svg>`\n      },\n      { \/\/ 2. MANUFACTURING\n        inactive: `<svg class=\"va-icon-inactive\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#ffffff\"><path d=\"M43.17,206.92c-2.78,0-5.37-1.08-7.29-3.04-1.93-1.96-3.01-4.66-2.97-7.4l-.03-75.44,4.82-2.74,44.11-27.06,1.46-.1c1.1-.08,2.23-.16,3.4.01,4.61.67,6.55,5.86,6.56,8.49l.04,13.05,34.26-21.17,1.12-.2c3.89-.7,7.91,1.1,9.77,4.39l.78,1.37.02,15.66,21.87-13.46,3.12-58.63c.31-5.81,4.43-9.88,10.24-10.11h.24s18.31,0,18.31,0c5.18,0,9.59,4.23,9.83,9.44l3.88,85.45.37,71.14c.01,2.68-1.16,5.47-3.13,7.46-1.86,1.87-4.28,2.91-6.8,2.91H43.17ZM44.88,127.97l.03,66.95h150.17s-.36-69.33-.36-69.33l-3.77-83.07h-14.81s-3.39,63.67-3.39,63.67l-45.49,27.99-.04-28.37-45.88,28.35-.09-28.5-36.36,22.31ZM155.64,180.92c-2.25,0-4.5-.96-6.2-2.64-1.71-1.69-2.69-3.96-2.68-6.21l.02-20.72c0-4.51,4.32-8.77,8.88-8.77l20.68-.02h0c2.6,0,5.27,1.52,6.77,3.02,1.83,1.84,2.2,3.79,2.19,5.09v20.61c0,5.19-4.22,9.44-9.41,9.48l-20.19.15h-.06ZM158.77,154.58v14.32s14.53-.11,14.53-.11v-14.22l-14.53.02ZM173.3,150.64s0,.05,0,.08v-.08ZM108.74,180.89l-.34-.04c-3.61-.41-7.81-4.17-7.81-8.41v-22.21s.18-.7.18-.7c.8-3.28,4.43-6.93,8.36-6.93l21.31-.02h.01c2.22,0,4.37.92,6.05,2.6,1.71,1.71,2.69,3.97,2.69,6.22v20.68c0,3.79-3.15,7.25-6.2,8.41l-1.03.39h-23.23ZM112.6,154.59v14.29s14.6,0,14.6,0v-14.3s-14.6.02-14.6.02ZM84.89,180.86h-21.67c-4.47-.01-8.68-4.29-8.67-8.81l.02-20.67c0-4.6,4.17-8.79,8.75-8.79h21.28c4.09,0,7.91,3.95,8.46,7.35l.08.47.03,22.17c0,2.21-.85,4.29-2.42,5.85-1.56,1.56-3.64,2.43-5.85,2.43ZM81.16,172.6h0s0,0,0,0ZM66.57,154.59v14.27s14.59,0,14.59,0l-.02-14.28h-14.56Z\"\/><\/svg>`,\n        active: `<svg class=\"va-icon-active\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#FFB601\"><path d=\"M40.75,123.92l42.95-26.35c.91-.07,1.61-.11,2.1-.04.62.09,1.42,1.78,1.43,2.57l.07,23.77,42.42-26.21c1.36-.25,2.9.41,3.48,1.44l.04,24.8,33.68-20.72,3.29-61.78c.14-2.69,1.67-4.32,4.49-4.43h18.31c1.92,0,3.74,1.64,3.83,3.71l3.87,85.21.37,71.14c.01,1.94-1.66,4.33-3.94,4.33H43.17c-2.63,0-4.31-2.21-4.27-4.39l-.03-71.99,1.87-1.06ZM87.16,173.04l-.03-21.69c-.12-.77-1.63-2.32-2.53-2.32h-21.27c-1.36,0-2.75,1.61-2.75,2.8l-.02,20.67c0,1.15,1.51,2.8,2.67,2.8h21.67c1.25,0,2.27-1.02,2.27-2.27ZM130.86,175.32c1.09-.41,2.33-1.89,2.33-2.8v-20.68c0-1.27-1.35-2.82-2.75-2.82l-21.31.02c-.89,0-2.33,1.5-2.54,2.35v21.49c0,.99,1.69,2.36,2.48,2.45h21.79ZM155.65,175.37l20.19-.15c1.91-.01,3.46-1.57,3.46-3.48v-20.65c0-.88-2.04-2.07-2.96-2.07l-20.69.02c-1.23,0-2.88,1.58-2.88,2.78l-.02,20.71c0,1.37,1.45,2.86,2.9,2.84Z\"\/><\/svg>`\n      },\n      { \/\/ 3. SERVICES\n        inactive: `<svg class=\"va-icon-inactive\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#ffffff\"><g><path d=\"M119.58,118.95v12c6.89,0,13.75,1.73,19.84,5.01,7.57,4.07,12.83,11.09,13.48,17.95l.29,29.72-67.12-.06.21-28.45c.07-8.91,6.96-15.75,13.4-19.18,6.13-3.27,13.01-5,19.89-5v-12M119.58,118.95c-8.78,0-17.55,2.15-25.54,6.41-11.13,5.94-19.65,16.9-19.74,29.68l-.23,30.37c-.04,5.1,3.87,10.16,9.38,10.17l73.42.06c5.08-.96,8.4-4.67,8.36-9.46l-.33-32.82c-.89-12.02-9.4-22.37-19.79-27.96-8-4.3-16.77-6.44-25.53-6.44h0Z\"\/><path d=\"M119.66,71.45c7.15,0,12.97,5.82,12.97,12.97s-5.82,12.97-12.97,12.97-12.97-5.82-12.97-12.97,5.82-12.97,12.97-12.97M119.66,59.45c-13.79,0-24.97,11.18-24.97,24.97s11.18,24.97,24.97,24.97,24.97-11.18,24.97-24.97-11.18-24.97-24.97-24.97h0Z\"\/><\/g><g><path d=\"M186.57,138.61h0c5.44,0,10.51,1.68,15.09,5,3.52,2.55,5.72,6.01,5.75,9.02l.12,12.2h-21.42s-.14-11.58-.14-11.58c-.06-4.61-1.01-9.38-2.9-14.41,1.16-.15,2.33-.23,3.49-.23M186.57,126.61c-6.79,0-13.72,1.84-20.29,5.52,4.01,6.39,7.61,13.9,7.7,21.27l.29,23.44h37.2c4.89,0,8.15-3.93,8.11-8.22l-.17-16.11c-.08-7.53-4.68-14.24-10.71-18.62-6.69-4.85-14.32-7.28-22.13-7.28h0Z\"\/><path d=\"M186.78,91.82c4.02,0,7.3,3.27,7.3,7.3s-3.27,7.3-7.3,7.3-7.3-3.27-7.3-7.3,3.27-7.3,7.3-7.3M186.78,79.82c-10.66,0-19.3,8.64-19.3,19.3s8.64,19.3,19.3,19.3,19.3-8.64,19.3-19.3-8.64-19.3-19.3-19.3h0Z\"\/><\/g><g><path d=\"M52.45,138.83h0c1.28,0,2.56.09,3.82.28-2.11,5.72-3.17,11.61-3.18,17.61v8.14s-21.16-.03-21.16-.03l.12-12.12c.03-3.11,2.36-6.83,5.8-9.26,4.28-3.02,9.33-4.62,14.6-4.62M52.45,126.83c-7.52,0-15.06,2.25-21.52,6.81-6.1,4.31-10.8,11.41-10.88,18.95l-.16,15.98c-.04,3.89,3.07,8.24,7.7,8.25l37.47.06.03-20.14c.01-8.56,2.77-16.4,7.87-23.85-6.2-4.02-13.35-6.06-20.5-6.06h0Z\"\/><path d=\"M52.62,91.84c4.01,0,7.26,3.26,7.26,7.27s-3.26,7.26-7.26,7.26-7.27-3.26-7.27-7.26,3.26-7.27,7.27-7.27M52.62,79.84c-10.64,0-19.27,8.63-19.27,19.27s8.62,19.26,19.27,19.26,19.26-8.63,19.26-19.26-8.62-19.27-19.26-19.27h0Z\"\/><\/g><\/svg>`,\n        active: `<svg class=\"va-icon-active\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#FFB601\"><g><path d=\"M156.87,195.63l-73.42-.06c-5.52,0-9.42-5.07-9.38-10.17l.23-30.37c.1-12.78,8.61-23.74,19.74-29.68,15.97-8.52,35.05-8.59,51.07.03,10.39,5.59,18.9,15.94,19.79,27.96l.32,32.82c.05,4.79-3.28,8.5-8.36,9.46Z\"\/><circle cx=\"119.66\" cy=\"84.41\" r=\"24.97\"\/><\/g><g><path d=\"M211.47,176.83h-37.2s-.29-23.44-.29-23.44c-.09-7.37-3.69-14.87-7.7-21.27,14.13-7.91,29.91-7.31,42.42,1.76,6.03,4.37,10.63,11.08,10.71,18.62l.16,16.11c.04,4.29-3.22,8.22-8.11,8.22Z\"\/><circle cx=\"186.78\" cy=\"99.11\" r=\"19.3\"\/><\/g><g><path d=\"M27.58,176.82c-4.63,0-7.74-4.36-7.7-8.25l.16-15.98c.07-7.54,4.78-14.64,10.88-18.95,12.62-8.91,29.31-9,42.03-.76-5.1,7.45-7.86,15.3-7.87,23.85l-.03,20.14-37.47-.06Z\"\/><circle cx=\"52.62\" cy=\"99.11\" r=\"19.26\"\/><\/g><\/svg>`\n      },\n      { \/\/ 4. EQUIPMENT\n        inactive: `<svg class=\"va-icon-inactive\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#ffffff\"><g><path d=\"M110.33,42.51h19.43s.03,9.38.03,9.38h11.96s36.74.02,36.74.02c2.07.21,4.11,1.62,4.11,2.9l.14,65.16c0,.16,0,.34-.54.55l-7.55,2.99-.03,8.12-.04,10.19c-4.01-26.23-26.92-46.39-54.51-46.39s-50.54,20.2-54.52,46.46v-10.23s-.02-8.35-.02-8.35l-7.83-2.89c-.16-.06-.24-.11-.24-.11-.02-.02-.05-.07-.09-.16l.14-65.36c0-1.2,1.81-2.8,3.65-2.81l37.22-.09,11.94-.03.02-9.35M98.36,30.51l-.02,9.38-37.22.09c-8.07.02-15.6,6.58-15.61,14.78l-.14,66.88c.89,4.72,3.63,8.35,8.17,10.03l.02,13.23c.02,15.16,5.7,29.87,15.48,41.54,7.95,9.48,18.2,16.4,29.91,20.46,6.64,2.3,13.94,3.48,21.25,3.48,6.68,0,13.37-.98,19.59-2.96,27.52-8.79,46.06-33.85,46.77-62.23l.05-13.51c4.93-1.95,8.14-6.4,8.13-11.74l-.14-65.16c-.02-8.36-7.63-14.42-15.68-14.87h-37.17s-.03-9.39-.03-9.39h-43.37ZM120.07,192.62c-23.82,0-43.13-19.07-43.13-42.6s19.31-42.6,43.13-42.6,43.13,19.07,43.13,42.6-19.31,42.6-43.13,42.6h0Z\"\/><path d=\"M120.06,127.15c3.45,0,6.72.74,9.67,2.06-.58-.04-1.16-.06-1.75-.06-12.98,0-23.54,10.5-23.54,23.4,0,8.48,4.56,15.92,11.38,20.03-10.85-1.96-19.1-11.31-19.1-22.52,0-12.63,10.47-22.9,23.34-22.9M120.06,115.15c-19.52,0-35.34,15.63-35.34,34.9s15.82,34.9,35.34,34.9,35.34-15.63,35.34-34.9-15.82-34.9-35.34-34.9h0ZM127.98,163.94c-6.37,0-11.54-5.1-11.54-11.4s5.17-11.4,11.54-11.4,11.54,5.1,11.54,11.4-5.17,11.4-11.54,11.4h0Z\"\/><\/g><path d=\"M163.13,79.72h-86.26c-3.31,0-6-2.69-6-6s2.69-6,6-6h86.26c3.31,0,6,2.69,6,6s-2.69,6-6,6Z\"\/><\/svg>`,\n        active: `<svg class=\"va-icon-active\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#FFB601\"><path d=\"M120.06,115.15c-19.52,0-35.34,15.63-35.34,34.9s15.82,34.9,35.34,34.9,35.34-15.63,35.34-34.9-15.82-34.9-35.34-34.9ZM127.98,163.94c-6.37,0-11.54-5.1-11.54-11.4s5.17-11.4,11.54-11.4,11.54,5.1,11.54,11.4-5.17,11.4-11.54,11.4Z\"\/><path d=\"M194.61,54.78c-.02-8.36-7.63-14.42-15.68-14.87h-37.17s-.03-9.39-.03-9.39h-43.37s-.02,9.38-.02,9.38l-37.22.09c-8.07.02-15.6,6.58-15.61,14.78l-.14,66.88c.89,4.72,3.63,8.35,8.17,10.03l.02,13.23c.02,15.16,5.7,29.87,15.48,41.54,7.95,9.48,18.2,16.4,29.91,20.46,12.7,4.41,27.81,4.68,40.85.51,27.52-8.79,46.06-33.85,46.77-62.23l.05-13.51c4.93-1.95,8.14-6.4,8.13-11.74l-.14-65.16ZM120.07,192.62c-23.82,0-43.13-19.07-43.13-42.6s19.31-42.6,43.13-42.6,43.13,19.07,43.13,42.6-19.31,42.6-43.13,42.6ZM163.13,77.28h-86.26c-2.21,0-4-1.79-4-4s1.79-4,4-4h86.26c2.21,0,4,1.79,4,4s-1.79,4-4,4Z\"\/><\/svg>`\n      },\n      { \/\/ 5. ACADEMY\n        inactive: `<svg class=\"va-icon-inactive\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#ffffff\"><path d=\"M119.9,57.96l.5.25,76.97,38.34-76.83,37.94c-.17.08-.33.16-.48.22l-77.44-38.17,77.29-38.58M120.08,45.75c-1.74,0-3.5.45-5.25,1.32L21.67,93.58c-1.79.89-2.26,4.89-.48,5.77l95.62,47.13c.77.38,1.65.53,2.57.53,2.23,0,4.72-.91,6.47-1.77l76.98-38.01v44.39s-2.11,4.11-2.11,4.11l-5,25.83c-.78,4.05,2.07,7.3,6.44,7.3.02,0,.04,0,.06,0l10.64-.07c3.54-.02,6.57-3.31,5.82-7.21l-5.02-26.2-1.94-4.55.07-48.23,5.65-2.68c.84-.4,2.08-1.34,2.08-2.78,0-1.34-.16-3.13-1.89-3.92l-91.88-45.77c-1.82-1.15-3.73-1.71-5.67-1.71h0Z\"\/><path d=\"M69.83,148.7l36.04,17.4c5.04,2.43,10.03,3.67,14.84,3.67,4.09,0,7.98-.89,11.58-2.63l37.86-18.41.07,15.12c-20.37,12.72-35.93,18.41-50.37,18.41s-29.94-5.75-50.1-18.62l.08-14.93M182.07,129.58l-55.03,26.76c-2.06,1-4.19,1.43-6.33,1.43-3.3,0-6.61-1.02-9.63-2.47l-53.16-25.66-.18,35.24c-.02,3.01,1.8,5.91,4.09,7.94,22.05,14.27,39.96,21.44,58.02,21.44s35.49-6.87,57.43-20.67c3.53-2.7,4.95-5.8,4.94-9.78l-.15-34.21h0Z\"\/><\/svg>`,\n        active: `<svg class=\"va-icon-active\" width=\"18\" height=\"18\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 240 240\" fill=\"#FFB601\"><path d=\"M202.23,188.87c-4.4.03-7.28-3.23-6.5-7.3l5-25.83,2.11-4.11v-44.39s-76.98,38.01-76.98,38.01c-2.47,1.22-6.42,2.52-9.04,1.23L21.19,99.35c-1.78-.88-1.3-4.88.48-5.77l93.16-46.5c3.7-1.85,7.47-1.79,10.93.39l91.88,45.77c1.74.79,1.89,2.58,1.89,3.92,0,1.44-1.24,2.38-2.08,2.78l-5.65,2.68-.07,48.23,1.94,4.55,5.02,26.2c.75,3.9-2.28,7.19-5.82,7.21l-10.64.07Z\"\/><path d=\"M177.28,173.57c-44.35,27.89-71.82,27.48-115.45-.77-2.29-2.03-4.1-4.92-4.09-7.94l.18-35.24,53.16,25.66c4.97,2.4,10.71,3.6,15.96,1.05l55.03-26.76.15,34.21c.02,3.98-1.4,7.08-4.94,9.78Z\"\/><\/svg>`\n      }\n    ];\n\n    labels.forEach((lbl, i) => {\n      const btn = document.createElement('button');\n      btn.className = 'va-tab' + (i === 0 ? ' active' : '');\n      \n      \/\/ Fallback just in case you have more cards than icons\n      const icons = tabIcons[i] || { inactive: '', active: '' };\n      \n      \/\/ Injecting the SVGs alongside the text\n      btn.innerHTML = `\n        <div class=\"va-tab-icon\">\n          ${icons.inactive}\n          ${icons.active}\n        <\/div>\n        <span>${lbl || ('TAB ' + (i+1))}<\/span>\n      `;\n      \n      btn.dataset.target = i;\n      nav.appendChild(btn);\n    });\n\n    if (ecoTop) {\n        ecoTop.after(nav);\n    } else {\n        snapSection.insertBefore(nav, snapSection.firstChild);\n    }\n    \n    const tabs = nav.querySelectorAll('.va-tab');\n\n    let currentCard  = 0;\n    let snapTimer    = null;\n    const scrollFactor = 1;\n\n    function setSectionHeight() {\n      const targetWrapper = ecoSection.querySelector('.e-con-inner') || ecoSection;\n      const exactHeight = window.innerHeight + ((CARD_COUNT - 1) * window.innerHeight * scrollFactor);\n      \n      targetWrapper.style.setProperty('min-height', exactHeight + 'px', 'important');\n      ecoSection.style.setProperty('min-height', exactHeight + 'px', 'important'); \n    }\n    setSectionHeight();\n    window.addEventListener('resize', setSectionHeight, { passive: true });\n\n    function getProgress() {\n      const secTop  = ecoSection.getBoundingClientRect().top + window.scrollY;\n      const scrolled = window.scrollY - secTop;\n      return Math.max(0, Math.min(CARD_COUNT - 1, scrolled \/ (window.innerHeight * scrollFactor)));\n    }\n\n    function snapTo(index, instant) {\n      index = Math.max(0, Math.min(CARD_COUNT - 1, index));\n      currentCard = index;\n\n      cardsTrack.style.transition = instant ? 'none' : 'transform 0.75s cubic-bezier(0.22,1,0.36,1)';\n      cardsTrack.style.transform  = `translateY(${-index * 100}%)`;\n\n      cards.forEach((c, i) => c.classList.toggle('is-active', i === index));\n      tabs.forEach((t, i)  => t.classList.toggle('active', i === index));\n    }\n\n    function onScroll() {\n      const progress = getProgress();\n      if (progress < 0 || progress >= CARD_COUNT) return;\n      snapTo(Math.round(progress));\n      if (snapTimer) clearTimeout(snapTimer);\n      snapTimer = setTimeout(() => {\n        snapTo(Math.round(Math.max(0, Math.min(CARD_COUNT-1, getProgress()))));\n      }, 80);\n    }\n\n    window.addEventListener('scroll', onScroll, { passive: true });\n    if (window.lenis) { window.lenis.on('scroll', onScroll); }\n    document.addEventListener('lenis-init', () => {\n      if (window.lenis) window.lenis.on('scroll', onScroll);\n    });\n\n    tabs.forEach(tab => {\n      tab.addEventListener('click', () => {\n        const idx = parseInt(tab.dataset.target, 10);\n        const secTop = ecoSection.getBoundingClientRect().top + window.scrollY;\n        const targetY = secTop + (idx * window.innerHeight * scrollFactor);\n\n        if (window.lenis) {\n            window.lenis.scrollTo(targetY, { duration: 1.2 });\n        } else {\n            window.scrollTo({ top: targetY, behavior: 'smooth' });\n        }\n      });\n    });\n\n    new IntersectionObserver((entries) => {\n      if (entries[0].isIntersecting) {\n        cards[0].classList.add('is-active');\n      }\n    }, { threshold: 0.15 }).observe(ecoSection);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', waitAndInit);\n  } else {\n    setTimeout(waitAndInit, 100);\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5b14312 e-con-full snap-wrapper e-flex e-con e-child\" data-id=\"5b14312\" data-element_type=\"container\" data-e-type=\"container\" id=\"snap-section\">\n\t\t<div class=\"elementor-element elementor-element-e08f092 e-con-full left-col e-flex e-con e-child\" data-id=\"e08f092\" data-element_type=\"container\" data-e-type=\"container\" id=\"left-container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-de8a20f elementor-widget elementor-widget-html\" data-id=\"de8a20f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"left-number\" id=\"left-number\">01<\/div>\r\n<div class=\"left-divider\"><\/div>\r\n<div class=\"left-category\" id=\"left-category\">DEFENCE<\/div>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a0c69e4 e-con-full right-col e-flex e-con e-child\" data-id=\"a0c69e4\" data-element_type=\"container\" data-e-type=\"container\" id=\"snap-right-container\">\n\t\t<div class=\"elementor-element elementor-element-3070072 e-con-full cards-track e-flex e-con e-child\" data-id=\"3070072\" data-element_type=\"container\" data-e-type=\"container\" id=\"cards-track\">\n\t\t<div class=\"elementor-element elementor-element-825a605 e-con-full eco-card e-flex e-con e-child\" data-id=\"825a605\" data-element_type=\"container\" data-e-type=\"container\" id=\"card-1\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-index=\"0\" data-num=\"01\" data-label=\"DEFENCE\">\n\t\t<div class=\"elementor-element elementor-element-785e5da e-con-full e-flex e-con e-child\" data-id=\"785e5da\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f33c95 elementor-widget elementor-widget-heading\" data-id=\"1f33c95\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Defence<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8cea63a elementor-widget elementor-widget-heading\" data-id=\"8cea63a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Next Generation of Defence Tech\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a16ec5 elementor-widget elementor-widget-text-editor\" data-id=\"9a16ec5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tEmpowering those on the front line with superior aerial domain awareness. We provide mission-ready solutions for complex security environments. By combining indigenous manufacturing with advanced ISR capabilities, we deliver the encrypted data and reliable platforms required for total domain awareness and national defence.\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7dc05b2 elementor-widget elementor-widget-button\" data-id=\"7dc05b2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/defence\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-89b5e2a e-con-full e-flex e-con e-child\" data-id=\"89b5e2a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1dc1a1a e-con-full counter elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-laptop e-flex e-con e-child\" data-id=\"1dc1a1a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9261e3f elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"9261e3f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\"> Hours Flown<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-524427b elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"524427b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Missions Delivered<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27af891 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"27af891\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Project Locations <\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5002490 e-con-full eco-card e-flex e-con e-child\" data-id=\"5002490\" data-element_type=\"container\" data-e-type=\"container\" id=\"card-2\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-index=\"1\" data-num=\"02\" data-label=\"MANUFACTURING\">\n\t\t<div class=\"elementor-element elementor-element-9988931 e-con-full e-flex e-con e-child\" data-id=\"9988931\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3732da3 elementor-widget elementor-widget-heading\" data-id=\"3732da3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Manufacturing\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68efcd6 elementor-widget elementor-widget-heading\" data-id=\"68efcd6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Autonomous Innovation. Sovereign Tech.\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2d51a elementor-widget elementor-widget-text-editor\" data-id=\"7b2d51a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tBeyond off-the-shelf solutions. We engineer high-performance UAV platforms from the ground up, combining advanced aerodynamics with proprietary hardware and technology to deliver specialized tools for unique operational challenges.\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1adc91e elementor-widget elementor-widget-button\" data-id=\"1adc91e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/manufacturing\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fa743eb e-con-full e-flex e-con e-child\" data-id=\"fa743eb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-39a1bf3 e-con-full counter elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-laptop e-flex e-con e-child\" data-id=\"39a1bf3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3877a20 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"3877a20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\"> Hours Flown<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af200a9 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"af200a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Missions Delivered<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e5446ad elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"e5446ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Project Locations <\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9e52d2b e-con-full eco-card e-flex e-con e-child\" data-id=\"9e52d2b\" data-element_type=\"container\" data-e-type=\"container\" id=\"card-3\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-index=\"2\" data-num=\"03\" data-label=\"SERVICES\">\n\t\t<div class=\"elementor-element elementor-element-d9eda03 e-con-full e-flex e-con e-child\" data-id=\"d9eda03\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8868927 elementor-widget elementor-widget-heading\" data-id=\"8868927\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Services\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25ed90e elementor-widget elementor-widget-heading\" data-id=\"25ed90e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Unrivaled Reach. Manned &amp; Unmanned\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c11e15 elementor-widget elementor-widget-text-editor\" data-id=\"2c11e15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tFrom piloted aircraft to autonomous UAVs, we provide a full spectrum of aerial data acquisition. We don\u2019t just capture images; we deliver the high-fidelity digital intelligence and mission-critical insights required for industrial-scale decision making.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-192ec41 elementor-widget elementor-widget-button\" data-id=\"192ec41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/services\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-90616e3 e-con-full e-flex e-con e-child\" data-id=\"90616e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2c199c5 e-con-full counter elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-laptop e-flex e-con e-child\" data-id=\"2c199c5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-caa3041 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"caa3041\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\"> Hours Flown<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee1eae5 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"ee1eae5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Missions Delivered<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cb04853 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"cb04853\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Project Locations <\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6324fae e-con-full eco-card e-flex e-con e-child\" data-id=\"6324fae\" data-element_type=\"container\" data-e-type=\"container\" id=\"card-4\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-index=\"3\" data-num=\"04\" data-label=\"EQUIPMENT\">\n\t\t<div class=\"elementor-element elementor-element-aa20f5d e-con-full e-flex e-con e-child\" data-id=\"aa20f5d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7f59088 elementor-widget elementor-widget-heading\" data-id=\"7f59088\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Equipment<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0f8c60 elementor-widget elementor-widget-heading\" data-id=\"d0f8c60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">End-to-End Fleet Supplies\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d15129 elementor-widget elementor-widget-text-editor\" data-id=\"9d15129\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tAs an authorized partner for the world\u2019s leading manufacturers, we provide a curated ecosystem of high-endurance UAVs and specialized sensors. From mission-ready hardware to certified maintenance and repairs, we ensure your fleet stays flight-ready.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8275908 elementor-widget elementor-widget-button\" data-id=\"8275908\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/equipment\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4d94553 e-con-full e-flex e-con e-child\" data-id=\"4d94553\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6fb0ecc e-con-full counter elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-laptop e-flex e-con e-child\" data-id=\"6fb0ecc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4f51126 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"4f51126\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\"> Hours Flown<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-069cc9b elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"069cc9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Missions Delivered <\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6cc9f28 elementor-widget-mobile__width-initial elementor-widget elementor-widget-counter\" data-id=\"6cc9f28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Project Locations  <\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"\" data-from-value=\"\" data-delimiter=\",\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7c5bcbe e-con-full eco-card e-flex e-con e-child\" data-id=\"7c5bcbe\" data-element_type=\"container\" data-e-type=\"container\" id=\"card-5\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\" data-index=\"4\" data-num=\"05\" data-label=\"ACADEMY\">\n\t\t<div class=\"elementor-element elementor-element-7654bac e-con-full e-flex e-con e-child\" data-id=\"7654bac\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-36ed405 elementor-widget elementor-widget-heading\" data-id=\"36ed405\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Academy<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-47cca8f elementor-widget elementor-widget-heading\" data-id=\"47cca8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Elite Training Ground\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25b581d elementor-widget elementor-widget-text-editor\" data-id=\"25b581d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tTechnology is only as powerful as the expert behind the controls. We provide elite-level training in specialized flight maneuvers, data acquisition, and aerial intelligence analysis, turning operators into industry-leading specialists.\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d38684 elementor-widget elementor-widget-button\" data-id=\"0d38684\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/academy\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f24199d e-con-full e-flex e-con e-child\" data-id=\"f24199d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bb2ba3b e-con-full e-flex e-con e-parent\" data-id=\"bb2ba3b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fe9366d elementor-widget elementor-widget-html\" data-id=\"fe9366d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Volatus Aerospace \u2014 HUD Grid & Scanning Line Background\r\n     ELEMENTOR USAGE:\r\n     1. Place an HTML Widget inside your Elementor container\/section\r\n     2. Ensure the container has no background color (Style \u2192 Background \u2192 Clear)\r\n     3. Paste this entire code into the HTML Widget\r\n     The script automatically detaches and mounts the background to the section root.\r\n-->\r\n\r\n<style>\r\n#va-wf-bg {\r\n  --va-bg: #0A0B0C;\r\n  --va-gold: #C9A84C;\r\n  --va-amber: #F5A623;\r\n  --va-grid: rgba(255, 255, 255, 0.045);\r\n  --va-min-height: 70vh;\r\n\r\n  position: absolute;\r\n  inset: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  min-height: var(--va-min-height);\r\n  background: var(--va-bg);\r\n  overflow: hidden;\r\n  z-index: 0;\r\n  pointer-events: none;\r\n  box-sizing: border-box;\r\n}\r\n\r\n#va-wf-bg * { \r\n  box-sizing: border-box; \r\n}\r\n\r\n\/* HUD grid texture *\/\r\n#va-wf-bg::before {\r\n  content: \"\";\r\n  position: absolute;\r\n  inset: 0;\r\n  background-image:\r\n    linear-gradient(var(--va-grid) 1px, transparent 1px),\r\n    linear-gradient(90deg, var(--va-grid) 1px, transparent 1px);\r\n  background-size: 56px 56px;\r\n  mask-image: radial-gradient(ellipse 80% 65% at 70% 45%, black 10%, transparent 75%);\r\n  -webkit-mask-image: radial-gradient(ellipse 80% 65% at 70% 45%, black 10%, transparent 75%);\r\n  pointer-events: none;\r\n}\r\n\r\n\/* Warm gold glow, off-center *\/\r\n#va-wf-bg::after {\r\n  content: \"\";\r\n  position: absolute;\r\n  inset: 0;\r\n  background: radial-gradient(ellipse 60% 55% at 78% 50%, rgba(201, 168, 76, 0.10), transparent 70%);\r\n  pointer-events: none;\r\n}\r\n\r\n\/* Scanning line *\/\r\n.va-wf-scanline {\r\n  position: absolute;\r\n  left: 0;\r\n  right: 0;\r\n  height: 1px;\r\n  background: linear-gradient(90deg, transparent, rgba(245, 166, 35, 0.35), transparent);\r\n  animation: va-drift 9s ease-in-out infinite;\r\n  pointer-events: none;\r\n}\r\n\r\n@keyframes va-drift {\r\n  0%   { top: 8%;  opacity: 0; }\r\n  10%  { opacity: 1; }\r\n  50%  { top: 92%; opacity: 1; }\r\n  60%  { opacity: 0; }\r\n  100% { top: 8%;  opacity: 0; }\r\n}\r\n\r\n\/* Tablet View (1024px) *\/\r\n@media (max-width: 1024px) {\r\n  #va-wf-bg {\r\n    --va-min-height: 60vh;\r\n  }\r\n  #va-wf-bg::before {\r\n    background-size: 44px 44px;\r\n    mask-image: radial-gradient(ellipse 85% 65% at 65% 45%, black 10%, transparent 75%);\r\n    -webkit-mask-image: radial-gradient(ellipse 85% 65% at 65% 45%, black 10%, transparent 75%);\r\n  }\r\n  #va-wf-bg::after {\r\n    background: radial-gradient(ellipse 65% 55% at 70% 50%, rgba(201, 168, 76, 0.12), transparent 70%);\r\n  }\r\n}\r\n\r\n\/* Mobile View (767px) *\/\r\n@media (max-width: 767px) {\r\n  #va-wf-bg {\r\n    --va-min-height: 50vh;\r\n  }\r\n  #va-wf-bg::before {\r\n    background-size: 36px 36px;\r\n    mask-image: radial-gradient(ellipse 90% 70% at 50% 45%, black 10%, transparent 80%);\r\n    -webkit-mask-image: radial-gradient(ellipse 90% 70% at 50% 45%, black 10%, transparent 80%);\r\n  }\r\n  #va-wf-bg::after {\r\n    background: radial-gradient(ellipse 85% 55% at 50% 45%, rgba(201, 168, 76, 0.15), transparent 75%);\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .va-wf-scanline { \r\n    animation: none; \r\n    opacity: 0; \r\n  }\r\n}\r\n<\/style>\r\n\r\n<div id=\"va-wf-bg\" class=\"va-wf-bg\" aria-hidden=\"true\">\r\n  <div class=\"va-wf-scanline\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  \/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n     ELEMENTOR BOOT ENGINE\r\n     Detaches #va-wf-bg from the HTML widget\r\n     and re-parents it to the section root.\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  let bootAttempts = 0;\r\n\r\n  function boot(){\r\n    if (bootAttempts > 60) return;\r\n    bootAttempts++;\r\n\r\n    const wrap = document.getElementById('va-wf-bg');\r\n    if (!wrap) { \r\n      setTimeout(boot, 100); \r\n      return; \r\n    }\r\n\r\n    \/\/ Locate the closest Elementor container or legacy section\r\n    const parentContainer = wrap.closest('.e-con, .e-container, .elementor-section');\r\n    if (parentContainer && wrap.parentElement !== parentContainer) {\r\n      parentContainer.style.position = 'relative';\r\n      parentContainer.style.overflow = 'hidden';\r\n      \/\/ Insert as the first child so all headings\/buttons naturally sit on top\r\n      parentContainer.insertBefore(wrap, parentContainer.firstChild);\r\n    }\r\n  }\r\n\r\n  if (document.readyState === 'complete') { \r\n    boot(); \r\n  } else { \r\n    window.addEventListener('load', boot); \r\n  }\r\n  document.addEventListener('DOMContentLoaded', boot);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-606e03f e-flex e-con-boxed e-con e-child\" data-id=\"606e03f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-36601f1 e-con-full e-flex e-con e-child\" data-id=\"36601f1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-51721ee elementor-widget elementor-widget-heading\" data-id=\"51721ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Wildfire Response &amp; Aerial Intelligence<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe3ef2f elementor-widget elementor-widget-heading\" data-id=\"fe3ef2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Earlier Detection. Faster Decisions. Stronger Response.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a145c6a elementor-widget elementor-widget-text-editor\" data-id=\"a145c6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Wildfires can change in minutes. Volatus Aerospace combines crewed and uncrewed aircraft, persistent aerial intelligence, resilient communications and heavy-lift autonomous platforms to help Canadian wildfire agencies detect threats earlier, maintain situational awareness and respond with greater speed, reach and flexibility.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7790653 elementor-widget elementor-widget-button\" data-id=\"7790653\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/services\/emergency-and-disaster-response\/wildfires\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Explore our wildfire response capabilities<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a1ddf09 e-con-full e-flex e-con e-child\" data-id=\"a1ddf09\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e671283 elementor-widget elementor-widget-image\" data-id=\"e671283\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"586\" height=\"1024\" src=\"https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-586x1024.webp\" class=\"attachment-large size-large wp-image-36851\" alt=\"\" srcset=\"https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-586x1024.webp 586w, https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-172x300.webp 172w, https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-768x1341.webp 768w, https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-880x1536.webp 880w, https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical-1173x2048.webp 1173w, https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/09\/flyox_volatus_vertical.webp 1376w\" sizes=\"(max-width: 586px) 100vw, 586px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-64c4550 e-flex e-con-boxed e-con e-parent\" data-id=\"64c4550\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63e3569 elementor-widget elementor-widget-heading\" data-id=\"63e3569\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Invest In Volatus <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2034e28 elementor-widget elementor-widget-text-editor\" data-id=\"2034e28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tVolatus Aerospace is a leader in innovative global aerial solutions for intelligence and cargo.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3be1f1 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"b3be1f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/investors\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Discover investor Insights<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-20e00b3 e-con-full e-flex e-con e-parent\" data-id=\"20e00b3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-65dc278 elementor-widget elementor-widget-html\" data-id=\"65dc278\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Volatus Aerospace \u2014 High-Performance Background Canvas Animation\r\n     ELEMENTOR USAGE:\r\n     1. Place an HTML Widget inside your Elementor container\/section\r\n     2. Paste this entire file content into the HTML Widget\r\n     3. Fully optimized: Path batching, offscreen caching, and viewport auto-pausing.\r\n-->\r\n\r\n<style>\r\n#va-wrap {\r\n  position: absolute;\r\n  inset: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  min-height: 75vh;\r\n  overflow: hidden;\r\n  background: #080B10;\r\n  pointer-events: none;\r\n  z-index: 0;\r\n  font-family: 'Courier New', monospace;\r\n  transform: translate3d(0, 0, 0);\r\n  backface-visibility: hidden;\r\n  will-change: transform;\r\n}\r\n\r\n#va-canvas {\r\n  position: absolute;\r\n  inset: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  display: block;\r\n  transform: translate3d(0, 0, 0);\r\n}\r\n\r\n.va-hud {\r\n  position: absolute;\r\n  font-size: 9.5px;\r\n  color: rgba(240, 169, 48, 0.45);\r\n  letter-spacing: 1.4px;\r\n  line-height: 2;\r\n  text-transform: uppercase;\r\n  pointer-events: none;\r\n  font-family: 'Courier New', monospace;\r\n  user-select: none;\r\n}\r\n\r\n.va-hud.tl { top: 22px; left: 24px; }\r\n.va-hud.tr { top: 22px; right: 24px; text-align: right; }\r\n.va-hud.bl { bottom: 22px; left: 24px; }\r\n.va-hud.br { bottom: 22px; right: 24px; text-align: right; }\r\n.va-hud span { color: rgba(240, 169, 48, 0.75); font-weight: 600; }\r\n\r\n.va-divider {\r\n  display: block;\r\n  width: 28px;\r\n  height: 1px;\r\n  background: rgba(240, 169, 48, 0.25);\r\n  margin: 4px 0;\r\n}\r\n.tl .va-divider, .bl .va-divider { margin-left: 0; }\r\n.tr .va-divider, .br .va-divider { margin-left: auto; }\r\n<\/style>\r\n\r\n<div id=\"va-wrap\">\r\n  <canvas id=\"va-canvas\"><\/canvas>\r\n\r\n  <!-- Top Left -->\r\n  <div class=\"va-hud tl\" id=\"hud-tl\">\r\n    SYS: <span>ONLINE<\/span><br>\r\n    DRONES: <span id=\"drone-count\">04<\/span><br>\r\n    <span class=\"va-divider\"><\/span>\r\n    ALT: <span>120 M<\/span>\r\n  <\/div>\r\n\r\n  <!-- Top Right -->\r\n  <div class=\"va-hud tr\" id=\"hud-tr\">\r\n    LAT: <span id=\"lat\">45.4215\u00b0N<\/span><br>\r\n    LON: <span id=\"lon\">75.6972\u00b0W<\/span><br>\r\n    <span class=\"va-divider\"><\/span>\r\n    MODE: <span>SURVEY<\/span>\r\n  <\/div>\r\n\r\n  <!-- Bottom Left -->\r\n  <div class=\"va-hud bl\">\r\n    VOLATUS AEROSPACE<br>\r\n    <span>AERIAL INTELLIGENCE<\/span>\r\n  <\/div>\r\n\r\n  <!-- Bottom Right -->\r\n  <div class=\"va-hud br\" id=\"hud-br\">\r\n    SPEED: <span id=\"speed\">18.0 M\/S<\/span><br>\r\n    SIGNAL: <span>\u2588\u2588\u2588\u2588\u2591<\/span><br>\r\n    <span class=\"va-divider\"><\/span>\r\n    UPTIME: <span id=\"uptime\">00:00:00<\/span>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  let bootAttempts = 0;\r\n\r\n  function boot(){\r\n    if(bootAttempts > 60) return;\r\n    bootAttempts++;\r\n\r\n    const wrap   = document.getElementById('va-wrap');\r\n    const canvas = document.getElementById('va-canvas');\r\n    if(!wrap || !canvas){ setTimeout(boot, 100); return; }\r\n\r\n    const parentContainer = wrap.closest('.e-con, .e-container, .elementor-section');\r\n    if(parentContainer && wrap.parentElement !== parentContainer){\r\n      parentContainer.style.position = 'relative';\r\n      parentContainer.style.overflow = 'hidden';\r\n      parentContainer.insertBefore(wrap, parentContainer.firstChild);\r\n    }\r\n\r\n    initOptimizedAnimation(wrap, canvas, parentContainer);\r\n  }\r\n\r\n  if(document.readyState === 'complete'){ boot(); }\r\n  else { window.addEventListener('load', boot); }\r\n  document.addEventListener('DOMContentLoaded', boot);\r\n\r\n  \/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n     OPTIMIZED HIGH-PERFORMANCE ENGINE\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function initOptimizedAnimation(wrap, canvas, parentContainer){\r\n    const ctx = canvas.getContext('2d', { alpha: false, desynchronized: true });\r\n    if(!ctx) return;\r\n\r\n    const A = '240,169,48';\r\n    const COLOR_GRID_LINE  = `rgba(${A}, 0.04)`;\r\n    const COLOR_PARTICLE   = `rgba(${A}, 0.12)`;\r\n    const COLOR_SWEEP_LINE = `rgba(${A}, 0.65)`;\r\n    const COLOR_SCAN_BG    = `rgba(${A}, 0.025)`;\r\n    const COLOR_SCAN_LINE  = `rgba(${A}, 0.12)`;\r\n    const COLOR_FRAME      = `rgba(${A}, 0.28)`;\r\n\r\n    let W = 0, H = 0;\r\n    let cx = 0, cy = 0, R = 0;\r\n    let animId = null;\r\n    let isVisible = true;\r\n    let frame = 0;\r\n    const startTime = Date.now();\r\n\r\n    \/\/ Cache DOM text elements once (prevents DOM queries in animation loop)\r\n    const domUptime = document.getElementById('uptime');\r\n    const domSpeed  = document.getElementById('speed');\r\n    const domLat    = document.getElementById('lat');\r\n    const domLon    = document.getElementById('lon');\r\n\r\n    \/\/ Offscreen Canvas Cache for static radar rings and sweep cone\r\n    const radarBgCanvas = document.createElement('canvas');\r\n    const radarBgCtx    = radarBgCanvas.getContext('2d');\r\n    const sweepCanvas   = document.createElement('canvas');\r\n    const sweepCtx      = sweepCanvas.getContext('2d');\r\n\r\n    function buildOffscreenRadar(){\r\n      if(R <= 0) return;\r\n      \r\n      \/\/ 1. Static Rings & Grid Lines\r\n      const d = Math.ceil(R * 2 + 30);\r\n      radarBgCanvas.width  = d;\r\n      radarBgCanvas.height = d;\r\n      const ocx = d \/ 2, ocy = d \/ 2;\r\n\r\n      radarBgCtx.clearRect(0, 0, d, d);\r\n      radarBgCtx.lineWidth = 0.6;\r\n      const rings = 4;\r\n      for(let i = 1; i <= rings; i++){\r\n        const rr = R * (i \/ rings);\r\n        radarBgCtx.strokeStyle = `rgba(${A},0.07)`;\r\n        radarBgCtx.beginPath();\r\n        radarBgCtx.arc(ocx, ocy, rr, 0, Math.PI * 2);\r\n        radarBgCtx.stroke();\r\n\r\n        if(i < rings){\r\n          radarBgCtx.fillStyle = `rgba(${A},0.22)`;\r\n          radarBgCtx.font = '8px Courier New';\r\n          radarBgCtx.fillText(`${i * 30}M`, ocx + rr + 4, ocy - 3);\r\n        }\r\n      }\r\n\r\n      radarBgCtx.strokeStyle = `rgba(${A},0.055)`;\r\n      radarBgCtx.lineWidth   = 0.5;\r\n      radarBgCtx.setLineDash([4, 8]);\r\n      radarBgCtx.beginPath();\r\n      radarBgCtx.moveTo(ocx - R, ocy); radarBgCtx.lineTo(ocx + R, ocy);\r\n      radarBgCtx.moveTo(ocx, ocy - R); radarBgCtx.lineTo(ocx, ocy + R);\r\n      radarBgCtx.stroke();\r\n\r\n      \/\/ 2. Pre-rendered Sweep Cone\r\n      sweepCanvas.width  = d;\r\n      sweepCanvas.height = d;\r\n      sweepCtx.clearRect(0, 0, d, d);\r\n\r\n      const arcSpan = Math.PI * 0.28;\r\n      const steps = 6;\r\n      for(let s = 0; s < steps; s++){\r\n        const t = s \/ steps;\r\n        const a0 = -arcSpan * (1 - t);\r\n        sweepCtx.beginPath();\r\n        sweepCtx.moveTo(ocx, ocy);\r\n        sweepCtx.arc(ocx, ocy, R, a0, 0);\r\n        sweepCtx.closePath();\r\n        sweepCtx.fillStyle = `rgba(${A},${0.04 * (1 - t)})`;\r\n        sweepCtx.fill();\r\n      }\r\n    }\r\n\r\n    function resize(){\r\n      const host = parentContainer || wrap;\r\n      const nw = host.clientWidth || window.innerWidth;\r\n      const nh = host.clientHeight || window.innerHeight;\r\n      if (nw === W && nh === H) return;\r\n\r\n      W = canvas.width  = nw;\r\n      H = canvas.height = nh;\r\n      cx = W \/ 2;\r\n      cy = H \/ 2;\r\n      R = Math.min(W, H) * 0.40;\r\n\r\n      buildOffscreenRadar();\r\n    }\r\n    resize();\r\n\r\n    let rszTimer;\r\n    new ResizeObserver(()=>{\r\n      clearTimeout(rszTimer);\r\n      rszTimer = setTimeout(resize, 100);\r\n    }).observe(parentContainer || wrap);\r\n\r\n    \/* \u2500\u2500\u2500 Pause Animation when Offscreen \u2500\u2500\u2500 *\/\r\n    const io = new IntersectionObserver((entries)=>{\r\n      entries.forEach(e => {\r\n        isVisible = e.isIntersecting;\r\n        if(isVisible && !animId){\r\n          tick();\r\n        }\r\n      });\r\n    }, { threshold: 0.05 });\r\n    io.observe(parentContainer || wrap);\r\n\r\n    const rnd = (a, b) => a + Math.random() * (b - a);\r\n\r\n    \/* 1. SCROLLING GRID (Batched: 1 single stroke call) *\/\r\n    let gridOff = 0;\r\n    function drawGrid(){\r\n      const sp = 48;\r\n      const ox = gridOff % sp;\r\n      ctx.lineWidth = 0.5;\r\n      ctx.strokeStyle = COLOR_GRID_LINE;\r\n      ctx.beginPath();\r\n      for(let x = ox - sp; x < W + sp; x += sp){\r\n        ctx.moveTo(x, 0); ctx.lineTo(x, H);\r\n      }\r\n      for(let y = ox - sp; y < H + sp; y += sp){\r\n        ctx.moveTo(0, y); ctx.lineTo(W, y);\r\n      }\r\n      ctx.stroke();\r\n    }\r\n\r\n    \/* 2. RADAR *\/\r\n    let radarAngle = 0;\r\n    const blips = [];\r\n\r\n    function spawnBlip(){\r\n      const a = radarAngle + rnd(-0.2, 0.2);\r\n      const d = R * rnd(0.1, 0.9);\r\n      blips.push({ x: cx + Math.cos(a) * d, y: cy + Math.sin(a) * d, life: 1, size: rnd(1.5, 3) });\r\n    }\r\n\r\n    function drawRadar(){\r\n      \/\/ Draw pre-cached static rings\r\n      const d = radarBgCanvas.width;\r\n      if (d > 0) {\r\n        ctx.drawImage(radarBgCanvas, cx - d \/ 2, cy - d \/ 2);\r\n      }\r\n\r\n      \/\/ Rotate cached sweep cone\r\n      ctx.save();\r\n      ctx.translate(cx, cy);\r\n      ctx.rotate(radarAngle);\r\n      if (d > 0) {\r\n        ctx.drawImage(sweepCanvas, -d \/ 2, -d \/ 2);\r\n      }\r\n      \/\/ Leading sweep line\r\n      ctx.strokeStyle = COLOR_SWEEP_LINE;\r\n      ctx.lineWidth = 1;\r\n      ctx.beginPath();\r\n      ctx.moveTo(0, 0); ctx.lineTo(R, 0);\r\n      ctx.stroke();\r\n      ctx.restore();\r\n\r\n      \/\/ Blips\r\n      for(let i = blips.length - 1; i >= 0; i--){\r\n        const b = blips[i];\r\n        b.life -= 0.007;\r\n        if(b.life <= 0){ blips.splice(i, 1); continue; }\r\n        const rs = (1 - b.life) * 14;\r\n        ctx.beginPath();\r\n        ctx.arc(b.x, b.y, rs, 0, Math.PI * 2);\r\n        ctx.strokeStyle = `rgba(${A},${b.life * 0.35})`;\r\n        ctx.lineWidth = 0.8;\r\n        ctx.stroke();\r\n\r\n        ctx.beginPath();\r\n        ctx.arc(b.x, b.y, b.size, 0, Math.PI * 2);\r\n        ctx.fillStyle = `rgba(${A},${b.life})`;\r\n        ctx.fill();\r\n      }\r\n\r\n      \/\/ Center Hub\r\n      ctx.beginPath();\r\n      ctx.arc(cx, cy, 3, 0, Math.PI * 2);\r\n      ctx.fillStyle = `rgba(${A},0.7)`;\r\n      ctx.fill();\r\n    }\r\n\r\n    \/* 3. DRONES (Batched Trails: 4 strokes instead of 240) *\/\r\n    class Drone{\r\n      constructor(init){\r\n        this.trail = [];\r\n        this.blinkPhase = rnd(0, Math.PI * 2);\r\n        this.size  = rnd(5, 8);\r\n        this.speed = rnd(0.55, 1.1);\r\n        this.alpha = rnd(0.7, 1);\r\n        if(init){ this.x = rnd(80, W - 80); this.y = rnd(80, H - 80); }\r\n        else    { this._spawnEdge(); }\r\n        this._pickTarget();\r\n      }\r\n      _spawnEdge(){\r\n        const s = Math.floor(rnd(0, 4)), m = 60;\r\n        if(s===0){ this.x = -m; this.y = rnd(0, H); }\r\n        else if(s===1){ this.x = W + m; this.y = rnd(0, H); }\r\n        else if(s===2){ this.x = rnd(0, W); this.y = -m; }\r\n        else          { this.x = rnd(0, W); this.y = H + m; }\r\n      }\r\n      _pickTarget(){\r\n        const rng = Math.min(W, H) * 0.45;\r\n        const a = rnd(0, Math.PI * 2), d = rng * rnd(0.1, 1);\r\n        this.tx = cx + Math.cos(a) * d;\r\n        this.ty = cy + Math.sin(a) * d;\r\n      }\r\n      update(){\r\n        const dx = this.tx - this.x, dy = this.ty - this.y;\r\n        if(dx * dx + dy * dy < 1600){ this._pickTarget(); }\r\n        const angle = Math.atan2(dy, dx);\r\n        this.vx = Math.cos(angle) * this.speed;\r\n        this.vy = Math.sin(angle) * this.speed;\r\n        this.trail.push({ x: this.x, y: this.y });\r\n        if(this.trail.length > 40) this.trail.shift();\r\n        this.x += this.vx; this.y += this.vy;\r\n        if(this.x < -120 || this.x > W + 120 || this.y < -120 || this.y > H + 120) this._spawnEdge();\r\n      }\r\n      draw(){\r\n        \/\/ Continuous single-path trail\r\n        if(this.trail.length > 1){\r\n          ctx.beginPath();\r\n          ctx.moveTo(this.trail[0].x, this.trail[0].y);\r\n          for(let i = 1; i < this.trail.length; i++){\r\n            ctx.lineTo(this.trail[i].x, this.trail[i].y);\r\n          }\r\n          ctx.strokeStyle = `rgba(${A},${0.28 * this.alpha})`;\r\n          ctx.lineWidth = 1.1;\r\n          ctx.stroke();\r\n        }\r\n\r\n        const blink = (Math.sin(Date.now() \/ 330 + this.blinkPhase) > 0.4) ? 1 : 0.25;\r\n        const s = this.size;\r\n\r\n        ctx.save();\r\n        ctx.translate(this.x, this.y);\r\n        ctx.rotate(Math.atan2(this.vy || 0, this.vx || 0) + Math.PI \/ 4);\r\n\r\n        \/\/ Render 4 drone arms\r\n        ctx.strokeStyle = `rgba(${A},${this.alpha * 0.85})`;\r\n        ctx.lineWidth = 1.1;\r\n        ctx.beginPath();\r\n        for(let a = 0; a < 4; a++){\r\n          const cos = Math.cos(a * Math.PI \/ 2), sin = Math.sin(a * Math.PI \/ 2);\r\n          ctx.moveTo(0, 0);\r\n          ctx.lineTo((s * cos - s * sin), (s * sin + s * cos));\r\n        }\r\n        ctx.stroke();\r\n\r\n        ctx.beginPath();\r\n        ctx.arc(0, 0, 1.8, 0, Math.PI * 2);\r\n        ctx.fillStyle = `rgba(${A},${blink})`;\r\n        ctx.fill();\r\n        ctx.restore();\r\n      }\r\n    }\r\n\r\n    const drones = Array.from({ length: 4 }, () => new Drone(true));\r\n\r\n    \/* 4. COORDINATE MARKERS *\/\r\n    const markers = [];\r\n    function spawnMarker(){\r\n      if(markers.length >= 5) return;\r\n      markers.push({\r\n        x: rnd(60, W - 60), y: rnd(60, H - 60), life: 1,\r\n        lat: (rnd(30, 60)).toFixed(4), lon: (rnd(60, 150)).toFixed(4),\r\n        type: Math.random() > 0.5 ? 'TGT' : 'WPT'\r\n      });\r\n    }\r\n    function drawMarkers(){\r\n      for(let i = markers.length - 1; i >= 0; i--){\r\n        const m = markers[i];\r\n        m.life -= 0.0025;\r\n        if(m.life <= 0){ markers.splice(i, 1); continue; }\r\n        const a = Math.min(m.life * 4, 1) * 0.55;\r\n        const sz = 9, b = 5;\r\n\r\n        ctx.strokeStyle = `rgba(${A},${a})`;\r\n        ctx.lineWidth = 0.7;\r\n        ctx.beginPath();\r\n        [[-1,-1],[1,-1],[1,1],[-1,1]].forEach(([sx, sy]) => {\r\n          ctx.moveTo(m.x + sx * sz, m.y + sy * (sz - b));\r\n          ctx.lineTo(m.x + sx * sz, m.y + sy * sz);\r\n          ctx.lineTo(m.x + sx * (sz - b), m.y + sy * sz);\r\n        });\r\n        ctx.stroke();\r\n\r\n        ctx.fillStyle = `rgba(${A},${a * 0.9})`;\r\n        ctx.font = '8px Courier New';\r\n        ctx.fillText(`${m.type} ${m.lat}\u00b0,${m.lon}\u00b0`, m.x + sz + 5, m.y + 3);\r\n      }\r\n    }\r\n\r\n    \/* 5. SCAN LINE (Zero allocation) *\/\r\n    let scanY = 0, scanDir = 1;\r\n    function drawScanLine(){\r\n      ctx.fillStyle = COLOR_SCAN_BG;\r\n      ctx.fillRect(0, scanY - 15, W, 30);\r\n      ctx.strokeStyle = COLOR_SCAN_LINE;\r\n      ctx.lineWidth = 0.5;\r\n      ctx.beginPath();\r\n      ctx.moveTo(0, scanY); ctx.lineTo(W, scanY);\r\n      ctx.stroke();\r\n    }\r\n\r\n    \/* 6. INTER-DRONE SIGNAL ARCS *\/\r\n    function drawLinks(){\r\n      const maxDist = Math.min(W, H) * 0.55;\r\n      ctx.lineWidth = 0.5;\r\n      ctx.setLineDash([3, 7]);\r\n      for(let i = 0; i < drones.length; i++){\r\n        for(let j = i + 1; j < drones.length; j++){\r\n          const dx = drones[j].x - drones[i].x;\r\n          const dy = drones[j].y - drones[i].y;\r\n          const dist = Math.sqrt(dx * dx + dy * dy);\r\n          if(dist > maxDist) continue;\r\n          ctx.strokeStyle = `rgba(${A},${(1 - dist \/ maxDist) * 0.18})`;\r\n          ctx.beginPath();\r\n          ctx.moveTo(drones[i].x, drones[i].y);\r\n          ctx.lineTo(drones[j].x, drones[j].y);\r\n          ctx.stroke();\r\n        }\r\n      }\r\n      ctx.setLineDash([]);\r\n    }\r\n\r\n    \/* 7. AMBIENT PARTICLES (Batched: 1 fill call instead of 40) *\/\r\n    const particles = Array.from({ length: 35 }, () => ({\r\n      x: rnd(0, 1), y: rnd(0, 1),\r\n      vx: rnd(-0.0003, 0.0003), vy: rnd(-0.0003, 0.0003),\r\n      r: rnd(0.8, 1.6)\r\n    }));\r\n\r\n    function drawParticles(){\r\n      ctx.fillStyle = COLOR_PARTICLE;\r\n      ctx.beginPath();\r\n      for(let i = 0; i < particles.length; i++){\r\n        const p = particles[i];\r\n        p.x += p.vx; p.y += p.vy;\r\n        if(p.x < 0) p.x = 1; if(p.x > 1) p.x = 0;\r\n        if(p.y < 0) p.y = 1; if(p.y > 1) p.y = 0;\r\n        ctx.moveTo(p.x * W + p.r, p.y * H);\r\n        ctx.arc(p.x * W, p.y * H, p.r, 0, Math.PI * 2);\r\n      }\r\n      ctx.fill();\r\n    }\r\n\r\n    \/* 8. CORNER BRACKETS *\/\r\n    function drawFrame(){\r\n      const pad = 18, len = 28;\r\n      ctx.strokeStyle = COLOR_FRAME;\r\n      ctx.lineWidth = 1.5;\r\n      ctx.beginPath();\r\n      \/\/ Top Left\r\n      ctx.moveTo(pad, pad + len); ctx.lineTo(pad, pad); ctx.lineTo(pad + len, pad);\r\n      \/\/ Top Right\r\n      ctx.moveTo(W - pad - len, pad); ctx.lineTo(W - pad, pad); ctx.lineTo(W - pad, pad + len);\r\n      \/\/ Bottom Left\r\n      ctx.moveTo(pad, H - pad - len); ctx.lineTo(pad, H - pad); ctx.lineTo(pad + len, H - pad);\r\n      \/\/ Bottom Right\r\n      ctx.moveTo(W - pad - len, H - pad); ctx.lineTo(W - pad, H - pad); ctx.lineTo(W - pad, H - pad - len);\r\n      ctx.stroke();\r\n    }\r\n\r\n    \/* 9. HUD UPDATE (Updated via lightweight timer, not animation loop) *\/\r\n    let lastHud = 0;\r\n    function updateHUD(now){\r\n      if(now - lastHud < 1000) return; \/\/ Update once every 1000ms\r\n      lastHud = now;\r\n\r\n      const t = Math.floor((now - startTime) \/ 1000);\r\n      const h = String(Math.floor(t \/ 3600)).padStart(2, '0');\r\n      const m = String(Math.floor((t % 3600) \/ 60)).padStart(2, '0');\r\n      const s = String(t % 60).padStart(2, '0');\r\n\r\n      if(domUptime) domUptime.textContent = `${h}:${m}:${s}`;\r\n      if(domSpeed)  domSpeed.textContent  = `${(18 + Math.sin(now \/ 3100) * 1.5).toFixed(1)} M\/S`;\r\n      if(domLat)    domLat.textContent    = `${(45.4215 + Math.sin(now \/ 9000) * 0.0012).toFixed(4)}\u00b0N`;\r\n      if(domLon)    domLon.textContent    = `${(75.6972 + Math.cos(now \/ 7800) * 0.0012).toFixed(4)}\u00b0W`;\r\n    }\r\n\r\n    \/* MAIN ANIMATION LOOP *\/\r\n    function tick(){\r\n      if(!isVisible){\r\n        animId = null;\r\n        return; \/\/ Auto-pause when off-screen\r\n      }\r\n\r\n      animId = requestAnimationFrame(tick);\r\n      ctx.fillStyle = '#080B10';\r\n      ctx.fillRect(0, 0, W, H);\r\n\r\n      gridOff += 0.15;\r\n      drawGrid();\r\n      drawParticles();\r\n\r\n      radarAngle += 0.0075;\r\n      drawRadar();\r\n\r\n      if(frame % 14 === 0 && Math.random() > 0.35) spawnBlip();\r\n\r\n      scanY += scanDir * 0.5;\r\n      if(scanY > H + 25 || scanY < -25) scanDir *= -1;\r\n      drawScanLine();\r\n\r\n      drawLinks();\r\n      for(let i = 0; i < drones.length; i++){\r\n        drones[i].update();\r\n        drones[i].draw();\r\n      }\r\n\r\n      if(frame % 90 === 0) spawnMarker();\r\n      drawMarkers();\r\n\r\n      drawFrame();\r\n\r\n      updateHUD(Date.now());\r\n      frame++;\r\n    }\r\n    tick();\r\n\r\n  } \/\/ end initOptimizedAnimation\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4bd9056 e-flex e-con-boxed e-con e-child\" data-id=\"4bd9056\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd40b3b elementor-widget elementor-widget-heading\" data-id=\"bd40b3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">About Us<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-741a900 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"741a900\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Volatus Aerospace is shaping the global landscape of unmanned flight through precision engineering, uncompromising safety, and a legacy of aeronautical excellence.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f7f127 elementor-mobile-align-center elementor-align-center elementor-widget elementor-widget-button\" data-id=\"3f7f127\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/about-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Know more<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6aebd60 e-flex e-con-boxed e-con e-parent\" data-id=\"6aebd60\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d1ae937 e-con-full e-flex e-con e-child\" data-id=\"d1ae937\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d69a5e1 elementor-widget elementor-widget-heading\" data-id=\"d69a5e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Contact Us <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-143dddf elementor-widget elementor-widget-text-editor\" data-id=\"143dddf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tOur global team is on standby. Reach out for fleet solutions, investor relations, or specialized aerospace inquiries.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71920c3 elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"71920c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/volatusaerospace.com\/fr-ca\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contact Details<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-58d914c e-con-full e-flex e-con e-child\" data-id=\"58d914c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b97891 elementor-widget elementor-widget-image\" data-id=\"7b97891\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"308\" height=\"162\" src=\"https:\/\/volatusaerospace.com\/wp-content\/uploads\/2026\/04\/world-background.svg\" class=\"attachment-large size-large wp-image-5823\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez le futur de l'aviation. Volatus Aerospace propose un \u00e9cosyst\u00e8me complet : de la fabrication de drones avanc\u00e9s et des technologies de d\u00e9fense \u00e0 la formation de pilotes d'\u00e9lite et \u00e0 la cartographie a\u00e9rienne.<\/p>","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"class_list":["post-27505","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/pages\/27505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/comments?post=27505"}],"version-history":[{"count":200,"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/pages\/27505\/revisions"}],"predecessor-version":[{"id":37272,"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/pages\/27505\/revisions\/37272"}],"wp:attachment":[{"href":"https:\/\/volatusaerospace.com\/fr-ca\/wp-json\/wp\/v2\/media?parent=27505"}],"curies":[{"name":"Bien jou\u00e9","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}