{"id":7,"date":"2026-04-27T19:17:00","date_gmt":"2026-04-27T19:17:00","guid":{"rendered":"https:\/\/guinault.grabuge.dev\/?page_id=7"},"modified":"2026-04-27T19:24:29","modified_gmt":"2026-04-27T19:24:29","slug":"elementor-7","status":"publish","type":"page","link":"https:\/\/guinault.grabuge.dev\/","title":{"rendered":"Elementor #7"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7\" class=\"elementor elementor-7\">\n\t\t\t\t<div class=\"elementor-element elementor-element-67e9038 e-con-full e-flex e-con e-parent\" data-id=\"67e9038\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bf45a49 elementor-widget elementor-widget-html\" data-id=\"bf45a49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n<title>GUINAULT \u2014 Aircraft Ground Energy<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;1,9..40,300&family=DM+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\n\n<style>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   TOKENS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n:root {\n  --night:  #070E1C;\n  --navy:   #0A1628;\n  --ink:    #0D1E38;\n  --blue:   #1B4B8E;\n  --sky:    #2E7DE0;\n  --glow:   #4A9AFF;\n  --white:  #FFFFFF;\n  --cream:  #F3F0E8;\n  --warm:   #EAE5D8;\n  --smoke:  #F8F6F2;\n  --text:   #0F0F0F;\n  --mid:    #52525B;\n  --ghost:  #A1A1AA;\n  --line:   #E4E0D8;\n\n  --f-head: 'Bricolage Grotesque', sans-serif;\n  --f-body: 'DM Sans', sans-serif;\n  --f-mono: 'DM Mono', monospace;\n\n  --ease:   cubic-bezier(0.16, 1, 0.3, 1);\n  --ease2:  cubic-bezier(0.77, 0, 0.18, 1);\n  --spring: cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RESET\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nhtml { scroll-behavior: smooth; overflow-x: hidden; font-size: 16px; }\nbody {\n  font-family: var(--f-body);\n  background: var(--white);\n  color: var(--text);\n  overflow-x: hidden;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\nbutton { border: none; outline: none; cursor: pointer; background: none; }\na { text-decoration: none; color: inherit; }\nimg { display: block; max-width: 100%; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   LOADER\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n#loader {\n  position: fixed; inset: 0;\n  background: var(--night);\n  z-index: 9999;\n  display: flex; flex-direction: column;\n  align-items: center; justify-content: center;\n  gap: 24px;\n  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);\n}\n#loader.out {\n  opacity: 0;\n  pointer-events: none;\n  transform: scale(0.98);\n}\n.loader-logo {\n  font-family: var(--f-head);\n  font-weight: 800;\n  font-size: clamp(36px, 10vw, 64px);\n  color: var(--white);\n  letter-spacing: -0.03em;\n  opacity: 0;\n  transform: translateY(16px);\n  animation: loaderIn 0.8s 0.2s var(--ease) forwards;\n}\n.loader-sub {\n  font-family: var(--f-mono);\n  font-size: 11px;\n  letter-spacing: 0.16em;\n  text-transform: uppercase;\n  color: rgba(255,255,255,0.3);\n  opacity: 0;\n  animation: loaderIn 0.8s 0.5s var(--ease) forwards;\n}\n.loader-bar {\n  width: 160px; height: 1px;\n  background: rgba(255,255,255,0.08);\n  position: relative;\n  overflow: hidden;\n}\n.loader-bar::after {\n  content: '';\n  position: absolute; top: 0; left: -100%;\n  width: 100%; height: 100%;\n  background: linear-gradient(90deg, transparent, var(--glow), transparent);\n  animation: loaderBar 1.2s 0.3s var(--ease2) forwards;\n}\n@keyframes loaderBar {\n  0%   { left: -100%; }\n  100% { left: 100%; }\n}\n@keyframes loaderIn {\n  to { opacity: 1; transform: translateY(0); }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PROGRESS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n#progress {\n  position: fixed; top: 0; left: 0; right: 0;\n  height: 2px; z-index: 200;\n  background: linear-gradient(90deg, var(--sky), var(--glow));\n  transform-origin: left;\n  transform: scaleX(0);\n  transition: transform 0.08s linear;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   CURSOR (desktop only)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.csr {\n  width: 10px; height: 10px;\n  background: var(--sky);\n  border-radius: 50%;\n  position: fixed; top: 0; left: 0;\n  pointer-events: none; z-index: 9997;\n  transform: translate(-50%,-50%);\n  mix-blend-mode: difference;\n  transition: width 0.3s var(--spring), height 0.3s var(--spring);\n}\n.csr-r {\n  width: 40px; height: 40px;\n  border: 1px solid rgba(46,125,224,0.3);\n  border-radius: 50%;\n  position: fixed; top: 0; left: 0;\n  pointer-events: none; z-index: 9996;\n  transform: translate(-50%,-50%);\n  transition: transform 0.5s var(--ease), width 0.4s var(--spring), height 0.4s var(--spring), border-color 0.3s;\n}\n.csr.hov { width: 6px; height: 6px; }\n.csr-r.hov { width: 60px; height: 60px; border-color: rgba(46,125,224,0.5); }\n@media (hover: none) { .csr, .csr-r { display: none; } }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   NAV\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.nav {\n  position: fixed; top: 0; left: 0; right: 0; z-index: 100;\n  height: 68px;\n  display: flex; align-items: center; justify-content: space-between;\n  padding: 0 24px;\n  transition: background 0.4s, backdrop-filter 0.4s, height 0.4s var(--ease);\n}\n.nav.solid {\n  background: rgba(7,14,28,0.92);\n  backdrop-filter: blur(24px);\n  -webkit-backdrop-filter: blur(24px);\n  height: 58px;\n}\n.nav-logo {\n  font-family: var(--f-head);\n  font-weight: 800;\n  font-size: 22px;\n  color: var(--white);\n  letter-spacing: -0.03em;\n  line-height: 1;\n  position: relative;\n  z-index: 102;\n}\n.nav-logo small {\n  display: block;\n  font-family: var(--f-mono);\n  font-size: 8px;\n  letter-spacing: 0.18em;\n  text-transform: uppercase;\n  color: rgba(255,255,255,0.3);\n  font-weight: 400;\n  margin-top: 3px;\n}\n.nav-actions { display: flex; align-items: center; gap: 14px; position: relative; z-index: 102; }\n.nav-btn {\n  height: 40px; padding: 0 22px;\n  background: var(--white);\n  color: var(--night);\n  font-family: var(--f-mono);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  border-radius: 2px;\n  display: flex; align-items: center; gap: 7px;\n  transition: all 0.3s var(--ease);\n  position: relative; overflow: hidden;\n}\n.nav-btn::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: var(--sky);\n  transform: translateX(-101%);\n  transition: transform 0.35s var(--ease2);\n}\n.nav-btn:hover::before { transform: translateX(0); }\n.nav-btn span { position: relative; z-index: 1; }\n.nav-btn:hover { color: white; }\n.burger {\n  width: 38px; height: 38px;\n  display: flex; flex-direction: column;\n  align-items: center; justify-content: center; gap: 6px;\n  cursor: pointer;\n}\n.burger-line {\n  height: 1.5px; border-radius: 2px;\n  background: white;\n  transition: all 0.4s var(--ease2);\n}\n.burger-line:nth-child(1) { width: 22px; }\n.burger-line:nth-child(2) { width: 14px; margin-left: auto; }\n.burger-line:nth-child(3) { width: 22px; }\n.burger.open .burger-line:nth-child(1) { width: 22px; transform: translateY(7.5px) rotate(45deg); }\n.burger.open .burger-line:nth-child(2) { width: 0; opacity: 0; }\n.burger.open .burger-line:nth-child(3) { width: 22px; transform: translateY(-7.5px) rotate(-45deg); }\n\n\/* Fullscreen menu *\/\n.nav-menu {\n  position: fixed; inset: 0; z-index: 101;\n  background: var(--night);\n  display: flex; flex-direction: column; justify-content: center;\n  padding: 80px 32px 48px;\n  clip-path: circle(0% at calc(100% - 43px) 29px);\n  transition: clip-path 0.7s var(--ease2);\n}\n.nav-menu.open { clip-path: circle(150% at calc(100% - 43px) 29px); }\n.menu-item {\n  font-family: var(--f-head);\n  font-weight: 800;\n  font-size: clamp(36px, 10vw, 60px);\n  color: rgba(255,255,255,0.1);\n  line-height: 1.15;\n  padding: 10px 0;\n  border-bottom: 1px solid rgba(255,255,255,0.04);\n  cursor: pointer;\n  opacity: 0;\n  transform: translateX(-30px);\n  transition: color 0.25s, opacity 0.5s var(--ease), transform 0.5s var(--ease);\n  letter-spacing: -0.02em;\n}\n.nav-menu.open .menu-item { opacity: 1; transform: translateX(0); }\n.nav-menu.open .menu-item:nth-child(1) { transition-delay: 0.1s; }\n.nav-menu.open .menu-item:nth-child(2) { transition-delay: 0.16s; }\n.nav-menu.open .menu-item:nth-child(3) { transition-delay: 0.22s; }\n.nav-menu.open .menu-item:nth-child(4) { transition-delay: 0.28s; }\n.nav-menu.open .menu-item:nth-child(5) { transition-delay: 0.34s; }\n.menu-item:hover { color: white; }\n.menu-langs {\n  margin-top: 36px;\n  display: flex; gap: 8px; flex-wrap: wrap;\n  opacity: 0; transition: opacity 0.4s 0.4s;\n}\n.nav-menu.open .menu-langs { opacity: 1; }\n.mlang {\n  font-family: var(--f-mono);\n  font-size: 10px;\n  padding: 5px 12px;\n  border: 1px solid rgba(255,255,255,0.08);\n  border-radius: 2px;\n  color: rgba(255,255,255,0.25);\n  cursor: pointer;\n  transition: all 0.2s;\n}\n.mlang.on, .mlang:hover { border-color: rgba(255,255,255,0.3); color: rgba(255,255,255,0.7); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HERO\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.hero {\n  height: 100svh; min-height: 680px;\n  background: var(--night);\n  position: relative; overflow: hidden;\n  display: flex; flex-direction: column; justify-content: flex-end;\n  padding: 0 24px 56px;\n}\n\n\/* Particle canvas *\/\n#heroCanvas {\n  position: absolute; inset: 0;\n  width: 100%; height: 100%;\n  pointer-events: none;\n}\n\n\/* Deep gradient *\/\n.hero-grad {\n  position: absolute; inset: 0;\n  background:\n    radial-gradient(ellipse 100% 70% at 60% 30%, rgba(27,75,142,0.6) 0%, transparent 55%),\n    radial-gradient(ellipse 60% 40% at 10% 85%, rgba(46,125,224,0.15) 0%, transparent 50%),\n    radial-gradient(ellipse 40% 50% at 90% 70%, rgba(74,154,255,0.1) 0%, transparent 50%),\n    linear-gradient(175deg, #07101E 0%, #0A1628 50%, #070E1C 100%);\n  animation: gradShift 10s ease-in-out infinite alternate;\n}\n@keyframes gradShift {\n  0%   { filter: brightness(1) saturate(1); }\n  100% { filter: brightness(1.12) saturate(1.2); }\n}\n\n\/* Grid overlay *\/\n.hero-grid {\n  position: absolute; inset: 0;\n  background-image:\n    linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),\n    linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);\n  background-size: 60px 60px;\n  mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 20%, transparent 80%);\n  -webkit-mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 20%, transparent 80%);\n  animation: gridPan 20s linear infinite;\n}\n@keyframes gridPan {\n  0%   { transform: translate(0,0); }\n  100% { transform: translate(60px,60px); }\n}\n\n\/* Scan line effect *\/\n.hero-scan {\n  position: absolute; inset: 0;\n  background: linear-gradient(\n    to bottom,\n    transparent 0%,\n    rgba(46,125,224,0.015) 50%,\n    transparent 100%\n  );\n  background-size: 100% 4px;\n  animation: scanMove 3s linear infinite;\n  pointer-events: none;\n}\n@keyframes scanMove {\n  0%   { transform: translateY(-100%); }\n  100% { transform: translateY(100%); }\n}\n\n\/* Vertical accent lines *\/\n.hero-vlines {\n  position: absolute; inset: 0;\n  display: flex; gap: 0;\n  pointer-events: none;\n}\n.hero-vline {\n  flex: 1;\n  border-right: 1px solid rgba(255,255,255,0.06);\n}\n\n\/* Content *\/\n.hero-content { position: relative; z-index: 2; }\n\n.hero-eyebrow {\n  font-family: var(--f-mono);\n  font-size: 10px;\n  letter-spacing: 0.18em;\n  text-transform: uppercase;\n  color: rgba(255,255,255,0.65);\n  margin-bottom: 20px;\n  display: flex; align-items: center; gap: 12px;\n  opacity: 0;\n  animation: fadeSlideUp 0.9s 1.4s var(--ease) forwards;\n}\n.hero-eyebrow-line {\n  flex: 1; max-width: 32px; height: 1px;\n  background: rgba(255,255,255,0.2);\n  transform-origin: left;\n  transform: scaleX(0);\n  animation: lineDraw 0.6s 1.4s var(--ease) forwards;\n}\n@keyframes lineDraw { to { transform: scaleX(1); } }\n.hero-eyebrow-dot {\n  width: 5px; height: 5px; border-radius: 50%;\n  background: var(--sky);\n  opacity: 0;\n  animation: popIn 0.4s 2s var(--spring) forwards;\n}\n@keyframes popIn { to { opacity: 1; transform: scale(1); } }\n\n.hero-h1 {\n  font-family: var(--f-head);\n  font-weight: 800;\n  font-size: clamp(40px, 11vw, 80px);\n  line-height: 1.0;\n  letter-spacing: -0.035em;\n  color: var(--white);\n  margin-bottom: 28px;\n  overflow: hidden;\n}\n.word {\n  display: inline-block;\n  opacity: 0;\n  transform: translateY(70%) skewY(4deg);\n  animation: wordReveal 0.8s var(--ease) forwards;\n}\n.space { display: inline-block; width: 0.25em; }\n.hero-h1-dim { color: rgba(255,255,255,0.55); }\n\n@keyframes wordReveal {\n  to { opacity: 1; transform: translateY(0) skewY(0deg); }\n}\n\n.hero-desc {\n  font-size: 14px;\n  color: rgba(255,255,255,0.75);\n  line-height: 1.75;\n  max-width: 340px;\n  margin-bottom: 36px;\n  opacity: 0;\n  animation: fadeSlideUp 0.8s 2.0s var(--ease) forwards;\n}\n.hero-ctas {\n  display: flex; gap: 10px; flex-wrap: wrap;\n  opacity: 0;\n  animation: fadeSlideUp 0.8s 2.2s var(--ease) forwards;\n}\n@keyframes fadeSlideUp {\n  0%   { opacity: 0; transform: translateY(20px); }\n  100% { opacity: 1; transform: translateY(0); }\n}\n\n.btn-p {\n  height: 50px; padding: 0 26px;\n  background: var(--white); color: var(--night);\n  font-family: var(--f-mono); font-size: 11px;\n  font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase;\n  border-radius: 2px; display: inline-flex; align-items: center; gap: 8px;\n  transition: all 0.35s var(--ease);\n  position: relative; overflow: hidden;\n}\n.btn-p::after {\n  content: '';\n  position: absolute; inset: 0;\n  background: var(--sky);\n  transform: translateX(-101%);\n  transition: transform 0.4s var(--ease2);\n  z-index: 0;\n}\n.btn-p:hover::after { transform: translateX(0); }\n.btn-p:hover { color: white; box-shadow: 0 16px 40px rgba(46,125,224,0.4); transform: translateY(-3px); }\n.btn-p > * { position: relative; z-index: 1; }\n\n.btn-o {\n  height: 50px; padding: 0 26px;\n  background: transparent; color: rgba(255,255,255,0.6);\n  font-family: var(--f-mono); font-size: 11px;\n  font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase;\n  border-radius: 2px; border: 1px solid rgba(255,255,255,0.15);\n  display: inline-flex; align-items: center; gap: 8px;\n  transition: all 0.3s var(--ease);\n}\n.btn-o:hover { border-color: rgba(255,255,255,0.5); color: white; transform: translateY(-3px); }\n\n\/* Scroll indicator *\/\n.hero-scroll {\n  position: absolute; bottom: 56px; right: 24px;\n  display: flex; flex-direction: column; align-items: center; gap: 8px;\n  opacity: 0; animation: fadeIn 1s 2.6s var(--ease) forwards;\n  z-index: 2;\n}\n.hero-scroll-wheel {\n  width: 22px; height: 36px;\n  border: 1px solid rgba(255,255,255,0.35);\n  border-radius: 11px;\n  display: flex; justify-content: center; padding-top: 6px;\n}\n.hero-scroll-dot {\n  width: 3px; height: 6px;\n  background: rgba(255,255,255,0.4);\n  border-radius: 2px;\n  animation: scrollDot 2s 2.8s ease-in-out infinite;\n}\n@keyframes scrollDot {\n  0%, 100% { transform: translateY(0); opacity: 0.4; }\n  50%       { transform: translateY(10px); opacity: 0.8; }\n}\n.hero-scroll-text {\n  font-family: var(--f-mono); font-size: 8px;\n  letter-spacing: 0.12em; text-transform: uppercase;\n  color: rgba(255,255,255,0.45);\n  writing-mode: vertical-rl;\n}\n@keyframes fadeIn { to { opacity: 1; } }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MARQUEE STRIP\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.marquee-strip {\n  background: var(--sky);\n  overflow: hidden;\n  height: 40px;\n  display: flex; align-items: center;\n}\n.marquee-track {\n  display: flex; gap: 0;\n  animation: marqueeScroll 18s linear infinite;\n  white-space: nowrap;\n  will-change: transform;\n}\n.marquee-item {\n  font-family: var(--f-mono);\n  font-size: 10px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: rgba(255,255,255,0.7);\n  padding: 0 32px;\n  display: flex; align-items: center; gap: 24px;\n  flex-shrink: 0;\n}\n.marquee-sep { opacity: 0.3; font-size: 14px; }\n@keyframes marqueeScroll {\n  from { transform: translateX(0); }\n  to   { transform: translateX(-50%); }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   STATS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.stats {\n  background: var(--smoke);\n  position: relative; overflow: hidden;\n}\n.stats-watermark {\n  position: absolute; bottom: -40px; right: -20px;\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(120px, 35vw, 260px);\n  color: rgba(10,22,40,0.04);\n  line-height: 1;\n  pointer-events: none;\n  letter-spacing: -0.04em;\n  user-select: none;\n}\n.stats-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1px; background: var(--line);\n}\n.stat-cell {\n  background: var(--smoke);\n  padding: 32px 20px 28px;\n  text-align: center;\n  position: relative; overflow: hidden;\n}\n.stat-cell::before {\n  content: '';\n  position: absolute; bottom: 0; left: 0; right: 0;\n  height: 2px;\n  background: linear-gradient(90deg, var(--sky), var(--glow));\n  transform: scaleX(0);\n  transition: transform 0.8s var(--ease);\n  transform-origin: left;\n}\n.stat-cell.vis::before { transform: scaleX(1); }\n.stat-n {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(44px, 12vw, 64px);\n  line-height: 1; color: var(--night);\n  letter-spacing: -0.04em; display: block;\n  margin-bottom: 6px;\n}\n.stat-l {\n  font-family: var(--f-mono); font-size: 9px;\n  letter-spacing: 0.12em; text-transform: uppercase;\n  color: var(--ghost); line-height: 1.5;\n}\n.stats-line {\n  padding: 28px 24px;\n  border-top: 1px solid var(--line);\n  font-family: var(--f-head); font-weight: 700;\n  font-size: clamp(20px, 5vw, 28px);\n  color: var(--night); letter-spacing: -0.02em;\n  line-height: 1.25;\n  position: relative; z-index: 1;\n  font-weight: 800;\n}\n.stats-line em { font-style: normal; color: var(--sky); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   SECTION HEAD\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.sec-eye {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.16em; text-transform: uppercase;\n  color: var(--ghost); display: flex; align-items: center; gap: 10px;\n  margin-bottom: 14px;\n}\n.sec-eye::before {\n  content: ''; display: block;\n  width: 22px; height: 1px; background: var(--ghost);\n  flex-shrink: 0;\n}\n.sec-h {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(30px, 8vw, 48px);\n  line-height: 1.05; letter-spacing: -0.03em; color: var(--text);\n}\n.sec-h em { font-style: normal; color: var(--sky); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PRODUCTS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.products {\n  padding: 72px 0 64px;\n  background: var(--white);\n  overflow: hidden;\n}\n.products-hd { padding: 0 24px; margin-bottom: 40px; }\n.prod-scroll {\n  display: flex; gap: 14px;\n  padding: 8px 24px 20px;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.prod-scroll::-webkit-scrollbar { display: none; }\n\n.pcard {\n  flex: 0 0 272px;\n  scroll-snap-align: start;\n  background: var(--cream);\n  border: 1px solid var(--line);\n  border-radius: 6px;\n  overflow: hidden;\n  cursor: pointer;\n  transition: transform 0.45s var(--ease), box-shadow 0.45s var(--ease), border-color 0.3s;\n  position: relative;\n}\n.pcard:hover {\n  transform: translateY(-8px) scale(1.01);\n  box-shadow: 0 28px 60px rgba(10,22,40,0.16);\n  border-color: rgba(46,125,224,0.3);\n}\n.pcard-thumb {\n  height: 188px; position: relative; overflow: hidden;\n  display: flex; align-items: center; justify-content: center;\n}\n.pcard-bg {\n  position: absolute; inset: 0;\n  transition: transform 0.7s var(--ease);\n}\n.pcard:hover .pcard-bg { transform: scale(1.06); }\n.bg-gpu   { background: linear-gradient(135deg,#07101E 0%,#1B3A6E 60%,#0A1628 100%); }\n.bg-acu   { background: linear-gradient(135deg,#0A1628 0%,#1A3558 60%,#08111E 100%); }\n.bg-asu   { background: linear-gradient(135deg,#081420 0%,#142E50 60%,#07101C 100%); }\n.bg-combo { background: linear-gradient(135deg,#0A1428 0%,#1C2E4A 60%,#08101E 100%); }\n.bg-sa    { background: linear-gradient(135deg,#07101C 0%,#122040 60%,#07101A 100%); }\n.pcard-icon {\n  width: 52px; height: 52px;\n  border: 1px solid rgba(255,255,255,0.12);\n  border-radius: 4px;\n  display: flex; align-items: center; justify-content: center;\n  position: relative; z-index: 1;\n  background: rgba(255,255,255,0.04);\n  backdrop-filter: blur(4px);\n  transition: border-color 0.3s, transform 0.4s var(--spring);\n}\n.pcard:hover .pcard-icon { border-color: rgba(74,154,255,0.35); transform: scale(1.08); }\n.pcard-icon svg { width: 24px; height: 24px; opacity: 0.65; transition: opacity 0.3s; }\n.pcard:hover .pcard-icon svg { opacity: 1; }\n.pcard-badge {\n  position: absolute; top: 14px; right: 14px;\n  font-family: var(--f-mono); font-size: 9px;\n  letter-spacing: 0.08em; color: rgba(255,255,255,0.45);\n  background: rgba(255,255,255,0.06);\n  border: 1px solid rgba(255,255,255,0.1);\n  padding: 3px 9px; border-radius: 2px;\n  transition: background 0.3s, border-color 0.3s;\n}\n.pcard:hover .pcard-badge {\n  background: rgba(74,154,255,0.15);\n  border-color: rgba(74,154,255,0.3);\n  color: rgba(255,255,255,0.7);\n}\n.pcard-body { padding: 20px 20px 22px; }\n.pcard-name {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: 20px; color: var(--text);\n  letter-spacing: -0.02em; margin-bottom: 2px;\n}\n.pcard-sub {\n  font-family: var(--f-mono); font-size: 10px;\n  color: var(--ghost); letter-spacing: 0.05em; margin-bottom: 12px;\n}\n.pcard-desc {\n  font-size: 12px; color: var(--mid); line-height: 1.6; margin-bottom: 18px;\n}\n.pcard-cta {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.08em; color: var(--sky); text-transform: uppercase;\n  display: flex; align-items: center; gap: 6px;\n  transition: gap 0.3s var(--ease);\n}\n.pcard:hover .pcard-cta { gap: 12px; }\n\n.prod-dots {\n  display: flex; gap: 6px;\n  justify-content: center; padding: 4px 24px 0;\n}\n.p-dot {\n  height: 4px; border-radius: 2px;\n  background: var(--line); cursor: pointer;\n  transition: all 0.35s var(--ease);\n  width: 16px;\n}\n.p-dot.on { width: 28px; background: var(--night); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   SOLUTIONS \u2014 BENTO\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.solutions {\n  padding: 72px 0 0;\n  background: var(--cream);\n  overflow: hidden;\n}\n.solutions-hd { padding: 0 24px; margin-bottom: 36px; }\n.bento {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 2px;\n  background: var(--line);\n}\n.bento-item {\n  background: var(--white);\n  padding: 26px 20px;\n  cursor: pointer;\n  position: relative; overflow: hidden;\n  transition: background 0.4s var(--ease);\n}\n.bento-item:nth-child(1) { grid-column: 1 \/ -1; min-height: 180px; }\n.bento-item:nth-child(1) .bento-num { font-size: clamp(80px, 25vw, 160px); }\n.bento-flood {\n  position: absolute; inset: 0;\n  background: var(--night);\n  clip-path: circle(0% at 50% 50%);\n  transition: clip-path 0.6s var(--ease2);\n  z-index: 0;\n}\n.bento-item:hover .bento-flood { clip-path: circle(150% at 50% 50%); }\n.bento-inner { position: relative; z-index: 1; }\n.bento-num {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(64px, 20vw, 120px);\n  line-height: 0.9;\n  color: rgba(10,22,40,0.05);\n  letter-spacing: -0.04em;\n  position: absolute; bottom: 16px; right: 16px;\n  user-select: none; pointer-events: none;\n  transition: color 0.4s;\n}\n.bento-item:hover .bento-num { color: rgba(255,255,255,0.05); }\n.bento-icon {\n  width: 38px; height: 38px;\n  background: var(--cream);\n  border-radius: 3px;\n  display: flex; align-items: center; justify-content: center;\n  margin-bottom: 14px;\n  transition: background 0.4s, transform 0.4s var(--spring);\n}\n.bento-item:hover .bento-icon { background: rgba(255,255,255,0.1); transform: rotate(-6deg) scale(1.1); }\n.bento-icon svg { width: 18px; height: 18px; transition: opacity 0.3s; opacity: 0.6; }\n.bento-item:hover .bento-icon svg { opacity: 1; }\n.bento-title {\n  font-family: var(--f-head); font-weight: 700;\n  font-size: clamp(16px, 4vw, 20px); color: var(--text);\n  letter-spacing: -0.02em; margin-bottom: 6px;\n  transition: color 0.3s;\n}\n.bento-item:hover .bento-title { color: var(--white); }\n.bento-text {\n  font-size: 12px; color: var(--ghost); line-height: 1.5;\n  transition: color 0.3s;\n}\n.bento-item:hover .bento-text { color: rgba(255,255,255,0.45); }\n.bento-arrow {\n  margin-top: 18px; font-size: 18px;\n  color: var(--line);\n  display: inline-block;\n  transition: color 0.3s, transform 0.35s var(--ease);\n}\n.bento-item:hover .bento-arrow { color: rgba(255,255,255,0.3); transform: translate(6px, -2px); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ENTERPRISE \u2014 DARK IMMERSIVE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.enterprise {\n  background: var(--night);\n  padding: 72px 24px 64px;\n  position: relative; overflow: hidden;\n}\n.ent-bg-glow {\n  position: absolute;\n  width: 400px; height: 400px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(46,125,224,0.18) 0%, transparent 70%);\n  right: -100px; top: -100px;\n  animation: glowFloat 8s ease-in-out infinite alternate;\n  pointer-events: none;\n}\n@keyframes glowFloat {\n  0%   { transform: translate(0,0) scale(1); }\n  100% { transform: translate(-30px,30px) scale(1.1); }\n}\n.ent-bg-glow2 {\n  position: absolute;\n  width: 300px; height: 300px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(74,154,255,0.08) 0%, transparent 70%);\n  left: -80px; bottom: -80px;\n  animation: glowFloat 12s ease-in-out infinite alternate-reverse;\n  pointer-events: none;\n}\n.ent-tag {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: rgba(255,255,255,0.55);\n  display: flex; align-items: center; gap: 10px;\n  margin-bottom: 24px; position: relative; z-index: 1;\n}\n.ent-tag::before { content:''; width:20px; height:1px; background:rgba(255,255,255,0.15); }\n.ent-h {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(30px, 8vw, 52px);\n  line-height: 1.05; letter-spacing: -0.03em;\n  color: var(--white); margin-bottom: 20px;\n  position: relative; z-index: 1;\n}\n.ent-h span { color: rgba(255,255,255,0.45); }\n.ent-desc {\n  font-size: 14px; color: rgba(255,255,255,0.68);\n  line-height: 1.75; margin-bottom: 32px;\n  position: relative; z-index: 1;\n}\n.ent-visual {\n  aspect-ratio: 16\/9;\n  border-radius: 6px;\n  background: rgba(255,255,255,0.03);\n  border: 1px solid rgba(255,255,255,0.06);\n  display: flex; align-items: center; justify-content: center;\n  margin-bottom: 28px;\n  position: relative; overflow: hidden; z-index: 1;\n}\n.ent-visual-grid {\n  position: absolute; inset: 0;\n  background-image: linear-gradient(rgba(46,125,224,0.05) 1px,transparent 1px),\n                    linear-gradient(90deg,rgba(46,125,224,0.05) 1px,transparent 1px);\n  background-size: 40px 40px;\n}\n.ent-visual-label {\n  font-family: var(--f-mono); font-size: 10px;\n  color: rgba(255,255,255,0.12); letter-spacing: 0.1em;\n  text-transform: uppercase; position: relative; z-index: 1;\n}\n.ent-badges {\n  display: flex; gap: 8px; flex-wrap: wrap;\n  margin-bottom: 28px; position: relative; z-index: 1;\n}\n.badge {\n  height: 30px; padding: 0 13px;\n  border: 1px solid rgba(255,255,255,0.08);\n  border-radius: 2px; font-family: var(--f-mono);\n  font-size: 9px; letter-spacing: 0.08em;\n  color: rgba(255,255,255,0.25);\n  display: flex; align-items: center;\n  transition: all 0.25s var(--ease));\n  cursor: default;\n}\n.badge:hover { border-color: rgba(74,154,255,0.4); color: rgba(255,255,255,0.6); }\n.ent-link {\n  font-family: var(--f-mono); font-size: 11px;\n  letter-spacing: 0.08em; text-transform: uppercase;\n  color: rgba(255,255,255,0.4);\n  display: flex; align-items: center; gap: 10px;\n  cursor: pointer; transition: color 0.25s;\n  position: relative; z-index: 1;\n}\n.ent-link:hover { color: white; }\n.ent-link-bar {\n  width: 28px; height: 1px; background: currentColor;\n  transition: width 0.35s var(--ease);\n}\n.ent-link:hover .ent-link-bar { width: 44px; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   NEWS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.news {\n  padding: 72px 0 64px;\n  background: var(--white); overflow: hidden;\n}\n.news-hd {\n  padding: 0 24px; margin-bottom: 32px;\n  display: flex; align-items: flex-end; justify-content: space-between;\n}\n.news-all {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.08em; color: var(--sky);\n  text-transform: uppercase;\n}\n.news-scroll {\n  display: flex; gap: 14px;\n  padding: 4px 24px 4px;\n  overflow-x: auto; scroll-snap-type: x mandatory;\n  -webkit-overflow-scrolling: touch; scrollbar-width: none;\n}\n.news-scroll::-webkit-scrollbar { display: none; }\n.ncard {\n  flex: 0 0 280px; scroll-snap-align: start;\n  border: 1px solid var(--line); border-radius: 6px;\n  overflow: hidden; cursor: pointer;\n  transition: all 0.4s var(--ease);\n}\n.ncard:hover { transform: translateY(-5px); box-shadow: 0 20px 48px rgba(10,22,40,0.1); border-color: var(--night); }\n.ncard-img {\n  height: 148px; position: relative; overflow: hidden;\n  display: flex; align-items: center; justify-content: center;\n}\n.ncard-img-bg {\n  position: absolute; inset: 0;\n  transition: transform 0.6s var(--ease);\n}\n.ncard:hover .ncard-img-bg { transform: scale(1.06); }\n.ni1 { background: linear-gradient(135deg,#070E1C,#1B3A6E); }\n.ni2 { background: linear-gradient(135deg,#0A1628,#1A2E50); }\n.ni3 { background: linear-gradient(135deg,#080F1C,#142040); }\n.ncard-img-lbl {\n  font-family: var(--f-mono); font-size: 9px;\n  letter-spacing: 0.1em; color: rgba(255,255,255,0.18);\n  text-transform: uppercase; position: relative; z-index: 1;\n}\n.ncard-body { padding: 16px; }\n.ncard-meta { display: flex; gap: 8px; align-items: center; margin-bottom: 9px; }\n.ncard-tag {\n  font-family: var(--f-mono); font-size: 9px;\n  padding: 3px 8px; background: var(--cream);\n  border-radius: 2px; color: var(--mid); letter-spacing: 0.05em;\n}\n.ncard-date {\n  font-family: var(--f-mono); font-size: 9px;\n  color: var(--ghost); letter-spacing: 0.04em;\n}\n.ncard-title {\n  font-family: var(--f-head); font-weight: 700;\n  font-size: 14px; color: var(--text); line-height: 1.3;\n  letter-spacing: -0.01em;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   CTA\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.cta-sec {\n  background: var(--night);\n  padding: 72px 24px;\n  text-align: center; position: relative; overflow: hidden;\n}\n.cta-glow {\n  position: absolute; inset: 0;\n  background: radial-gradient(ellipse 80% 60% at 50% 50%, rgba(27,75,142,0.4) 0%, transparent 65%);\n  animation: gradShift 7s ease-in-out infinite alternate;\n}\n.cta-eye {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: rgba(255,255,255,0.6); margin-bottom: 20px;\n  position: relative; z-index: 1;\n}\n.cta-h {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: clamp(28px, 8vw, 48px);\n  letter-spacing: -0.03em; line-height: 1.05;\n  color: var(--white); margin-bottom: 14px;\n  position: relative; z-index: 1;\n}\n.cta-sub {\n  font-size: 13px; color: rgba(255,255,255,0.65);\n  line-height: 1.7; margin-bottom: 36px;\n  position: relative; z-index: 1;\n}\n.cta-btns {\n  display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\n  position: relative; z-index: 1;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   FOOTER\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfooter {\n  background: #07090F;\n  padding: 48px 24px 36px;\n}\n.footer-logo {\n  font-family: var(--f-head); font-weight: 800;\n  font-size: 26px; color: rgba(255,255,255,0.9);\n  letter-spacing: -0.03em; margin-bottom: 4px;\n}\n.footer-tag {\n  font-family: var(--f-mono); font-size: 10px;\n  letter-spacing: 0.1em; text-transform: uppercase;\n  color: rgba(255,255,255,0.2); margin-bottom: 28px;\n}\n.footer-grid {\n  display: grid; grid-template-columns: 1fr 1fr;\n  gap: 24px 16px; margin-bottom: 28px;\n}\n.fg-title {\n  font-family: var(--f-mono); font-size: 9px;\n  letter-spacing: 0.14em; text-transform: uppercase;\n  color: rgba(255,255,255,0.18); margin-bottom: 10px;\n}\n.fl {\n  font-size: 12px; color: rgba(255,255,255,0.35);\n  line-height: 2.0; display: block; cursor: pointer;\n  transition: color 0.2s;\n}\n.fl:hover { color: rgba(255,255,255,0.75); }\n.footer-langs {\n  display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 28px;\n  padding-top: 20px; border-top: 1px solid rgba(255,255,255,0.04);\n}\n.flang {\n  font-family: var(--f-mono); font-size: 10px;\n  padding: 4px 12px; border-radius: 2px;\n  border: 1px solid rgba(255,255,255,0.07);\n  color: rgba(255,255,255,0.2); cursor: pointer;\n  transition: all 0.2s;\n}\n.flang.on, .flang:hover { border-color: rgba(255,255,255,0.25); color: rgba(255,255,255,0.6); }\n.footer-copy {\n  font-family: var(--f-mono); font-size: 10px;\n  color: rgba(255,255,255,0.15); margin-bottom: 8px;\n}\n.footer-legals { display: flex; gap: 14px; flex-wrap: wrap; }\n.footer-legals a {\n  font-family: var(--f-mono); font-size: 10px;\n  color: rgba(255,255,255,0.15);\n  transition: color 0.2s;\n}\n.footer-legals a:hover { color: rgba(255,255,255,0.5); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   STICKY MOBILE BAR\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.sticky-mob {\n  position: fixed; bottom: 0; left: 0; right: 0;\n  background: rgba(7,14,28,0.96);\n  backdrop-filter: blur(24px);\n  -webkit-backdrop-filter: blur(24px);\n  padding: 10px 16px calc(10px + env(safe-area-inset-bottom));\n  display: flex; gap: 8px; z-index: 90;\n  border-top: 1px solid rgba(255,255,255,0.05);\n  transform: translateY(100%);\n  transition: transform 0.5s var(--ease);\n}\n.sticky-mob.show { transform: translateY(0); }\n.smob-btn {\n  flex: 1; height: 44px; border-radius: 2px;\n  font-family: var(--f-mono); font-size: 10px;\n  font-weight: 500; letter-spacing: 0.07em; text-transform: uppercase;\n  display: flex; align-items: center; justify-content: center; gap: 7px;\n  transition: all 0.25s var(--ease));\n  cursor: pointer;\n}\n.smob-btn.p { background: var(--white); color: var(--night); }\n.smob-btn.s {\n  background: transparent; color: rgba(255,255,255,0.45);\n  border: 1px solid rgba(255,255,255,0.1);\n}\n.smob-btn.p:active { background: var(--sky); color: white; transform: scale(0.98); }\n.smob-btn.s:active { border-color: rgba(255,255,255,0.35); color: white; transform: scale(0.98); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RIPPLE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.ripple-container { position: relative; overflow: hidden; }\n.ripple-wave {\n  position: absolute; border-radius: 50%;\n  background: rgba(255,255,255,0.15);\n  transform: scale(0); animation: rippleAnim 0.6s linear;\n  pointer-events: none;\n}\n@keyframes rippleAnim {\n  to { transform: scale(4); opacity: 0; }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   REVEAL ANIMATIONS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.rv {\n  opacity: 0; transform: translateY(36px);\n  transition: opacity 0.85s var(--ease), transform 0.85s var(--ease);\n}\n.rv.vis { opacity: 1; transform: translateY(0); }\n.rv-l {\n  opacity: 0; transform: translateX(-28px);\n  transition: opacity 0.75s var(--ease), transform 0.75s var(--ease);\n}\n.rv-l.vis { opacity: 1; transform: translateX(0); }\n.rv-s {\n  opacity: 0; transform: scale(0.93);\n  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);\n}\n.rv-s.vis { opacity: 1; transform: scale(1); }\n.d1 { transition-delay: 0.08s; }\n.d2 { transition-delay: 0.16s; }\n.d3 { transition-delay: 0.24s; }\n.d4 { transition-delay: 0.32s; }\n.d5 { transition-delay: 0.40s; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RESPONSIVE DESKTOP\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n@media (min-width: 768px) {\n  .nav { padding: 0 32px; }\n  .nav-desk {\n    display: flex; align-items: center; gap: 6px;\n  }\n  .nd-item {\n    font-family: var(--f-mono); font-size: 12px;\n    letter-spacing: 0.07em; text-transform: uppercase;\n    color: rgba(255,255,255,0.6); cursor: pointer;\n    transition: color 0.2s; padding: 6px 12px;\n    position: relative; border-radius: 2px;\n  }\n  .nd-item::after {\n    content: ''; position: absolute; bottom: 0; left: 12px; right: 12px;\n    height: 1px; background: white;\n    transform: scaleX(0); transform-origin: right;\n    transition: transform 0.3s var(--ease);\n  }\n  .nd-item:hover { color: white; }\n  .nd-item:hover::after { transform: scaleX(1); transform-origin: left; }\n  .burger { display: none; }\n  \/* Language selector desktop *\/\n  .nav-lang-desk {\n    display: flex; align-items: center; gap: 2px;\n    margin-left: 12px;\n    padding-left: 16px;\n    border-left: 1px solid rgba(255,255,255,0.12);\n  }\n  .nld {\n    font-family: var(--f-mono); font-size: 11px;\n    letter-spacing: 0.06em;\n    color: rgba(255,255,255,0.3); cursor: pointer;\n    padding: 4px 8px; border-radius: 2px;\n    transition: all 0.2s;\n    border: 1px solid transparent;\n  }\n  .nld.on { color: white; border-color: rgba(255,255,255,0.25); }\n  .nld:hover:not(.on) { color: rgba(255,255,255,0.7); }\n  .hero { padding: 0 48px 72px; }\n  .stats-grid { grid-template-columns: repeat(4,1fr); }\n  .products-hd { padding: 0 40px; }\n  .prod-scroll { padding: 8px 40px 20px; gap: 18px; }\n  .pcard { flex: 0 0 300px; }\n  .solutions-hd { padding: 0 40px; }\n  .bento { grid-template-columns: repeat(3,1fr); }\n  .bento-item:nth-child(1) { grid-column: 1 \/ -1; }\n  .news-hd { padding: 0 40px; }\n  .news-scroll { padding: 4px 40px; gap: 18px; }\n  .ncard { flex: 0 0 320px; }\n  .cta-sec { padding: 96px 48px; }\n  footer { padding: 60px 40px 44px; }\n  .footer-grid { grid-template-columns: repeat(4,1fr); }\n  .sticky-mob { display: none; }\n}\n@media (min-width: 1024px) {\n  .bento-item:nth-child(1) { grid-column: 1 \/ 2; grid-row: 1 \/ 3; }\n  .bento { grid-template-columns: 2fr 1fr 1fr; grid-template-rows: auto auto; }\n  .pcard { flex: 0 0 320px; }\n}\n<\/style>\n<\/head>\n<body>\n\n<!-- \u2500\u2500 LOADER \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 -->\n<div id=\"loader\">\n  <div class=\"loader-logo\">GUINAULT<\/div>\n  <div class=\"loader-bar\"><\/div>\n  <div class=\"loader-sub\">Aircraft Ground Energy<\/div>\n<\/div>\n\n<!-- \u2500\u2500 PROGRESS \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 -->\n<div id=\"progress\"><\/div>\n\n<!-- \u2500\u2500 CURSOR \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 -->\n<div class=\"csr\" id=\"csr\"><\/div>\n<div class=\"csr-r\" id=\"csrR\"><\/div>\n\n<!-- \u2500\u2500 NAV \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\u2500 -->\n<nav class=\"nav\" id=\"nav\">\n  <div class=\"nav-logo\">\n    GUINAULT\n    <small>Aircraft Ground Energy<\/small>\n  <\/div>\n  <div class=\"nav-desk\" id=\"navDesk\" style=\"display:none\">\n    <div class=\"nd-item\">Produits<\/div>\n    <div class=\"nd-item\">Solutions<\/div>\n    <div class=\"nd-item\">Entreprise<\/div>\n    <div class=\"nd-item\">Actualit\u00e9s<\/div>\n    <div class=\"nd-item\">Contact<\/div>\n    <div class=\"nav-lang-desk\">\n      <div class=\"nld on\">FR<\/div>\n      <div class=\"nld\">EN<\/div>\n      <div class=\"nld\">DE<\/div>\n      <div class=\"nld\">ES<\/div>\n      <div class=\"nld\">AR<\/div>\n      <div class=\"nld\">PT<\/div>\n    <\/div>\n  <\/div>\n  <div class=\"nav-actions\">\n    <button class=\"nav-btn ripple-container\" id=\"devisBtn\">\n      <span>\u2197<\/span><span>Devis<\/span>\n    <\/button>\n    <div class=\"burger\" id=\"burger\">\n      <div class=\"burger-line\"><\/div>\n      <div class=\"burger-line\"><\/div>\n      <div class=\"burger-line\"><\/div>\n    <\/div>\n  <\/div>\n<\/nav>\n\n<!-- \u2500\u2500 MENU OVERLAY \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 -->\n<div class=\"nav-menu\" id=\"navMenu\">\n  <div class=\"menu-item\">Produits<\/div>\n  <div class=\"menu-item\">Solutions<\/div>\n  <div class=\"menu-item\">Entreprise<\/div>\n  <div class=\"menu-item\">Actualit\u00e9s<\/div>\n  <div class=\"menu-item\">Contact<\/div>\n  <div class=\"menu-langs\">\n    <div class=\"mlang on\">FR<\/div>\n    <div class=\"mlang\">EN<\/div>\n    <div class=\"mlang\">DE<\/div>\n    <div class=\"mlang\">ES<\/div>\n    <div class=\"mlang\">AR<\/div>\n    <div class=\"mlang\">PT<\/div>\n  <\/div>\n<\/div>\n\n<!-- \u2500\u2500 HERO \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 -->\n<section class=\"hero\">\n  <canvas id=\"heroCanvas\"><\/canvas>\n  <div class=\"hero-grad\"><\/div>\n  <div class=\"hero-grid\"><\/div>\n  <div class=\"hero-scan\"><\/div>\n  <div class=\"hero-vlines\">\n    <div class=\"hero-vline\"><\/div><div class=\"hero-vline\"><\/div>\n    <div class=\"hero-vline\"><\/div><div class=\"hero-vline\"><\/div>\n    <div class=\"hero-vline\"><\/div>\n  <\/div>\n\n  <div class=\"hero-content\">\n    <div class=\"hero-eyebrow\">\n      <div class=\"hero-eyebrow-line\"><\/div>\n      <span>Solutions APU OFF \u00b7 Orl\u00e9ans, France<\/span>\n      <div class=\"hero-eyebrow-dot\"><\/div>\n    <\/div>\n\n    <h1 class=\"hero-h1\" id=\"heroH1\">\n      <!-- Filled by JS -->\n    <\/h1>\n\n    <p class=\"hero-desc\">\n      GPU \u00b7 ACU \u00b7 ASU \u00b7 Convertisseurs 400Hz.<br>\n      Alimenter les avions au sol sans leurs moteurs.\n    <\/p>\n\n    <div class=\"hero-ctas\">\n      <button class=\"btn-p ripple-container\">\n        <span>D\u00e9couvrir nos solutions<\/span>\n        <span>\u2192<\/span>\n      <\/button>\n      <button class=\"btn-o\">Voir les produits<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"hero-scroll\">\n    <div class=\"hero-scroll-wheel\">\n      <div class=\"hero-scroll-dot\"><\/div>\n    <\/div>\n    <div class=\"hero-scroll-text\">Scroll<\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 MARQUEE \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 -->\n<div class=\"marquee-strip\">\n  <div class=\"marquee-track\" id=\"marqueeTrack\">\n    <!-- filled by JS -->\n  <\/div>\n<\/div>\n\n<!-- \u2500\u2500 STATS \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 -->\n<section class=\"stats rv\">\n  <div class=\"stats-watermark\" aria-hidden=\"true\">APU<\/div>\n  <div class=\"stats-grid\">\n    <div class=\"stat-cell rv d1\">\n      <span class=\"stat-n\" data-target=\"70\" data-suffix=\"+\">0+<\/span>\n      <span class=\"stat-l\">Pays<br>desservis<\/span>\n    <\/div>\n    <div class=\"stat-cell rv d2\">\n      <span class=\"stat-n\" data-target=\"40\">0<\/span>\n      <span class=\"stat-l\">Ans<br>d'expertise<\/span>\n    <\/div>\n    <div class=\"stat-cell rv d3\">\n      <span class=\"stat-n\" data-target=\"300\" data-suffix=\"+\">0+<\/span>\n      <span class=\"stat-l\">A\u00e9roports<br>\u00e9quip\u00e9s<\/span>\n    <\/div>\n    <div class=\"stat-cell rv d4\">\n      <span class=\"stat-n\">100%<\/span>\n      <span class=\"stat-l\">Fab. France<br>Orl\u00e9ans<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"stats-line rv d2\">\n    R\u00e9duire les co\u00fbts d'exploitation<br>\n    et <em>l'empreinte carbone<\/em> de l'aviation au sol.\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 PRODUITS \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 -->\n<section class=\"products\">\n  <div class=\"products-hd\">\n    <div class=\"sec-eye rv\">Gamme produits<\/div>\n    <h2 class=\"sec-h rv d1\">Nos<br><em>\u00e9quipements<\/em><\/h2>\n  <\/div>\n  <div class=\"prod-scroll\" id=\"prodScroll\">\n    <div class=\"pcard rv\">\n      <div class=\"pcard-thumb\">\n        <div class=\"pcard-bg bg-gpu\"><\/div>\n        <div class=\"pcard-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\"><rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"2\"\/><path d=\"M12 6V2M12 22v-4M8 6V4M16 6V4M8 20v-2M16 20v-2\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n        <\/div>\n        <div class=\"pcard-badge\">90\u2013450 kVA<\/div>\n      <\/div>\n      <div class=\"pcard-body\">\n        <div class=\"pcard-name\">GPU<\/div>\n        <div class=\"pcard-sub\">Ground Power Unit<\/div>\n        <div class=\"pcard-desc\">Alimentation \u00e9lectrique des avions au sol. Diesel, \u00e9lectrique ou hybride.<\/div>\n        <div class=\"pcard-cta\">Voir la gamme <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"pcard rv d1\">\n      <div class=\"pcard-thumb\">\n        <div class=\"pcard-bg bg-acu\"><\/div>\n        <div class=\"pcard-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\"><path d=\"M12 2a10 10 0 100 20 10 10 0 000-20z\"\/><path d=\"M8 12H4M20 12h-4M12 4v2M12 18v2\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n        <\/div>\n        <div class=\"pcard-badge\">30\u2013120 kW<\/div>\n      <\/div>\n      <div class=\"pcard-body\">\n        <div class=\"pcard-name\">ACU \/ PCA<\/div>\n        <div class=\"pcard-sub\">Air Conditioning Unit<\/div>\n        <div class=\"pcard-desc\">Climatisation de cabine sans APU. Confort, \u00e9conomies, silence.<\/div>\n        <div class=\"pcard-cta\">Voir la gamme <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"pcard rv d2\">\n      <div class=\"pcard-thumb\">\n        <div class=\"pcard-bg bg-asu\"><\/div>\n        <div class=\"pcard-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\"><path d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg>\n        <\/div>\n        <div class=\"pcard-badge\">30\u201390 psi<\/div>\n      <\/div>\n      <div class=\"pcard-body\">\n        <div class=\"pcard-name\">ASU<\/div>\n        <div class=\"pcard-sub\">Air Start Unit<\/div>\n        <div class=\"pcard-desc\">D\u00e9marrage pneumatique des moteurs. Mobile ou int\u00e9gr\u00e9.<\/div>\n        <div class=\"pcard-cta\">Voir la gamme <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"pcard rv d3\">\n      <div class=\"pcard-thumb\">\n        <div class=\"pcard-bg bg-combo\"><\/div>\n        <div class=\"pcard-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"\/><\/svg>\n        <\/div>\n        <div class=\"pcard-badge\">Combin\u00e9<\/div>\n      <\/div>\n      <div class=\"pcard-body\">\n        <div class=\"pcard-name\">ACU\/GPU<\/div>\n        <div class=\"pcard-sub\">Combo \u00b7 Solution int\u00e9gr\u00e9e<\/div>\n        <div class=\"pcard-desc\">Alimentation \u00e9lectrique et climatisation en un seul \u00e9quipement.<\/div>\n        <div class=\"pcard-cta\">Voir la gamme <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"pcard rv d4\">\n      <div class=\"pcard-thumb\">\n        <div class=\"pcard-bg bg-sa\"><\/div>\n        <div class=\"pcard-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"\/><polyline points=\"17 6 23 6 23 12\"\/><\/svg>\n        <\/div>\n        <div class=\"pcard-badge\">400 Hz<\/div>\n      <\/div>\n      <div class=\"pcard-body\">\n        <div class=\"pcard-name\">SA<\/div>\n        <div class=\"pcard-sub\">Convertisseur de fr\u00e9quence<\/div>\n        <div class=\"pcard-desc\">Alimentation statique 400Hz pour passerelles et postes fixes.<\/div>\n        <div class=\"pcard-cta\">Voir la gamme <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"prod-dots\" id=\"prodDots\">\n    <div class=\"p-dot on\"><\/div>\n    <div class=\"p-dot\"><\/div>\n    <div class=\"p-dot\"><\/div>\n    <div class=\"p-dot\"><\/div>\n    <div class=\"p-dot\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 SOLUTIONS BENTO \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 -->\n<section class=\"solutions\">\n  <div class=\"solutions-hd\">\n    <div class=\"sec-eye rv\">Par b\u00e9n\u00e9fice client<\/div>\n    <h2 class=\"sec-h rv d1\">Vos besoins,<br>nos <em>r\u00e9ponses<\/em><\/h2>\n  <\/div>\n  <div class=\"bento\">\n    <div class=\"bento-item rv\">\n      <div class=\"bento-flood\"><\/div>\n      <div class=\"bento-inner\">\n        <div class=\"bento-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg>\n        <\/div>\n        <div class=\"bento-title\">D\u00e9carbonation<\/div>\n        <div class=\"bento-text\">R\u00e9duire l'empreinte carbone des op\u00e9rations au sol gr\u00e2ce aux solutions APU OFF<\/div>\n        <div class=\"bento-arrow\">\u2192<\/div>\n      <\/div>\n      <div class=\"bento-num\" aria-hidden=\"true\">01<\/div>\n    <\/div>\n    <div class=\"bento-item rv d1\">\n      <div class=\"bento-flood\"><\/div>\n      <div class=\"bento-inner\">\n        <div class=\"bento-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n        <\/div>\n        <div class=\"bento-title\">A\u00e9roportuaire<\/div>\n        <div class=\"bento-text\">\u00c9quipements fixes, passerelles et postes avions<\/div>\n        <div class=\"bento-arrow\">\u2192<\/div>\n      <\/div>\n      <div class=\"bento-num\" aria-hidden=\"true\">02<\/div>\n    <\/div>\n    <div class=\"bento-item rv d2\">\n      <div class=\"bento-flood\"><\/div>\n      <div class=\"bento-inner\">\n        <div class=\"bento-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg>\n        <\/div>\n        <div class=\"bento-title\">Militaire<\/div>\n        <div class=\"bento-text\">Solutions terrain, op\u00e9rations OTAN et forces arm\u00e9es<\/div>\n        <div class=\"bento-arrow\">\u2192<\/div>\n      <\/div>\n      <div class=\"bento-num\" aria-hidden=\"true\">03<\/div>\n    <\/div>\n    <div class=\"bento-item rv d3\">\n      <div class=\"bento-flood\"><\/div>\n      <div class=\"bento-inner\">\n        <div class=\"bento-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><path d=\"M14.7 6.3a1 1 0 010 1.4l-8 8a1 1 0 01-1.4 0l-2-2a1 1 0 011.4-1.4L6 13.6l7.3-7.3a1 1 0 011.4 0z\"\/><circle cx=\"12\" cy=\"12\" r=\"10\"\/><\/svg>\n        <\/div>\n        <div class=\"bento-title\">Maintenance<\/div>\n        <div class=\"bento-text\">SAV, pi\u00e8ces d\u00e9tach\u00e9es et assistance technique 24\/7<\/div>\n        <div class=\"bento-arrow\">\u2192<\/div>\n      <\/div>\n      <div class=\"bento-num\" aria-hidden=\"true\">04<\/div>\n    <\/div>\n    <div class=\"bento-item rv d4\">\n      <div class=\"bento-flood\"><\/div>\n      <div class=\"bento-inner\">\n        <div class=\"bento-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z\"\/><\/svg>\n        <\/div>\n        <div class=\"bento-title\">Services GSE<\/div>\n        <div class=\"bento-text\">Distributeurs et partenaires dans 70+ pays<\/div>\n        <div class=\"bento-arrow\">\u2192<\/div>\n      <\/div>\n      <div class=\"bento-num\" aria-hidden=\"true\">05<\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 ENTREPRISE \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 -->\n<section class=\"enterprise\">\n  <div class=\"ent-bg-glow\"><\/div>\n  <div class=\"ent-bg-glow2\"><\/div>\n  <div class=\"ent-tag rv\">L'entreprise<\/div>\n  <h2 class=\"ent-h rv d1\">\n    Fabriqu\u00e9 en France,<br>\n    <span>d\u00e9ploy\u00e9 dans le monde entier.<\/span>\n  <\/h2>\n  <p class=\"ent-desc rv d2\">\n    Depuis Orl\u00e9ans, GUINAULT d\u00e9veloppe et fabrique les \u00e9quipements APU OFF les plus avanc\u00e9s du march\u00e9. 40 ans d'innovation au service d'une aviation plus propre et plus efficace.\n  <\/p>\n  <div class=\"ent-visual rv-s d2\">\n    <div class=\"ent-visual-grid\"><\/div>\n    <div class=\"ent-visual-label\">[ Photo usine Orl\u00e9ans \u2014 \u00c0 remplacer ]<\/div>\n  <\/div>\n  <div class=\"ent-badges rv d3\">\n    <div class=\"badge\">ISO 9001<\/div>\n    <div class=\"badge\">CE<\/div>\n    <div class=\"badge\">NF<\/div>\n    <div class=\"badge\">RSE<\/div>\n    <div class=\"badge\">Made in France<\/div>\n  <\/div>\n  <div class=\"ent-link rv d4\">\n    <div class=\"ent-link-bar\"><\/div>\n    D\u00e9couvrir GUINAULT\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 NEWS \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 -->\n<section class=\"news\">\n  <div class=\"news-hd\">\n    <div>\n      <div class=\"sec-eye rv\">Actualit\u00e9s<\/div>\n      <h2 class=\"sec-h rv d1\">News<\/h2>\n    <\/div>\n    <div class=\"news-all rv d2\">Tout voir \u2192<\/div>\n  <\/div>\n  <div class=\"news-scroll\">\n    <div class=\"ncard rv\">\n      <div class=\"ncard-img\"><div class=\"ncard-img-bg ni1\"><\/div><div class=\"ncard-img-lbl\">Innovation<\/div><\/div>\n      <div class=\"ncard-body\">\n        <div class=\"ncard-meta\"><span class=\"ncard-tag\">Innovation<\/span><span class=\"ncard-date\">14 jan. 2026<\/span><\/div>\n        <div class=\"ncard-title\">Nouveau GPU \u00e9lectrique EGA \u2014 performance record \u00e0 140 kVA<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ncard rv d1\">\n      <div class=\"ncard-img\"><div class=\"ncard-img-bg ni2\"><\/div><div class=\"ncard-img-lbl\">Salon<\/div><\/div>\n      <div class=\"ncard-body\">\n        <div class=\"ncard-meta\"><span class=\"ncard-tag\">Salon<\/span><span class=\"ncard-date\">08 d\u00e9c. 2025<\/span><\/div>\n        <div class=\"ncard-title\">Inter Airport Europe 2025 \u2014 GUINAULT pr\u00e9sent \u00e0 Munich<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ncard rv d2\">\n      <div class=\"ncard-img\"><div class=\"ncard-img-bg ni3\"><\/div><div class=\"ncard-img-lbl\">Installation<\/div><\/div>\n      <div class=\"ncard-body\">\n        <div class=\"ncard-meta\"><span class=\"ncard-tag\">Installation<\/span><span class=\"ncard-date\">22 nov. 2025<\/span><\/div>\n        <div class=\"ncard-title\">60 GPU install\u00e9s \u00e0 l'a\u00e9roport de Riyad \u2014 partenariat Saudi Aramco<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 CTA \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\u2500 -->\n<section class=\"cta-sec\">\n  <div class=\"cta-glow\"><\/div>\n  <div class=\"cta-eye rv\">Passons \u00e0 l'action<\/div>\n  <h2 class=\"cta-h rv d1\">Discutons de<br>votre projet.<\/h2>\n  <p class=\"cta-sub rv d2\">Commercial \u00b7 SAV \u00b7 Pi\u00e8ces \u00b7 Recrutement<br>R\u00e9ponse sous 48h.<\/p>\n  <div class=\"cta-btns rv d3\">\n    <button class=\"btn-p ripple-container\"><span>Contacter un expert<\/span><\/button>\n    <button class=\"btn-o\">Demander un devis<\/button>\n  <\/div>\n<\/section>\n\n<!-- \u2500\u2500 FOOTER \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 -->\n<footer>\n  <div class=\"footer-logo\">GUINAULT<\/div>\n  <div class=\"footer-tag\">Aircraft Ground Energy \u00b7 Orl\u00e9ans, France<\/div>\n  <div class=\"footer-grid\">\n    <div>\n      <div class=\"fg-title\">Produits<\/div>\n      <a class=\"fl\">GPU<\/a><a class=\"fl\">ACU \/ PCA<\/a><a class=\"fl\">ASU<\/a><a class=\"fl\">SA 400Hz<\/a>\n    <\/div>\n    <div>\n      <div class=\"fg-title\">Solutions<\/div>\n      <a class=\"fl\">D\u00e9carbonation<\/a><a class=\"fl\">A\u00e9roportuaire<\/a><a class=\"fl\">Militaire<\/a><a class=\"fl\">Maintenance<\/a>\n    <\/div>\n    <div>\n      <div class=\"fg-title\">Entreprise<\/div>\n      <a class=\"fl\">Pr\u00e9sentation<\/a><a class=\"fl\">Savoir-faire<\/a><a class=\"fl\">RSE<\/a><a class=\"fl\">Recrutement<\/a>\n    <\/div>\n    <div>\n      <div class=\"fg-title\">Contact<\/div>\n      <a class=\"fl\">Commercial<\/a><a class=\"fl\">SAV<\/a><a class=\"fl\">Pi\u00e8ces<\/a><a class=\"fl\">Pr\u00e9sence mondiale<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"footer-langs\">\n    <div class=\"flang on\">FR<\/div>\n    <div class=\"flang\">EN<\/div>\n    <div class=\"flang\">DE<\/div>\n    <div class=\"flang\">ES<\/div>\n    <div class=\"flang\">AR<\/div>\n    <div class=\"flang\">PT<\/div>\n  <\/div>\n  <div class=\"footer-copy\">\u00a9 2026 GUINAULT SAS \u2014 PAOS de la Saussaye, F-45590 Saint-Cyr-en-Val<\/div>\n  <div class=\"footer-legals\">\n    <a>Mentions l\u00e9gales<\/a><a>Confidentialit\u00e9<\/a><a>Cookies<\/a>\n  <\/div>\n<\/footer>\n\n<!-- \u2500\u2500 STICKY MOBILE \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 -->\n<div class=\"sticky-mob\" id=\"stickyMob\">\n  <button class=\"smob-btn s ripple-container\">\n    <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\n    Produits\n  <\/button>\n  <button class=\"smob-btn p ripple-container\">\n    <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07\"\/><\/svg>\n    Devis rapide\n  <\/button>\n<\/div>\n\n<script>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   LOADER\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nwindow.addEventListener('load', () => {\n  setTimeout(() => {\n    document.getElementById('loader').classList.add('out');\n  }, 1600);\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   CURSOR\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst csr = document.getElementById('csr');\nconst csrR = document.getElementById('csrR');\nlet mx = 0, my = 0, rx = 0, ry = 0;\ndocument.addEventListener('mousemove', e => { mx = e.clientX; my = e.clientY; csr.style.left = mx+'px'; csr.style.top = my+'px'; });\n(function loop() { rx += (mx-rx)*0.1; ry += (my-ry)*0.1; csrR.style.left = rx+'px'; csrR.style.top = ry+'px'; requestAnimationFrame(loop); })();\ndocument.querySelectorAll('button,a,.pcard,.bento-item,.ncard,.nd-item,.menu-item').forEach(el => {\n  el.addEventListener('mouseenter', () => { csr.classList.add('hov'); csrR.classList.add('hov'); });\n  el.addEventListener('mouseleave', () => { csr.classList.remove('hov'); csrR.classList.remove('hov'); });\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HERO PARTICLES CANVAS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst canvas = document.getElementById('heroCanvas');\nconst ctx = canvas.getContext('2d');\nlet W, H, particles = [];\n\nfunction resizeCanvas() {\n  W = canvas.width = canvas.offsetWidth;\n  H = canvas.height = canvas.offsetHeight;\n}\n\nclass Particle {\n  constructor() { this.reset(); }\n  reset() {\n    this.x = Math.random() * W;\n    this.y = Math.random() * H;\n    this.size = Math.random() * 1.5 + 0.3;\n    this.speedX = (Math.random() - 0.5) * 0.4;\n    this.speedY = -Math.random() * 0.6 - 0.2;\n    this.opacity = Math.random() * 0.5 + 0.1;\n    this.life = 0;\n    this.maxLife = Math.random() * 200 + 100;\n  }\n  update() {\n    this.x += this.speedX;\n    this.y += this.speedY;\n    this.life++;\n    if (this.life > this.maxLife || this.y < 0) this.reset();\n  }\n  draw() {\n    const progress = this.life \/ this.maxLife;\n    const a = this.opacity * (1 - progress * 0.8);\n    ctx.save();\n    ctx.globalAlpha = a;\n    ctx.fillStyle = `hsl(${210 + Math.random()*20}, 70%, 70%)`;\n    ctx.beginPath();\n    ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.restore();\n  }\n}\n\n\/\/ Connection lines\nfunction drawConnections() {\n  for (let i = 0; i < particles.length; i++) {\n    for (let j = i+1; j < particles.length; j++) {\n      const dx = particles[i].x - particles[j].x;\n      const dy = particles[i].y - particles[j].y;\n      const dist = Math.sqrt(dx*dx + dy*dy);\n      if (dist < 80) {\n        ctx.save();\n        ctx.globalAlpha = (1 - dist\/80) * 0.06;\n        ctx.strokeStyle = '#3A7BD5';\n        ctx.lineWidth = 0.5;\n        ctx.beginPath();\n        ctx.moveTo(particles[i].x, particles[i].y);\n        ctx.lineTo(particles[j].x, particles[j].y);\n        ctx.stroke();\n        ctx.restore();\n      }\n    }\n  }\n}\n\nfunction initParticles() {\n  particles = [];\n  for (let i = 0; i < 80; i++) particles.push(new Particle());\n}\n\nfunction animParticles() {\n  ctx.clearRect(0, 0, W, H);\n  drawConnections();\n  particles.forEach(p => { p.update(); p.draw(); });\n  requestAnimationFrame(animParticles);\n}\n\nresizeCanvas();\ninitParticles();\nanimParticles();\nwindow.addEventListener('resize', () => { resizeCanvas(); initParticles(); });\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HERO TITLE \u2014 WORD REVEAL\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst heroLines = [\n  { words: [\"L'expertise\"], dim: false },\n  { words: [\"fran\u00e7aise\", \"au\", \"service\"], dim: true },\n  { words: [\"de\", \"l'aviation.\"], dim: false },\n];\nconst h1 = document.getElementById('heroH1');\nlet baseDelay = 1400;\nheroLines.forEach(line => {\n  const lineEl = document.createElement('div');\n  lineEl.style.display = 'block';\n  lineEl.style.overflow = 'hidden';\n  lineEl.style.paddingBottom = '0.04em';\n  const inner = document.createElement('div');\n  line.words.forEach((word, wi) => {\n    const w = document.createElement('span');\n    w.className = 'word' + (line.dim ? ' hero-h1-dim' : '');\n    w.textContent = word;\n    w.style.animationDelay = `${baseDelay + wi * 80}ms`;\n    inner.appendChild(w);\n    if (wi < line.words.length - 1) {\n      const sp = document.createElement('span');\n      sp.className = 'space';\n      inner.appendChild(sp);\n    }\n  });\n  baseDelay += line.words.length * 80 + 60;\n  lineEl.appendChild(inner);\n  h1.appendChild(lineEl);\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MARQUEE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst marqueeItems = [\n  'APU OFF', 'GPU \u00b7 ACU \u00b7 ASU', 'D\u00e9carbonation', 'Made in France',\n  '70+ pays', '400Hz', 'Orl\u00e9ans', 'Aviation durable',\n  'APU OFF', 'GPU \u00b7 ACU \u00b7 ASU', 'D\u00e9carbonation', 'Made in France',\n  '70+ pays', '400Hz', 'Orl\u00e9ans', 'Aviation durable',\n];\nconst track = document.getElementById('marqueeTrack');\nmarqueeItems.forEach(item => {\n  const el = document.createElement('div');\n  el.className = 'marquee-item';\n  el.innerHTML = `${item}<span class=\"marquee-sep\">\u00b7<\/span>`;\n  track.appendChild(el);\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   NAV\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst nav = document.getElementById('nav');\nconst burger = document.getElementById('burger');\nconst menu = document.getElementById('navMenu');\nconst stickyMob = document.getElementById('stickyMob');\nconst progress = document.getElementById('progress');\nlet menuOpen = false;\n\nburger.addEventListener('click', () => {\n  menuOpen = !menuOpen;\n  burger.classList.toggle('open', menuOpen);\n  menu.classList.toggle('open', menuOpen);\n  document.body.style.overflow = menuOpen ? 'hidden' : '';\n});\nmenu.querySelectorAll('.menu-item').forEach(el => el.addEventListener('click', () => {\n  menuOpen = false; burger.classList.remove('open'); menu.classList.remove('open'); document.body.style.overflow = '';\n}));\n\nwindow.addEventListener('resize', () => {\n  document.getElementById('navDesk').style.display = window.innerWidth >= 768 ? 'flex' : 'none';\n});\nif (window.innerWidth >= 768) document.getElementById('navDesk').style.display = 'flex';\n\nwindow.addEventListener('scroll', () => {\n  const s = window.scrollY;\n  const maxS = document.documentElement.scrollHeight - window.innerHeight;\n  nav.classList.toggle('solid', s > 60);\n  stickyMob.classList.toggle('show', s > 280);\n  progress.style.transform = `scaleX(${s \/ maxS})`;\n  \/\/ Parallax hero bg\n  const grad = document.querySelector('.hero-grad');\n  if (grad && s < window.innerHeight) grad.style.transform = `translateY(${s*0.25}px)`;\n}, { passive: true });\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   RIPPLE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\ndocument.querySelectorAll('.ripple-container').forEach(btn => {\n  btn.addEventListener('pointerdown', e => {\n    const r = document.createElement('span');\n    r.className = 'ripple-wave';\n    const rect = btn.getBoundingClientRect();\n    const size = Math.max(rect.width, rect.height) * 2;\n    r.style.cssText = `width:${size}px;height:${size}px;left:${e.clientX-rect.left-size\/2}px;top:${e.clientY-rect.top-size\/2}px;`;\n    btn.appendChild(r);\n    r.addEventListener('animationend', () => r.remove());\n    \/\/ Haptic on mobile\n    if (navigator.vibrate) navigator.vibrate(8);\n  });\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   INTERSECTION OBSERVER\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst obs = new IntersectionObserver(entries => {\n  entries.forEach(e => {\n    if (!e.isIntersecting) return;\n    e.target.classList.add('vis');\n    \/\/ Counter\n    e.target.querySelectorAll('.stat-n[data-target]').forEach(el => {\n      if (el.dataset.animated) return;\n      el.dataset.animated = '1';\n      const tgt = +el.dataset.target;\n      const sfx = el.dataset.suffix || '';\n      const dur = 2000;\n      const start = performance.now();\n      (function tick(now) {\n        const p = Math.min((now - start) \/ dur, 1);\n        const ease = 1 - Math.pow(1 - p, 4);\n        el.textContent = Math.floor(ease * tgt) + sfx;\n        if (p < 1) requestAnimationFrame(tick);\n        else el.textContent = tgt + sfx;\n      })(performance.now());\n    });\n  });\n}, { threshold: 0.1, rootMargin: '0px 0px -30px 0px' });\n\ndocument.querySelectorAll('.rv,.rv-l,.rv-s,.stat-cell,.bento-item').forEach(el => obs.observe(el));\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PRODUCTS DOTS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst ps = document.getElementById('prodScroll');\nconst dots = document.querySelectorAll('.p-dot');\nps.addEventListener('scroll', () => {\n  const cards = ps.querySelectorAll('.pcard');\n  let idx = 0;\n  cards.forEach((c, i) => { if (c.offsetLeft - ps.offsetLeft <= ps.scrollLeft + 20) idx = i; });\n  dots.forEach((d, i) => d.classList.toggle('on', i === idx));\n}, { passive: true });\ndots.forEach((d, i) => d.addEventListener('click', () => {\n  const cards = ps.querySelectorAll('.pcard');\n  if (cards[i]) cards[i].scrollIntoView({ behavior: 'smooth', inline: 'start', block: 'nearest' });\n}));\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MAGNETIC BUTTONS (desktop)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nif (window.matchMedia('(hover: hover)').matches) {\n  document.querySelectorAll('.btn-p,.btn-o,.nav-btn,.bento-item').forEach(el => {\n    el.addEventListener('mousemove', e => {\n      const r = el.getBoundingClientRect();\n      const cx = r.left + r.width \/ 2;\n      const cy = r.top + r.height \/ 2;\n      const dx = (e.clientX - cx) * 0.18;\n      const dy = (e.clientY - cy) * 0.18;\n      el.style.transform = `translate(${dx}px, ${dy}px)`;\n    });\n    el.addEventListener('mouseleave', () => { el.style.transform = ''; });\n  });\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   LANG SELECTOR DESKTOP\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\ndocument.querySelectorAll('.nld').forEach(el => {\n  el.addEventListener('click', () => {\n    document.querySelectorAll('.nld').forEach(x => x.classList.remove('on'));\n    el.classList.add('on');\n  });\n});\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   TOUCH FEEDBACK MOBILE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\ndocument.querySelectorAll('.pcard,.ncard').forEach(card => {\n  card.addEventListener('touchstart', () => {\n    card.style.transform = 'scale(0.98)';\n    card.style.transition = 'transform 0.15s';\n  }, { passive: true });\n  card.addEventListener('touchend', () => {\n    card.style.transform = '';\n    card.style.transition = 'transform 0.4s cubic-bezier(0.16,1,0.3,1), box-shadow 0.4s cubic-bezier(0.16,1,0.3,1)';\n  }, { passive: true });\n});\n<\/script>\n<\/body>\n<\/html>\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>GUINAULT \u2014 Aircraft Ground Energy GUINAULT Aircraft Ground Energy GUINAULT Aircraft Ground Energy Produits Solutions Entreprise Actualit\u00e9s Contact FR EN DE ES AR PT \u2197Devis Produits Solutions Entreprise Actualit\u00e9s Contact FR EN DE ES AR PT Solutions APU OFF \u00b7 Orl\u00e9ans, France GPU \u00b7 ACU \u00b7 ASU \u00b7 Convertisseurs 400Hz. Alimenter les avions au sol [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":10,"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":18,"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/18"}],"wp:attachment":[{"href":"https:\/\/guinault.grabuge.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}