1<!DOCTYPE html> 2<html lang="fr-FR" prefix="og: https://ogp.me/ns#"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"> 6 <link rel="profile" href="https://gmpg.org/xfn/11"> 7 8 9 10<!-- Optimisation des moteurs de recherche par Rank Math - https://rankmath.com/ --> 11<title>Actualités | ATI Export</title> 12<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/> 13<link rel="canonical" href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/" /> 14<meta property="og:locale" content="fr_FR" /> 15<meta property="og:type" content="article" /> 16<meta property="og:title" content="Actualités | ATI Export" /> 17<meta property="og:url" content="https://goldenrod-pigeon-420491.hostingersite.com/actualites/" /> 18<meta property="og:site_name" content="ATI Export" /> 19<meta property="og:updated_time" content="2026-07-08T23:09:05+00:00" /> 20<meta name="twitter:card" content="summary_large_image" /> 21<meta name="twitter:title" content="Actualités | ATI Export" /> 22<meta name="twitter:label1" content="Temps de lecture" /> 23<meta name="twitter:data1" content="Moins dâune minute" /> 24<!-- /Extension Rank Math WordPress SEO --> 25 26<link rel='dns-prefetch' href='//cdn-reach.hostinger.com' /> 27<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 28<link rel="alternate" type="application/rss+xml" title="ATI Export » Flux" href="https://goldenrod-pigeon-420491.hostingersite.com/feed/" /> 29<link rel="alternate" type="application/rss+xml" title="ATI Export » Flux des commentaires" href="https://goldenrod-pigeon-420491.hostingersite.com/comments/feed/" /> 30<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fgoldenrod-pigeon-420491.hostingersite.com%2Factualites%2F" /> 31<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fgoldenrod-pigeon-420491.hostingersite.com%2Factualites%2F&format=xml" /> 32<style id='wp-img-auto-sizes-contain-inline-css' type='text/css'>img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}</style> 33 34<link data-optimized="1" rel='stylesheet' id='sbr_styles-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/4379f6e28e86bc5f150332002d2e87f5.css?ver=96711' type='text/css' media='all' /> 35<link data-optimized="1" rel='stylesheet' id='sbi_styles-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/a5775f4c7650c1eb1e084ab9eee84401.css?ver=7e756' type='text/css' media='all' /> 36<link data-optimized="1" rel='stylesheet' id='dripicons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/59172adc99a0d9c758b286b7da3679df.css?ver=28266' type='text/css' media='all' /> 37<link data-optimized="1" rel='stylesheet' id='elegant-icons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/640166e99eb672c820167ffa6caec035.css?ver=13b3e' type='text/css' media='all' /> 38<link data-optimized="1" rel='stylesheet' id='font-awesome-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/c030b719f5cfb2a1d7303f3c9f074025.css?ver=0a214' type='text/css' media='all' /> 39<link data-optimized="1" rel='stylesheet' id='ionicons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/3da2feeabf81c1e2dfe2178f92413fd1.css?ver=da323' type='text/css' media='all' /> 40<link data-optimized="1" rel='stylesheet' id='linea-icons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/f49c3f14dd4a9e0869dca3914d0f4bd9.css?ver=686fd' type='text/css' media='all' /> 41<link data-optimized="1" rel='stylesheet' id='linear-icons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/740554c86d334eea0f32a64c00f70c1a.css?ver=0d4ee' type='text/css' media='all' /> 42<link data-optimized="1" rel='stylesheet' id='material-icons-css' href='https://golde
42nrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/19d74a1c61d9b084018bd4466ea0a8e4.css?ver=0a8e4' type='text/css' media='all' /> 43<link data-optimized="1" rel='stylesheet' id='simple-line-icons-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/9ad9f484c4bffc487da52850381b0e46.css?ver=3d6ab' type='text/css' media='all' /> 44<link data-optimized="1" rel='stylesheet' id='sb-elementor-shared-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/cacca1ef7df0496221129c653e8a580b.css?ver=4f3ec' type='text/css' media='all' /> 45<link data-optimized="1" rel='stylesheet' id='cff-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/ae57a3a3474bcb5a84a1a82f773b79ce.css?ver=71773' type='text/css' media='all' /> 46<link data-optimized="1" rel='stylesheet' id='sb-font-awesome-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/61ed74f4a9d460e14eeeafa1d904971f.css?ver=f1cdb' type='text/css' media='all' /> 47<link data-optimized="1" rel='stylesheet' id='ctf_styles-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/09e3b6cdf3512fcf8b7515a9d4a36c1b.css?ver=bac3c' type='text/css' media='all' /> 48<link data-optimized="1" rel='stylesheet' id='sby_common_styles-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/aad8491c6b58b6fdcd216ec49d3ef7bb.css?ver=36a2d' type='text/css' media='all' /> 49<link data-optimized="1" rel='stylesheet' id='sby_styles-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/19edfdae125bb79c3e2ce5ac5e426670.css?ver=ee3bb' type='text/css' media='all' /> 50<style id='wp-emoji-styles-inline-css' type='text/css'>img.wp-smiley,img.emoji{display:inline!important;border:none!important;box-shadow:none!important;height:1em!important;width:1em!important;margin:0 0.07em!important;vertical-align:-0.1em!important;background:none!important;padding:0!important}</style> 51<link data-optimized="1" rel='stylesheet' id='wp-block-library-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/f559e509c7e5fbbf00be82af66f842cc.css?ver=65949' type='text/css' media='all' /> 52<style id='classic-theme-styles-inline-css' type='text/css'> 53/*! This file is auto-generated */ 54.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}</style> 55<style id='safe-svg-svg-icon-style-inline-css' type='text/css'>.wp-block-safe-svg-svg-icon a{align-self:center}.safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{fill:currentColor;height:100%;max-height:100%;max-width:100%;width:100%}</style> 56<link data-optimized="1" rel='stylesheet' id='hostinger-reach-subscription-block-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/43c2adfb68d59066ca7e5483240c3b7f.css?ver=44a13' type='text/css' media='all' /> 57<style id='global-styles-inline-css' type='text/css'>:root{--wp--preset--aspect-ratio--square:1;--wp--preset--aspect-ratio--4-3:4/3;--wp--preset--aspect-ratio--3-4:3/4;--wp--preset--aspect-ratio--3-2:3/2;--wp--preset--aspect-ratio--2-3:2/3;--wp--preset--aspect-ratio--16-9:16/9;--wp--preset--aspect-ratio--9-16:9/16;--wp--preset--color--black:#000000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#ffffff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;
57--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;--wp--preset--font-family--inter:"Inter", sans-serif;--wp--preset--font-family--cardo:Cardo;--wp--preset--spacing--20:0.44rem;--wp--preset--spacing--30:0.67rem;--wp--preset--spacing--40:1rem;--wp--preset--spacing--50:1.5rem;--wp--preset--spacing--60:2.25rem;--wp--preset--spacing--70:3.38rem;--wp--preset--spacing--80:5.06rem;--wp--preset--shadow--natural:6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep:12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp:6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined:6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp:6px 6px 0px rgb(0, 0, 0)}:where(.is-layout-flex){gap:.5em}:where(.is-layout-grid){gap:.5em}body .is-layout-flex{display:flex}.is-layout-flex{flex-wrap:wrap;align-items:center}.is-layout-flex>:is(*,div){margin:0}body .is-layout-grid{display:grid}.is-layout-grid>:is(*,div){margin:0}:where(.wp-block-columns.is-layout-flex){gap:2em}:where(.wp-block-columns.is-layout-grid){gap:2em}:where(.wp-block-post-template.is-layout-flex){gap:1.25em}:where(.wp-block-post-template.is-layout-grid){gap:1.25em}.has-black-color{color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-color{color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-color{color:var(--wp--preset--color--white)!important}.has-pale-pink-color{color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-color{color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-color{color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-color{color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-color{color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-color{color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-color{color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-color{color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-color{color:var(--wp--preset--color--vivid-purple)!important}.has-black-background-color{background-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-background-color{background-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-background-color{background-color:var(--wp--preset--color--white)!important}.has-pale-pink-background-color{background-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-background-color{background-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-background-color{background-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-background-color{background-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-background-color{background-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-background-color{background-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-background-color{background-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-background-color{background-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-background-color{background-color:var(--wp--preset--color--vivid-purple)!important}.has-black-border-color{border-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-border-color{border-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-border-color{border-color:var(--wp--preset--color--white)!important}.has-pale-pink-border-color{border-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-border-color{border-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-border-color{border-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-border-color{border-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-border-color{border-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-border-color{border-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-border-color{border-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-border-color{border-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-border-color{border-color:var(--wp--preset--color--vivid-purple)!important}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background:var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple)!important}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background:var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan)!important}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange)!important}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red)!important}
57.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background:var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray)!important}.has-cool-to-warm-spectrum-gradient-background{background:var(--wp--preset--gradient--cool-to-warm-spectrum)!important}.has-blush-light-purple-gradient-background{background:var(--wp--preset--gradient--blush-light-purple)!important}.has-blush-bordeaux-gradient-background{background:var(--wp--preset--gradient--blush-bordeaux)!important}.has-luminous-dusk-gradient-background{background:var(--wp--preset--gradient--luminous-dusk)!important}.has-pale-ocean-gradient-background{background:var(--wp--preset--gradient--pale-ocean)!important}.has-electric-grass-gradient-background{background:var(--wp--preset--gradient--electric-grass)!important}.has-midnight-gradient-background{background:var(--wp--preset--gradient--midnight)!important}.has-small-font-size{font-size:var(--wp--preset--font-size--small)!important}.has-medium-font-size{font-size:var(--wp--preset--font-size--medium)!important}.has-large-font-size{font-size:var(--wp--preset--font-size--large)!important}.has-x-large-font-size{font-size:var(--wp--preset--font-size--x-large)!important}:where(.wp-block-post-template.is-layout-flex){gap:1.25em}:where(.wp-block-post-template.is-layout-grid){gap:1.25em}:where(.wp-block-term-template.is-layout-flex){gap:1.25em}:where(.wp-block-term-template.is-layout-grid){gap:1.25em}:where(.wp-block-columns.is-layout-flex){gap:2em}:where(.wp-block-columns.is-layout-grid){gap:2em}:root :where(.wp-block-pullquote){font-size:1.5em;line-height:1.6}</style> 58<link data-optimized="1" rel='stylesheet' id='contact-form-7-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/3c362ee193a362565cf2464555559021.css?ver=8368d' type='text/css' media='all' /> 59<link data-optimized="1" rel='stylesheet' id='sr7css-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/9c5d63ce4d0c5b53082294b1ddc4cea0.css?ver=5d0bc' type='text/css' media='all' /> 60<style id='woocommerce-inline-inline-css' type='text/css'>.woocommerce form .form-row .required{visibility:visible}</style> 61<link data-optimized="1" rel='stylesheet' id='qi-addons-for-elementor-grid-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/96a0673959d276f846217b39e84b277c.css?ver=9b06d' type='text/css' media='all' /> 62<link data-optimized="1" rel='stylesheet' id='qi-addons-for-elementor-helper-parts-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/7ac2cc97abfeb9e70d3682a3742808b7.css?ver=1e35a' type='text/css' media='all' /> 63<link data-optimized="1" rel='stylesheet' id='qi-addons-for-elementor-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/bc1e3bc2c88edabc93a28376f6d958d4.css?ver=cd477' type='text/css' media='all' /> 64<link data-optimized="1" rel='stylesheet' id='perfect-scrollbar-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/a437f993ad4f3c4e2fb9d0f308852c9d.css?ver=11bd5' type='text/css' media='all' /> 65<link data-optimized="1" rel='stylesheet' id='stal-main-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/95e621a337095dd54f7ed513de514286.css?ver=f26d3' type='text/css' media='all' /> 66<link data-optimized="1" rel='stylesheet' id='stal-core-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/08845ad365342fa90fba7254c2c35d33.css?ver=7a410' type='text/css' media='all' /> 67<link data-optimized="1" rel='stylesheet' id='stal-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/d59331fb285e2cc152b95be7a117c6ee.css?ver=38eff' type='text/css' media='all' /> 68<style id='stal-style-inline-css' type='text/css'>.qodef-h1 a:hover,h1 a:hover,.qodef-h2 a:hover,h2 a:hover,.qodef-h3 a:hover,h3 a:hover,.qodef-h4 a:hover,h4 a:hover,.qodef-h5 a:hover,h5 a:hover,.qodef-h6 a:hover,h6 a:hover,a:hover,p a:hover,a.qodef-gray-link:hover,blockquote:before,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,textarea:focus,body .select2-container--default.select2-container--open .select2-selection--multiple,body .select2-container--default.select2-container--open .select2-selection--single,body .select2-container--default .select2-results__option[aria-selected=true],body .select2-container--default .select2-results__option[data-selected=true],body .select2-container--default .select2-results__option--highlighted[aria-selected],#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-item-toggle:hover,#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-item-toggle:hover,#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-list-horizontal ul li a:hover,#qodef-page-header .widget_icl_lang_sel_widget .wpml-ls-legacy-list-vertical ul li a:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-item-toggle:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-item-toggle:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-list-horizontal ul li a:hover,#qodef-page-mobile-header .widget_icl_lang_sel_widget .wpml-ls-legacy-list-vertical ul li a:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-item-toggle:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-item-toggle:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-list-horizontal ul li a:hover,#qodef-page-sidebar .widget_icl_lang_sel_widget .wpml-ls-legacy-list-vertical ul li a:hover,#qodef-page-footer .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-item-toggle:hover,#qodef-page-footer .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-item-toggle:hover,#qodef-page-footer .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-page-footer .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-side-area .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-item-toggle:hover,#qodef-side-area .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-item-toggle:hover,#qodef-side-area .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown .wpml-ls-sub-menu .wpml-ls-item a:hover,#qodef-side-area .widget_icl_lang_sel_widget .wpml-ls-legacy-dropdown-click .wpml-ls-sub-menu .wpml-ls-item a:hover,.qodef-blog article .qodef-e-info .qodef-e-info-item a:hover,.qodef-blog article .qodef-e-info .qodef-e-info-item.qodef-e-info-category:before,.qodef-blog article .qodef-e-info .qodef-e-info-item.qodef-e-info-date:before,.qodef-blog article .qodef-e-info .qodef-e-info-item.qodef-e-info-tags:before,.qodef-blog article.format-link .qodef-icon-linea-icons,.qodef-blog article.format-quote .qodef-icon-linea-icons,.qodef-blog article.format-quote .qodef-e-quote-author-position,#qodef-page-comments-list .qodef-comment-item .qodef-e-links>.comment-reply-link:after:hover,.qodef-m-filter .qodef-m-filter-item.qodef--active,.qodef-m-filter .qodef-m-filter-item:hover,.wp-block-button.is-style-outline .wp-block-button__link,.wp-block-archives li a:hover,.wp-block-categories li a:hover,.wp-block-latest-posts li a:hover,blockquote.wp-block-pullquote:before,.wp-block-pullquote blockquote:before,.wp-block-quote:before,#qodef-mobile-header-navigation ul li:hover>a,#qodef-mobile-header-navigation ul li.current-menu-ancestor>a,#qodef-mobile-header-navigation ul li.current-menu-item>
68a,.qodef-header-navigation ul li.qodef-menu-item--narrow ul li.current-menu-item>a,.qodef-header-navigation ul li.qodef-menu-item--narrow ul li:hover>a,.qodef-blog.qodef-item-layout--simple article .qodef-e-title a:hover,#qodef-author-info .qodef-m-author-position,.qodef-fullscreen-menu-holder nav.qodef-fullscreen-menu ul li ul li a:hover,.qodef-header--vertical .qodef-header-vertical-navigation ul li a:hover,.qodef-header--vertical .qodef-header-vertical-navigation ul li.current-menu-ancestor>a,.qodef-header--vertical .qodef-header-vertical-navigation ul li.current-menu-item>a,.qodef-header--vertical .qodef-header-vertical-navigation ul li.current_page_item>a,#qodef-page-mobile-header .qodef-mobile-header-logo-link,.qodef-header-navigation ul li.qodef-menu-item--wide .qodef-drop-down-second .qodef-drop-down-second-inner>ul>li ul li.current-menu-item>a,.qodef-header-navigation ul li.qodef-menu-item--wide .qodef-drop-down-second .qodef-drop-down-second-inner>ul>li ul li:hover>a,.qodef-portfolio-single-item .qodef-portfolio-info a:not(.qodef-share-link):hover,.qodef-ps-related-posts-holder .qodef-ps-related-text .qodef-ps-related-categories,.qodef-portfolio-list .qodef-e-info-category a,.qodef-portfolio-list.qodef-item-layout--info-on-hover .qodef-e-content .qodef-e-content-inner .qodef-e-info-category a,.qodef-team-list .qodef-e-role,.qodef-team-list.qodef-item-layout--info-on-hover .qodef-e-social-content.opened .qodef-team-member-social-icon-opener,.qodef-testimonials-list .qodef-e-author-job,.qodef-header--dark .qodef-search-opener.search-icon-in-box .qodef-search-opener-inner,.qodef-accordion.qodef-layout--simple .qodef-accordion-title.ui-state-active,.qodef-accordion.qodef-layout--simple .qodef-accordion-title.ui-state-hover,.qodef-banner .qodef-m-text-field,.qodef-button.qodef-layout--outlined,.qodef-contact-info .qodef-m-vertical-text,.qodef-contact-info .qodef-m-info>div span,.qodef-icon-list-item .qodef-e-title a:hover,.qodef-image-with-text.qodef--with-link .qodef-m-image:hover+.qodef-m-content .qodef-m-title,.qodef-image-with-text.qodef--with-link .qodef-m-title:hover,.qodef-pricing-table .qodef-m-title p,.qodef-pricing-table .qodef-m-content .qodef-icon-ionicons,.qodef-section-title.qodef-title-with-tagline .qodef-m-title-tagline,.qodef-swapping-image-gallery.qodef-title-with-tagline .qodef-m-title-tagline,.qodef-video-button .qodef-m-play,.qodef-side-area-opener:hover,.qodef-social-share.qodef-layout--dropdown .qodef-social-share-dropdown-opener,#qodef-top-area .qodef-woo-dropdown-cart .qodef-woo-dropdown-items a:hover,.qodef-woo-dropdown-cart .qodef-m-order-details .qodef-m-order-amount,.qodef-woo-dropdown-cart .qodef-m-order-details .qodef-m-order-label,.qodef-working-hours-list .qodef-e-day-icon,.qodef-working-hours-list .qodef-e-time.qodef--closed,.qodef-working-hours-list .qodef-m-footer-icon{color:#fdec01}.qodef-theme-button,button[type=submit],input[type=submit],.swiper-button-next:hover,.swiper-button-prev:hover,#qodef-404-page button,.qodef-blog article.format-audio .mejs-controls .mejs-time-rail .mejs-time-current,.qodef-blog.qodef--single article .qodef-e-info.qodef-info--bottom .qodef-e-info-tags a:hover,.wp-block-button .wp-block-button__link,.wp-block-button.is-style-outline .wp-block-button__link:hover,.wp-block-file .wp-block-file__button,.has-primary-background-color,#qodef-back-to-top,#qodef-author-info .qodef-m-social-icons a,#qodef-single-post-navigation .qodef-m-nav.qodef--next:hover .qodef-icon-linea-icons,#qodef-single-post-navigation .qodef-m-nav.qodef--prev:hover .qodef-icon-linea-icons,.qodef-fullscreen-menu-opener.qodef-fullscreen-menu-opener--predefined,#qodef-page-mobile-header #qodef-mobile-header-opener,.qodef-clients-list.qodef-item-layout--image-only.qodef-hover-animation--fade-in .qodef-e .qodef-e-hover-logo .qodef-m-split,.qodef-team-list.qodef-item-layout--info-on-hover .qodef-e-social-content .qodef-team-member-social-icon,.qodef-team-list.qodef-item-layout--info-on-hover .qodef-e-social-content .qodef-team-member-social-icon-opener,.qodef-testimonials-list .swiper-pagination-bullets .swiper-pagination-bullet:before,.qodef-testimonials-l
68ist .swiper-button-next,.qodef-search-opener.search-icon-in-box .qodef-search-opener-inner,.qodef-accordion.qodef-layout--simple .qodef-accordion-title.ui-state-active .qodef-accordion-mark span.qodef-icon,.qodef-accordion.qodef-layout--simple .qodef-accordion-title.ui-state-hover .qodef-accordion-mark span.qodef-icon,.qodef-button.qodef-layout--filled.qodef-html--link,.qodef-button.qodef-layout--outlined:hover,.qodef-button.qodef-layout--splitted,.qodef-button.qodef-layout--splitted:hover,.qodef-icon-list-item .qodef-m-square,.qodef-icon-list-item.qodef-icon--predefined a:before,.qodef-icon-holder.qodef-layout--circle,.qodef-icon-holder.qodef-layout--square,.qodef-image-gallery .swiper-button-next:hover,.qodef-image-gallery .swiper-button-prev:hover,.qodef-side-area-opener.qodef-side-area-opener--predefined,.qodef-social-share.qodef-layout--dropdown.qodef-dropdown--left .qodef-social-share-dropdown li a,.qodef-social-share.qodef-layout--list li a,.qodef-woo-dropdown-cart .qodef-m-opener .qodef-m-opener-count,.qodef-woo-dropdown-cart .qodef-e-quantity,.qodef-woo-dropdown-cart .qodef-m-action-link{background-color:#fdec01}.qodef-header--light #qodef-page-header .qodef-header-logo-link.qodef-textual-logo.has-background-color .qodef-logo-text{background-color:#fdec01!important}input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,textarea:focus,.wp-block-button.is-style-outline .wp-block-button__link,.wp-block-button.is-style-outline .wp-block-button__link:hover,#qodef-back-to-top .qodef-back-to-top-icon,.qodef-button.qodef-layout--outlined,.qodef-button.qodef-layout--outlined:hover{border-color:#fdec01}.qodef-mobile-header--standard #qodef-mobile-header-navigation .qodef-m-inner{background-color:#000}.qodef-mobile-header--standard #qodef-page-mobile-header{background-color:#000}</style> 69<link data-optimized="1" rel='stylesheet' id='swiper-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/4643c7dc2ecf8fa66a6f4df4b4f4dd61.css?ver=092cf' type='text/css' media='all' /> 70<link data-optimized="1" rel='stylesheet' id='magnific-popup-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/99080f6a1a273e2c9563f784c11f2a29.css?ver=08c4a' type='text/css' media='all' /> 71<link data-optimized="1" rel='stylesheet' id='stal-google-fonts-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/17c70bb96ccea51698b5cf1aa59bde1e.css?ver=bde1e' type='text/css' media='all' /> 72<link data-optimized="1" rel='stylesheet' id='select2-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/fcaf03bc13b10e63c41f0967a6da8ce6.css?ver=98e77' type='text/css' media='all' /> 73<link data-optimized="1" rel='stylesheet' id='stal-core-dashboard-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/927039c37ad4e293196b7ecf65eb7319.css?ver=e8bf9' type='text/css' media='all' /> 74<link data-optimized="1" rel='stylesheet' id='trp-language-switcher-v2-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/48827b291eb0de6492ce6145b3522a31.css?ver=5a1ac' type='text/css' media='all' />
75<script type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 75
75
76<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/4bddaeaf30111f51e3ab83faadfc7fe5.js?ver=792ce" id="jquery-migrate-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 76
76
77<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/3e030734c9a08f71c57f85b294d1e01b.js?ver=a236d" id="tp-tools-js" data-wp-strategy="async" defer data-deferred="1"></script>
vendor: 1 bytes, line 77
77
78<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/9d796fd104c068c1881bfc02038a331c.js?ver=415c9" id="sr7-js" data-wp-strategy="async" defer data-deferred="1"></script>
vendor: 1 bytes, line 78
78
79<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/68cf03e6ec9d590ce8508e74943f378a.js?ver=ff08b" id="wc-jquery-blockui-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 79
79
80<script data-optimized="1" type="text/javascript" id="wc-add-to-cart-js-extra" src="data:text/javascript;base64,dmFyIHdjX2FkZF90b19jYXJ0X3BhcmFtcz17ImFqYXhfdXJsIjoiL3dwLWFkbWluL2FkbWluLWFqYXgucGhwIiwid2NfYWpheF91cmwiOiIvP3djLWFqYXg9JSVlbmRwb2ludCUlIiwiaTE4bl92aWV3X2NhcnQiOiJWb2lyIGxlIHBhbmllciIsImNhcnRfdXJsIjoiaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9jYXJ0LyIsImlzX2NhcnQiOiIiLCJjYXJ0X3JlZGlyZWN0X2FmdGVyX2FkZCI6Im5vIn0=" defer></script>
vendor: 1 bytes, line 80
80
81<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/7eb407cb044e4f1b46dee3aec4555b5f.js?ver=f93f8" id="wc-add-to-cart-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 81
81
82<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/50be434e7bb06aa1ad7e8b097eaf7163.js?ver=21fd5" id="wc-js-cookie-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 82
82
83<script data-optimized="1" type="text/javascript" id="woocommerce-js-extra" src="data:text/javascript;base64,dmFyIHdvb2NvbW1lcmNlX3BhcmFtcz17ImFqYXhfdXJsIjoiL3dwLWFkbWluL2FkbWluLWFqYXgucGhwIiwid2NfYWpheF91cmwiOiIvP3djLWFqYXg9JSVlbmRwb2ludCUlIiwiaTE4bl9wYXNzd29yZF9zaG93IjoiQWZmaWNoZXIgbGUgbW90IGRlIHBhc3NlIiwiaTE4bl9wYXNzd29yZF9oaWRlIjoiTWFzcXVlciBsZSBtb3QgZGUgcGFzc2UifQ==" defer></script>
vendor: 1 bytes, line 83
83
84<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/967d9a72fa71473bae72b6ffebba5c02.js?ver=a008c" id="woocommerce-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 84
84
85<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/daacbef64f1c4b1c34090007f40d0d78.js?ver=f0f33" id="trp-frontend-compatibility-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 85
85
86<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/8e02bf272fec46091d4307ee9c1c7043.js?ver=08f02" id="wc-select2-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 86
86
87<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/8de4e67d6e8d62951ba3cbc4347a99db.js?ver=ccf70" id="trp-language-switcher-js-v2-js" defer data-deferred="1"></script>
87 88<link rel="https://api.w.org/" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-json/wp/v2/pages/10087" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://goldenrod-pigeon-420491.hostingersite.com/xmlrpc.php?rsd" /> 89<meta name="generator" content="WordPress 6.9.9" /> 90<meta name="generator" content="WooCommerce 10.7.0" /> 91<link rel='shortlink' href='https://goldenrod-pigeon-420491.hostingersite.com/?p=10087' /> 92<link rel="alternate" hreflang="fr-FR" href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/"/> 93<link rel="alternate" hreflang="en-GB" href="https://goldenrod-pigeon-420491.hostingersite.com/en/actualites/"/> 94<link rel="alternate" hreflang="fr" href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/"/> 95<link rel="alternate" hreflang="en" href="https://goldenrod-pigeon-420491.hostingersite.com/en/actualites/"/> 96 <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript> 97 <meta name="generator" content="Elementor 4.1.4; features: e_font_icon_svg, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-swap"> 98 <style>.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) *{background-image:none!important}@media screen and (max-height:1024px){.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) *{background-image:none!important}}@media screen and (max-height:640px){.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) *{background-image:none!important}}</style> 99
99<script data-optimized="1" src="data:text/javascript;base64,ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucW9kZWYtaWItaXRlbScpLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7Y29uc3QgbGluaz1pdGVtLnF1ZXJ5U2VsZWN0b3IoJy5xb2RlZi1pYi1pdGVtLWJ0bi1ob2xkZXIgYScpO2lmKGxpbmspe2l0ZW0uc3R5bGUuY3Vyc29yPSdwb2ludGVyJztpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5ocmVmPWxpbmsuaHJlZn0pfX0pfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXt2YXIgaXNFbmdsaXNoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nLnN0YXJ0c1dpdGgoJ2VuJyk7dmFyIGRldmlzSHJlZj1pc0VuZ2xpc2g/J2h0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vZW4vY29udGFjdC11cy8nOidodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL2NvbnRhY3QtdXMvJzt2YXIgZGV2aXNUZXh0PWlzRW5nbGlzaD8nUkVRVUVTVCBBIFFVT1RFJzonREVNQU5ERVIgVU4gREVWSVMnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xb2RlZi13aWRnZXQtaG9sZGVyJykuZm9yRWFjaChmdW5jdGlvbihob2xkZXIpe2lmKCFob2xkZXIucXVlcnlTZWxlY3RvcignLmRldmlzLWZhYicpKXt2YXIgYnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtidG4uaHJlZj1kZXZpc0hyZWY7YnRuLmNsYXNzTmFtZT0nZGV2aXMtZmFiJztidG4udGV4dENvbnRlbnQ9ZGV2aXNUZXh0O2hvbGRlci5pbnNlcnRCZWZvcmUoYnRuLGhvbGRlci5maXJzdENoaWxkKX19KX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7dmFyIGNvbnRhY3RIcmVmPSdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3F1aS1zb21tZXMtbm91cy8jd3BjZjctZjk0NzItcDIxNzQtbzEnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xb2RlZi13aWRnZXQtaG9sZGVyJykuZm9yRWFjaChmdW5jdGlvbihob2xkZXIpe2lmKGhvbGRlci5xdWVyeVNlbGVjdG9yKCcuY29udGFjdC1mYWInKSlyZXR1cm47dmFyIGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2xpbmsuaHJlZj1jb250YWN0SHJlZjtsaW5rLmNsYXNzTmFtZT0nY29udGFjdC1mYWInO2xpbmsuaWQ9J2luamVjdGVkLWNvbnRhY3QtYnRuJztsaW5rLnRpdGxlPSdOb3VzIGNvbnRhY3Rlcic7bGluay5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCdOb3VzIGNvbnRhY3RlcicpO2xpbmsuaW5uZXJIVE1MPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHJlY3QgeD0iMiIgeT0iNCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjE2IiByeD0iMiI+PC9yZWN0PjxwYXRoIGQ9Ik0yMiA2bC0xMCA3TDIgNiI+PC9wYXRoPjwvc3ZnPic7dmFyIGRldmlzQnRuPWhvbGRlci5xdWVyeVNlbGVjdG9yKCcuZGV2aXMtZmFiJyk7aWYoZGV2aXNCdG4pe2RldmlzQnRuLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLGxpbmspfWVsc2V7aG9sZGVyLmluc2VydEJlZm9yZShsaW5rLGhvbGRlci5maXJzdENoaWxkKX19KX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7dmFyIENPTlRBQ1RfSEFTSD0nI3dwY2Y3LWY5NDcyLXAyMTc0LW8xJztmdW5jdGlvbiBzY3JvbGxUb0NvbnRhY3RGb3JtKCl7dmFyIGZvcm09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dwY2Y3LWY5NDcyLXAyMTc0LW8xJyk7aWYoZm9ybSlmb3JtLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonc3RhcnQnfSl9CmlmKHdpbmRvdy5sb2NhdGlvbi5oYXNoPT09Q09OVEFDVF9IQVNIKXt2YXIgZG9TY3JvbGw9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KHNjcm9sbFRvQ29udGFjdEZvcm0sMzAwKX07aWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpe2RvU2Nyb2xsKCl9ZWxzZXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZG9TY3JvbGwpfX0KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmKj0iJytDT05UQUNUX0hBU0grJyJdJykuZm9yRWFjaChmdW5jdGlvbihsaW5rKXtsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgZm9ybT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3BjZjctZjk0NzItcDIxNzQtbzEnKTtpZighZm9ybSlyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpO2hpc3RvcnkucHVzaFN0YXRlKG51bGwsJycsQ09OVEFDVF9IQVNIKTtzY3JvbGxUb0NvbnRhY3RGb3JtKCl9KX0pfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXt2YXIgQlJPQ0hVUkVfUERGX1VSTD0naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9ERVBMSUFOVC0zLVZPTEVUUy0yLnBkZic7dmFyIGlzRW5nbGlzaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZy5zdGFydHNXaXRoKCdlbicpO3ZhciBJQ09OPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTEyIDN2MTIiPjwvcGF0aD48cGF0aCBkPSJNNyAxMGw1IDUgNS01Ij48L3BhdGg+PHBhdGggZD0iTTQgMTloMTYiPjwvcGF0aD48L3N2Zz4nO2Z1bmN0aW9uIG1ha2VCdXR0b24oZXh0cmFDbGFzcyl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2EuaHJlZj1CUk9DSFVSRV9QREZfVVJMO2EudGFyZ2V0PSdfYmxhbmsnO2EucmVsPSdub29wZW5lcic7YS5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywnJyk7YS5jbGFzc05hbWU9J2Jyb2NodXJlLWJ0bicrKGV4dHJhQ2xhc3M/JyAnK2V4dHJhQ2xhc3M6JycpO2EuaW5uZXJIVE1MPUlDT04rJzxzcGFuPicrKGlzRW5nbGlzaD8nRG93bmxvYWQgYnJvY2h1cmUnOidUw6lsw6ljaGFyZ2VyIGxhIGJyb2NodXJlJykrJzwvc3Bhbj4nO3JldHVybiBhfQpmdW5jdGlvbiBvd25FbGVtZW50b3JBbmNlc3RvcihlbCl7d2hpbGUoZWwmJiEoZWwuY2xhc3NMaXN0JiZlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2VsZW1lbnRvci1lbGVtZW50JykpKXtlbD1lbC5wYXJlbnRFbGVtZW50fQpyZXR1cm4gZWx9CmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2gyJykuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgdGV4dD1oLnRleHRDb250ZW50LnRyaW0oKS5yZXBsYWNlKC86XHMqJC8sJycpLnRvVXBwZXJDYXNlKCk7aWYodGV4dCE9PSdOT1MgUEFSVEVOQUlSRVMnJiZ0ZXh0IT09J09VUiBQQVJUTkVSUycpcmV0dXJuO3ZhciBoZWFkaW5nQm94PW93bkVsZW1lbnRvckFuY2VzdG9yKGgpO3ZhciBsb2dvc0JveD1oZWFkaW5nQm94JiZoZWFkaW5nQm94Lm5leHRFbGVtZW50U2libGluZztpZighbG9nb3NCb3h8fGxvZ29zQm94LnF1ZXJ5U2VsZWN0b3IoJy5icm9jaHVyZS1idG4nKSlyZXR1cm47bG9nb3NCb3guYXBwZW5kQ2hpbGQobWFrZUJ1dHRvbigpKX0pO2lmKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWlkLTEwNDc2Jykpe3ZhciBjb3ZlcjE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVsZW1lbnRvci1lbGVtZW50LTczNzMwODEnKTt2YXIgcGFuZWw9Y292ZXIxJiZjb3ZlcjEuY2xvc2VzdCgnLmF0aS12c3MtcGFuZWwtaXMtdW5pZmllZCcpO2lmKHBhbmVsJiYhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmJyb2NodXJlLWJ0bi0tY292ZXInKSl7dmFyIGNvdmVyQnRuPW1ha2VCdXR0b24oJ2Jyb2NodXJlLWJ0bi0tY292ZXInKTt2YXIgYXR0ZW1wdHM9MDsoZnVuY3Rpb24gYnVpbGRQYWlyKCl7dmFyIGhpbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbC1kb3duLWhpbnQnKTtpZighaGludCl7aWYoYXR0ZW1wdHMrKzwzMClzZXRUaW1lb3V0KGJ1aWxkUGFpciwxNTApO3JldHVybn0KaWYoaGludC5wYXJlbnROb2RlJiZoaW50LnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdGktcGlsbC1wYWlyJykpcmV0dXJuO3ZhciB3cmFwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3dyYXAuY2xhc3NOYW1lPSdhdGktcGlsbC1wYWlyJztoaW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXAsaGludCk7d3JhcC5hcHBlbmRDaGlsZChoaW50KTt3cmFwLmFwcGVuZENoaWxkKGNvdmVyQnRu
99KTtoaW50LnN0eWxlLm9wYWNpdHk9Jyc7aGludC5zdHlsZS50cmFuc2l0aW9uPScnfSkoKX19fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXt2YXIgaGludD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2Nyb2xsLWRvd24taGludCcpO3ZhciB2aWRlbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVyby12aWRlby1jb250YWluZXIgdmlkZW8uZS1zZWxmLWhvc3RlZC12aWRlby1iYXNlJyk7aWYoIWhpbnR8fCF2aWRlbylyZXR1cm47d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsZnVuY3Rpb24oKXtpZih3aW5kb3cuc2Nyb2xsWT4xMDApe2hpbnQuc3R5bGUub3BhY2l0eT0nMCc7aGludC5zdHlsZS5wb2ludGVyRXZlbnRzPSdub25lJ31lbHNle2hpbnQuc3R5bGUub3BhY2l0eT0nMSc7aGludC5zdHlsZS5wb2ludGVyRXZlbnRzPSdhdXRvJ319KX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7dmFyIHNwbGl0U2xpZGVyUGFnZXM9WzcwMzAsMTAyNyw1NjY3LDU2NjUsNTY2Nl07dmFyIGJvZHlDbGFzc2VzPWRvY3VtZW50LmJvZHkuY2xhc3NOYW1lO3ZhciBvblNwbGl0UGFnZT1zcGxpdFNsaWRlclBhZ2VzLnNvbWUoZnVuY3Rpb24oaWQpe3JldHVybiBib2R5Q2xhc3Nlcy5pbmRleE9mKCdwYWdlLWlkLScraWQpIT09LTF9KTtpZighb25TcGxpdFBhZ2UpcmV0dXJuO3ZhciBvcGVuZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnFvZGVmLWZ1bGxzY3JlZW4tbWVudS1vcGVuZXInKTt2YXIgaGVhZGVySW5uZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3FvZGVmLXBhZ2UtaGVhZGVyLWlubmVyJyk7aWYoIW9wZW5lcnx8IWhlYWRlcklubmVyKXJldHVybjtvcGVuZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7aGVhZGVySW5uZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLGAKICAgIDxuYXYgY2xhc3M9InFvZGVmLWhlYWRlci1uYXZpZ2F0aW9uIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJUb3AgTWVudSI+CiAgICAgIDx1bCBpZD0icW9kZWYtbWFpbi1uYXZpZ2F0aW9uLW1lbnUiIGNsYXNzPSJtZW51Ij4KICAgICAgICA8bGkgY2x
99hc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS1ob21lIG1lbnUtaXRlbS02MDY4Ij48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5BY2N1ZWlsPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICA8bGkgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS01MzY2Ij48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3F1aS1zb21tZXMtbm91cy8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+UXVpIFNvbW1lcyBOb3VzPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICA8bGkgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS1oYXMtY2hpbGRyZW4gbWVudS1pdGVtLTU1OTcgcW9kZWYtbWVudS1pdGVtLS1uYXJyb3ciPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vbm9zLXNlcnZpY2VzLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5Ob3MgU2VydmljZXM8L3NwYW4+PC9zcGFuPjwvYT48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1hcnJvdyI+PC9zcGFuPgogICAgICAgICAgPGRpdiBjbGFzcz0icW9kZWYtZHJvcC1kb3duLXNlY29uZCI+PGRpdiBjbGFzcz0icW9kZWYtZHJvcC1kb3duLXNlY29uZC1pbm5lciI+PHVsIGNsYXNzPSJzdWItbWVudSI+CiAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTcwMzYiPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vYWNoYXQtaW5kdXN0cmllbC8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+QWNoYXQgSW5kdXN0cmllbDwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTU2NzUiPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vc291cmNpbmcvIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLWlubmVyIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLXRleHQiPlNvdXJjaW5nPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLTU2NjUiPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vbG9naXN0aXF1ZS8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+TG9naXN0aXF1ZTwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS01NjY3Ij48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL2V4cG9ydC1pbnRlcm5hdGlvbmFsLXRyYW5zcG9ydC8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+RXhwb3J0IEludGVybmF0aW9uYWwvVHJhbnNwb3J0PC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tNTY3NyI+PGEgaHJlZj0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9zdXBwbHktY2hhaW4vIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLWlubmVyIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLXRleHQiPlN1cHBseSBjaGFpbjwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICA8L3VsPjwvZGl2PjwvZGl2PgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0taGFzLWNoaWxkcmVuIG1lbnUtaXRlbS02NzA4IHFvZGVmLW1lbnUtaXRlbS0tbmFycm93Ij48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3NlY3RldXJzLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5TZWN0ZXVycyBkJ2FjdGl2aXRlPC9zcGFuPjwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtYXJyb3ciPjwvc3Bhbj4KICAgICAgICAgIDxkaXYgY2xhc3M9InFvZGVmLWRyb3AtZG93bi1zZWNvbmQiPjxkaXYgY2xhc3M9InFvZGVmLWRyb3AtZG93bi1zZWNvbmQtaW5uZXIiPjx1bCBjbGFzcz0ic3ViLW1lbnUiPgogICAgICAgICAgICA8bGkgY2x
99hc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS01NTg3Ij48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL2Fncm9hbGltZW50YWlyZS8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+QWdyb2FsaW1lbnRhaXJlPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tNTY1NCI+PGEgaHJlZj0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9idHAvIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLWlubmVyIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLXRleHQiPkJUUDwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTU2NTMiPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vbWluaWVyLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5NaW5pZXI8L3NwYW4+PC9zcGFuPjwvYT48L2xpPgogICAgICAgICAgICA8bGkgY2x
99hc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS01NjUyIj48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3BldHJvbGllci8iPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0taW5uZXIiPjxzcGFuIGNsYXNzPSJxb2RlZi1tZW51LWl0ZW0tdGV4dCI+UGV0cm9saWVyPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tNTY1NSI+PGEgaHJlZj0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9lbmVyZ2llLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5FbmVyZ2llPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tNjMxNyI+PGEgaHJlZj0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9hdXRvbW9iaWxlLyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5BdXRvbW9iaWxlPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tNjMxNiI+PGEgaHJlZj0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9hZXJvbmF1dGlxdWUvIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLWlubmVyIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLXRleHQiPkFlcm9uYXV0aXF1ZTwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTYzMTgiPjxhIGhyZWY9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vZmVycm92aWFpcmUvIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLWlubmVyIj48c3BhbiBjbGFzcz0icW9kZWYtbWVudS1pdGVtLXRleHQiPkZlcnJvdmlhaXJlPC9zcGFuPjwvc3Bhbj48L2E+PC9saT4KICAgICAgICAgIDwvdWw+PC9kaXY+PC9kaXY+CiAgICAgICAgPC9saT4KICAgICAgICA8bGkgY2x
99hc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS02NjAyIj48YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3JlY3J1dGVtZW50LyI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS1pbm5lciI+PHNwYW4gY2xhc3M9InFvZGVmLW1lbnUtaXRlbS10ZXh0Ij5SZWNydXRlbWVudDwvc3Bhbj48L3NwYW4+PC9hPjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L25hdj4KICAgIDxkaXYgY2xhc3M9InFvZGVmLXdpZGdldC1ob2xkZXIiPgogICAgICA8YSBocmVmPSJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL2NvbnRhY3QtdXMvIiBjbGFzcz0iZGV2aXMtZmFiIiBpZD0iaW5qZWN0ZWQtZGV2aXMtYnRuIj5ERU1BTkRFUiBVTiBERVZJUzwvYT4KICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0IHdpZGdldF9zdGFsX2NvcmVfc2lkZV9hcmVhX29wZW5lciBxb2RlZi1oZWFkZXItd2lkZ2V0LWFyZWEtb25lIj4KICAgICAgICA8YSBpdGVtcHJvcD0idXJsIiBjbGFzcz0icW9kZWYtc2lkZS1hcmVhLW9wZW5lciBxb2RlZi1zaWRlLWFyZWEtb3BlbmVyLS1wcmVkZWZpbmVkIiBocmVmPSIjIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJxb2RlZi1saW5lcyI+PHNwYW4gY2xhc3M9InFvZGVmLWxpbmUgcW9kZWYtbGluZS0xIj48L3NwYW4+PHNwYW4gY2xhc3M9InFvZGVmLWxpbmUgcW9kZWYtbGluZS0yIj48L3NwYW4+PHNwYW4gY2xhc3M9InFvZGVmLWxpbmUgcW9kZWYtbGluZS0zIj48L3NwYW4+PHNwYW4gY2xhc3M9InFvZGVmLWxpbmUgcW9kZWYtbGluZS00Ij48L3NwYW4+PHNwYW4gY2xhc3M9InFvZGVmLWxpbmUgcW9kZWYtbGluZS01Ij48L3NwYW4+PC9zcGFuPgogICAgICAgIDwvYT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGlzRW5nbGlzaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZy5zdGFydHNXaXRoKCdlbicpO3ZhciBiYXNlVXJsPSdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tJzt2YXIgZW5CYXNlPWJhc2VVcmwrJy9lbic7aWYoaXNFbmdsaXNoKXtoZWFkZXJJbm5lci5xdWVyeVNlbGVjdG9yQWxsKCcucW9kZWYtaGVhZGVyLW5hdmlnYXRpb24gYVtocmVmXScpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGhyZWY9YS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtpZihocmVmJiZocmVmLnN0YXJ0c1dpdGgoYmFzZVVybCkmJiFocmVmLnN0YXJ0c1dpdGgoZW5CYXNlKSl7YS5ocmVmPWhyZWYucmVwbGFjZShiYXNlVXJsLGVuQmFzZSl9fSk7dmFyIGRldmlzQnRuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmplY3RlZC1kZXZpcy1idG4nKTtpZihkZXZpc0J0bil7ZGV2aXNCdG4uaHJlZj0naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS9lbi9jb250YWN0LXVzLyc7ZGV2aXNCdG4udGV4dENvbnRlbnQ9J1JFUVVFU1QgQSBRVU9URSd9fQp2YXIgY3VycmVudFVybD13aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKC9cLyQvLCcnKTt2YXIgbmF2TGlua3M9aGVhZGVySW5uZXIucXVlcnlTZWxlY3RvckFsbCgnLnFvZGVmLWhlYWRlci1uYXZpZ2F0aW9uIC5tZW51LWl0ZW0gPiBhJyk7bmF2TGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rKXt2YXIgbGlua1VybD1saW5rLmhyZWYucmVwbGFjZSgvXC8kLywnJyk7aWYobGlua1VybD09PWN1cnJlbnRVcmwpe2xpbmsucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJyZW50LW1lbnUtaXRlbScpfQp2YXIgc3ViTGlua3M9bGluay5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdWItbWVudSAubWVudS1pdGVtID4gYScpO3N1YkxpbmtzLmZvckVhY2goZnVuY3Rpb24oc3ViTGluayl7aWYoc3ViTGluay5ocmVmLnJlcGxhY2UoL1wvJC8sJycpPT09Y3VycmVudFVybCl7bGluay5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnJlbnQtbWVudS1hbmNlc3RvcicpO3N1YkxpbmsucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJyZW50LW1lbnUtaXRlbScpfX0pfSl9LDEwMCl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYmFubmVyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xb2RlZi1pbnRlcmFjdGl2ZS1iYW5uZXJzJyk7aWYoIWJhbm5lcilyZXR1cm47aWYoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdob21lJykpcmV0dXJuO2lmKHdpbmRvdy5pbm5lcldpZHRoPD0xMDI0KXJldHVybjt2YXIgaXRlbXM9YmFubmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xb2RlZi1pYi1pdGVtJyk7aWYoaXRlbXMubGVuZ3RoPT09MClyZXR1cm47dmFyIGltYWdlc0hvbGRlcj1iYW5uZXIucXVlcnlTZWxlY3RvcignLnFvZGVmLWliLWltYWdlcy1ob2xkZXInKTt2YXIgY29udGVudEhvbGRlcj1iYW5uZXIucXVlcnlTZWxlY3RvcignLnFvZGVmLWliLWNvbnRlbnQtaG9sZGVyJyk7aWYoIWNvbnRlbnRIb2xkZXIpcmV0dXJuO3ZhciB0b3RhbD1pdGVtcy5sZW5ndGg7dmFyIHZpc2libGU9NTt2YXIgY3VycmVudD0wO3ZhciBiYW5uZXJXaWR0aD1iYW5uZXIub2Zmc2V0V2lkdGg7dmFyIGNvbHVtblB4PWJhbm5lcldpZHRoL3Zpc2libGU7aXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtKXtpdGVtLnN0eWxlLnNldFByb3BlcnR5KCd3aWR0aCcsY29sdW1uUHgrJ3B4JywnaW1wb3J0YW50Jyk7aXRlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LXdpZHRoJyxjb2x1bW5QeCsncHgnLCdpbXBvcnRhbnQnKTtpdGVtLnN0eWxlLnNldFByb3BlcnR5KCdmbGV4JywnMCAwICcrY29sdW1uUHgrJ3B4JywnaW1wb3J0YW50Jyl9KTtjb250ZW50SG9sZGVyLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5J
99ywnZmxleCcsJ2ltcG9ydGFudCcpO2NvbnRlbnRIb2xkZXIuc3R5bGUuc2V0UHJvcGVydHkoJ2ZsZXgtZGlyZWN0aW9uJywncm93JywnaW1wb3J0YW50Jyk7Y29udGVudEhvbGRlci5zdHlsZS5zZXRQcm9wZXJ0eSgnZmxleC13cmFwJywnbm93cmFwJywnaW1wb3J0YW50Jyk7Y29udGVudEhvbGRlci5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNpdGlvbicsJ3RyYW5zZm9ybSAwLjRzIGVhc2UnLCdpbXBvcnRhbnQnKTtjb250ZW50SG9sZGVyLnN0eWxlLnNldFByb3BlcnR5KCd3aWR0aCcsKGNvbHVtblB4KnRvdGFsKSsncHgnLCdpbXBvcnRhbnQnKTtjb250ZW50SG9sZGVyLnN0eWxlLnNldFByb3BlcnR5KCdwb3NpdGlvbicsJ3JlbGF0aXZlJywnaW1wb3J0YW50Jyk7Y29udGVudEhvbGRlci5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lsbC1jaGFuZ2UnLCd0cmFuc2Zvcm0nLCdpbXBvcnRhbnQnKTtiYW5uZXIuc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywnaGlkZGVuJywnaW1wb3J0YW50Jyk7YmFubmVyLnN0eWxlLnNldFByb3BlcnR5KCdwb3NpdGlvbicsJ3JlbGF0aXZlJywnaW1wb3J0YW50Jyk7dmFyIGl0ZW1IZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0LTg2LTM1O2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JyxpdGVtSGVpZ2h0KydweCcsJ2ltcG9ydGFudCcpO2l0ZW0uc3R5bGUuc2V0UHJvcGVydHkoJ21pbi1oZWlnaHQnLGl0ZW1IZWlnaHQrJ3B4JywnaW1wb3J0YW50Jyl9KTtiYW5uZXIuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsaXRlbUhlaWdodCsncHgnLCdpbXBvcnRhbnQnKTtpZihpbWFnZXNIb2xkZXIpe2ltYWdlc0hvbGRlci5zdHlsZS5kaXNwbGF5PSdub25lJ30KaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYW5uZXItbG9nby1vdmVybGF5Jykpe3ZhciBvdmVybGF5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO292ZXJsYXkuaWQ9J2Jhbm5lci1sb2dvLW92ZXJsYXknO292ZXJsYXkuaW5uZXJIVE1MPSc8aW1nIHNyYz0iaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi9sb2dvLXNsb2dhbi1zY2FsZWQucG5nIiBhbHQ9IkFUSSBFeHBvcnQiIC8+JztiYW5uZXIuYXBwZW5kQ2hpbGQob3ZlcmxheSl9CnZhciBjb2x1bW5CZ3M9W107aXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLGluZGV4KXtpdGVtLnN0eWxlLnBvc2l0aW9uPSdyZWxhdGl2ZSc7dmFyIGJnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2JnLmNsYXNzTmFtZT0naWItY29sdW1uLWJnJztiZy5zdHlsZS5jc3NUZXh0PSdwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MDtwb2ludGVyLWV2ZW50czpub25lOycrJ2JhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwczovL2lrLmltYWdla2l0LmlvL3JubG9ubWd1by9QYWdlJTIwZGUlMjBndWFyZGUlMjA1MS5wbmciKTsnKydiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7JztpdGVtLmluc2VydEJlZm9yZShiZyxpdGVtLmZpcnN0Q2hpbGQpO2NvbHVtbkJncy5wdXNoKGJnKX0pO3ZhciBkaW1tZXJzPVtdO2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7dmFyIGRpbW1lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtkaW1tZXIuc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDAuM3MgZWFzZTt6LWluZGV4OjU7cG9pbnRlci1ldmVudHM6bm9uZSc7aXRlbS5hcHBlbmRDaGlsZChkaW1tZXIpO2RpbW1lcnMucHVzaChkaW1tZXIpfSk7aXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLGluZGV4KXtpdGVtLnN0eWxlLnRyYW5zaXRpb249J3RyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UnO2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsZnVuY3Rpb24oKXtpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKG90aGVyLGkpe2lmKGkhPT1pbmRleCl7ZGltbWVyc1tpXS5zdHlsZS5iYWNrZ3JvdW5kPSdyZ2JhKDAsMCwwLDAuODUpJ31lbHNle2RpbW1lcnNbaV0uc3R5bGUuYmFja2dyb3VuZD0ncmdiYSgwLDAsMCwwKSc7b3RoZXIuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjA0KSc7b3RoZXIuc3R5bGUuekluZGV4PScxMCc7b3RoZXIuc3R5bGUub3ZlcmZsb3c9J3Zpc2libGUnO290aGVyLnN0eWxlLmJveFNoYWRvdz0nMCAwIDMwcHggcmdiYSgwLDAsMCwwLjgpJ319KX0pO2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsZnVuY3Rpb24oKXtpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKG90aGVyLGkpe2RpbW1lcnNbaV0uc3R5bGUuYmFja2dyb3VuZD0ncmdiYSgwLDAsMCwwKSc7b3RoZXIuc3R5bGUudHJhbnNmb3JtPScnO290aGVyLnN0eWxlLnpJbmRleD0nJztvdGhlci5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJztvdGhlci5zdHlsZS5ib3hTaGFkb3c9Jyd9KX0pfSk7dmFyIHByZXZCdG4sbmV4dEJ0bjtpZighYmFubmVyLnF1ZXJ5U2VsZWN0b3IoJy5pYi1uYXYtcHJldicpKXtwcmV2QnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO3ByZXZCdG4uaW5uZXJIVE1MPSdTQ1JPTEwnO3ByZXZCdG4uY2xhc3NOYW1lPSdpYi1zY3JvbGwtcGlsbCBpYi1uYXYtcHJldic7cHJldkJ0bi5zdHlsZS5jc3NUZXh0PSdwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO2xlZnQ6MTBweDt6LWluZGV4Ojk5OTk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojZmRlYzAxO2NvbG9yOiMwMDA7cGFkZGluZzoxNXB4IDEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzoycHg7Ym9yZGVyOm5vbmU7d3JpdGluZy1tb2RlOnZlcnRpY2FsLWxyO3RleHQtb3JpZW50YXRpb246dXByaWdodDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTthbmltYXRpb246c2Nyb2xsQm91bmNlTGVmdCAwLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOyc7bmV4dEJ0bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtuZXh0QnRuLmlubmVySFRNTD0nU0NST0xMJztuZXh0QnRuLmNsYXNzTmFtZT0naWItc2Nyb2xsLXBpbGwgaWItbmF2LW5leHQnO25leHRCdG4uc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtyaWdodDoxMHB4O3otaW5kZXg6OTk5OTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZGVjMDE7Y29sb3I6IzAwMDtwYWRkaW5nOjE1cHggMTBweDtib3JkZXItcmFkaXVzOjUwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOjJweDtib3JkZXI6bm9uZTt3cml0aW5nLW1vZGU6dmVydGljYWwtbHI7dGV4dC1vcmllbnRhdGlvbjp1cHJpZ2h0O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2FuaW1hdGlvbjpzY3JvbGxCb3VuY2VSaWdodCAwLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOyc7YmFubmVyLmFwcGVuZENoaWxkKHByZXZCdG4pO2Jhbm5lci5hcHBlbmRDaGlsZChuZXh0QnRuKX1lbHNle3ByZXZCdG49YmFubmVyLnF1ZXJ5U2VsZWN0b3IoJy5pYi1uYXYtcHJldicpO25leHRCdG49YmFubmVyLnF1ZXJ5U2VsZWN0b3IoJy5pYi1uYXYtbmV4dCcpfQpmdW5jdGlvbiBhcHBseUxheW91dCgpe2Jhbm5lcldpZHRoPWJhbm5lci5vZmZzZXRXaWR0aDtjb2x1bW5QeD1iYW5uZXJXaWR0aC92aXNpYmxlO2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLGNvbHVtblB4KydweCcsJ2ltcG9ydGFudCcpO2l0ZW0uc3R5bGUuc2V0UHJvcGVydHkoJ21heC13aWR0aCcsY29sdW1uUHgrJ3B4JywnaW1wb3J0YW50Jyk7aXRlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZmxleCcsJzAgMCAnK2NvbHVtblB4KydweCcsJ2ltcG9ydGFudCcpfSk
997Y29udGVudEhvbGRlci5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLChjb2x1bW5QeCp0b3RhbCkrJ3B4JywnaW1wb3J0YW50Jyk7Y29udGVudEhvbGRlci5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywndHJhbnNsYXRlWCgtJysoY3VycmVudCpjb2x1bW5QeCkrJ3B4KScsJ2ltcG9ydGFudCcpO3ZhciBuZXdJdGVtSGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodC04Ni0zNTtpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsbmV3SXRlbUhlaWdodCsncHgnLCdpbXBvcnRhbnQnKTtpdGVtLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JyxuZXdJdGVtSGVpZ2h0KydweCcsJ2ltcG9ydGFudCcpfSk7YmFubmVyLnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLG5ld0l0ZW1IZWlnaHQrJ3B4JywnaW1wb3J0YW50Jyk7Y29sdW1uQmdzLmZvckVhY2goZnVuY3Rpb24oYmcsaSl7Ymcuc3R5bGUuYmFja2dyb3VuZFNpemU9KGNvbHVtblB4KnRvdGFsKSsncHggMTAwJSc7Ymcuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS0oY29sdW1uUHgqaSkrJ3B4IDAlJ30pO3ByZXZCdG4uc3R5bGUuZGlzcGxheT1jdXJyZW50PT09MD8nbm9uZSc6J2ZsZXgnO25leHRCdG4uc3R5bGUuZGlzcGxheT1jdXJyZW50Pj10b3RhbC12aXNpYmxlPydub25lJzonZmxleCd9CnByZXZCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7aWYoY3VycmVudD4wKXtjdXJyZW50LS07YXBwbHlMYXlvdXQoKX19KTtuZXh0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe2lmKGN1cnJlbnQ8dG90YWwtdmlzaWJsZSl7Y3VycmVudCsrO2FwcGx5TGF5b3V0KCl9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsYXBwbHlMYXlvdXQpO3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseUxheW91dCl9KX0sNjAwKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7aWYoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdxb2RlZi1oZWFkZXItYXBwZWFyYW5jZS0tc3RpY2t5Jykpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncW9kZWYtaGVhZGVyLWFwcGVhcmFuY2UtLXN0aWNreScpO2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncW9kZWYtY29udGVudC1iZWhpbmQtaGVhZGVyJyl9fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3BhZ2UtaWQtMTAyNycpKXJldHVybjt2YXIgaGludD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtoaW50LmNsYXNzTmFtZT0nc2Nyb2xsLWRvd24taGludCc7aGludC5pbm5lckhUTUw9J1NDUk9MTCBET1dOJztoaW50LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaW50KTtmdW5jdGlvbiB1cGRhdGVIaW50KCl7aWYoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ21zLXZpZXdpbmctMicpKXtoaW50LnN0eWxlLm9wYWNpdHk9JzAnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nbm9uZSd9ZWxzZXtoaW50LnN0eWxlLm9wYWNpdHk9JzEnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nYXV0byd9fQpoaW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3ZhciBldmVudD1uZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicse2tleUNvZGU6NDAsd2hpY2g6NDAsYnViYmxlczohMH0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpfSk7dmFyIG9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHVwZGF0ZUhpbnQpO29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WydjbGFzcyddfSk7dXBkYXRlSGludCgpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3BhZ2UtaWQtNzAzMCcpKXJldHVybjt2YXIgaGludD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtoaW50LmNsYXNzTmFtZT0nc2Nyb2xsLWRvd24taGludCc7aGludC5pbm5lckhUTUw9J1NDUk9MTCBET1dOJztoaW50LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaW50KTtmdW5jdGlvbiB1cGRhdGVIaW50KCl7aWYoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ21zLXZpZXdpbmctMScpKXtoaW50LnN0eWxlLm9wYWNpdHk9JzAnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nbm9uZSd9ZWxzZXtoaW50LnN0eWxlLm9wYWNpdHk9JzEnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nYXV0byd9fQpoaW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3ZhciBldmVudD1uZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicse2tleUNvZGU6NDAsd2hpY2g6NDAsYnViYmxlczohMH0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpfSk7dmFyIG9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHVwZGF0ZUhpbnQpO29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WydjbGFzcyddfSk7dXBkYXRlSGludCgpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3BhZ2UtaWQtNTY2NycpKXJldHVybjt2YXIgaGludD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtoaW50LmNsYXNzTmFtZT0nc2Nyb2xsLWRvd24taGludCc7aGludC5pbm5lckhUTUw9J1NDUk9MTCBET1dOJztoaW50LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaW50KTtmdW5jdGlvbiB1cGRhdGVIaW50KCl7aWYoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ21zLXZpZXdpbmctMScpKXtoaW50LnN0eWxlLm9wYWNpdHk9JzAnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nbm9uZSd9ZWxzZXtoaW50LnN0eWxlLm9wYWNpdHk9JzEnO2hpbnQuc3R5bGUucG9pbnRlckV2ZW50cz0nYXV0byd9fQpoaW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3ZhciBldmVudD1uZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicse2tleUNvZGU6NDAsd2hpY2g6NDAsYnViYmxlczohMH0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpfSk7dmFyIG9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHVwZGF0ZUhpbnQpO29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WydjbGFzcyddfSk7dXBkYXRlSGludCgpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3BhZ2UtaWQtMjE3NCcpKXJldHVybjt2YXIgaGludD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtoaW50LmNsYXNzTmFtZT0nc2Nyb2xsLWRvd24taGludCc7aGludC5pbm5lckhUTUw9J1NDUk9MTCBET1dOJztoaW50LnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoaW50KTtoaW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3dpbmRvdy5zY3JvbGxCeSh7dG9wOndpbmRvdy5pbm5lckhlaWdodCxiZWhhdmlvcjonc21vb3RoJ30pfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsZnVuY3Rpb24oKXtpZih3aW5kb3cuc2Nyb2xsWT4xMDApe2hpbnQuc3R5bGUub3BhY2l0eT0nMCc7aGludC5zdHlsZS5wb2ludGVyRXZlbnRzPSdub25lJ31lbHNle2hpbnQuc3R5bGUub3BhY2l0eT0nMSc7aGludC5zdHlsZS5wb2ludGVyRXZlbnRzPSdhdXRvJ319KX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7aWYoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWlkLTU2NjUnKSlyZXR1cm47dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7c3R5bGUuaW5uZXJIVE1MPScubXMtc2VjdGlvbiB7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOyB9Jztkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1zLXNlY3Rpb24nKS5mb3JFYWNoKGZ1bmN0aW9uKHNlY3Rpb24pe3NlY3Rpb24uc3R5bGUub3BhY2l0eT0nMSd9KX0sNjAwKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7aWYoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWlkLTkyMycpKXJldHVybjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHNlbGVjdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0Jyk7aWYoIXNlbGVjdClyZXR1cm47WzEsMjNdLmZvckVhY2goZnVuY3Rpb24oaWQpe3ZhciBvcHRpb249c2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJ29wdGlvblt2YWx1ZT0iJytpZCsnIl0nKTtpZihvcHRpb24pb3B0aW9uLnJlbW92ZSgpO30pfSw1MDApfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPSJhbHRlcm5hdGUiXVtocmVmbGFuZ10nKTt2YXIgdXJscz17fTtsaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKGwuaHJlZmxhbmc9PT0nZnItRlInfHxsLmhyZWZsYW5nPT09J2ZyJyl1cmxzLmZyPWwuaHJlZjtpZihsLmhyZWZsYW5nPT09J2VuLUdCJ3x8bC5ocmVmbGFuZz09PSdlbicpdXJscy5lbj1sLmhyZWZ9KTtpZighdXJscy5mcnx8IXVybHMuZW4pcmV0dXJuO3ZhciBpc0ZSPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nLnN0YXJ0c1dpdGgoJ2ZyJyk7dmFyIHRhcmdldFVybD1pc0ZSP3VybHMuZW46dXJscy5mcjt2YXIgdGFyZ2V0TGFiZWw9aXNGUj8nRU4nOidGUic7dmFyIGZsYWdTcmM9aXNGUj8naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3BsdWdpbnMvdHJhbnNsYXRlcHJlc3MtbXVsdGlsaW5ndWFsL2Fzc2V0cy9mbGFncy8xeDEvZW5fR0Iuc3ZnJzonaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3BsdWdpbnMvdHJhbnNsYXRlcHJlc3MtbXVsdGlsaW5ndWFsL2Fzc2V0cy9mbGFncy8xeDEvZnJfRlIuc3ZnJztmdW5jdGlvbiBidWlsZFN3aXRjaGVyKGV4dHJhQ2xhc3Mpe3ZhciBuYXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO25hdi5ocmVmPXRhcmdldFVybDtuYXYuY2xhc3NOYW1lPSdxb2RlZi1sYW5nLXN3aXRjaGVyICcrZXh0cmFDbGFzcztuYXYuc2V0QXR0cmlidXRlKCdkYXRhLW5vLXRyYW5zbGF0aW9uJywnJyk7bmF2LmlubmVySFRNTD0nPGltZyBzcmM9IicrZmxhZ1NyYysnIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHN0eWxlPSJib3JkZXItcmFkaXVzOjJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IiAvPjxzcGFuPicrdGFyZ2V0TGFiZWwrJzwvc3Bhbj4nO3JldHVybiBuYXZ9CnZhciBtb2JpbGVIZWFkZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FvZGVmLXBhZ2UtbW9iaWxlLWhlYWRlci1pbm5lcicpO3ZhciBoYW1idXJnZXI9bW9iaWxlSGVhZGVyP21vYmlsZUhlYWRlci5xdWVyeVNlbGVjdG9yKCcucW9kZWYtZnVsbHNjcmVlbi1tZW51LW9wZW5lcicpOm51bGw7aWYobW9iaWxlSGVhZGVyJiZoYW1idXJnZXIpe21vYmlsZUhlYWRlci5pbnNlcnRCZWZvcmUoYnVpbGRTd2l0Y2hlcigncW9kZWYtbGFuZy1tb2JpbGUnKSxoYW1idXJnZXIpfQp2YXIgZGVza3RvcEhlYWRlcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncW9kZWYtcGFnZS1oZWFkZXItaW5uZXInKTtpZihkZXNrdG9wSGVhZGVyKXtkZXNrdG9wSGVhZGVyLmFwcGVuZENoaWxkKGJ1aWxkU3dpdGNoZXIoJ3FvZGVmLWxhbmctZGVza3RvcCcpKX0KdmFyIHN0aWNreUhlYWRlcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucW9kZWYtaGVhZGVyLXN0aWNreS1pbm5lcicpO2lmKHN0aWNreUhlYWRlcil7c3RpY2t5SGVhZGVyLmFwcGVuZENoaWxkKGJ1aWxkU3dpdGNoZXIoJ3FvZGVmLWxhbmctZGVza3RvcCcpKX19LDYwMCl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe2lmKHdpbmRvdy5pbm5lcldpZHRoPjEwMjQpcmV0dXJuO3ZhciBpbWFnZXM9WydodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L0Fncm8tbW9iaWxlLnBuZycsJ2h0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvQlRQLW1vYmlsZS5wbmcnLCdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L01pbmllci1tb2JpbGUucG5nJywnaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi9QZXRyb2xpZXItbW9iaWxlLnBuZycsJ2h0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvRW5lcmdpZS1tb2JpbGUucG5nJywnaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi9BdXRvLW1vYmlsZS5wbmcnLCdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L0Flcm8tbW9iaWxlLnBuZycsJ2h0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvRmVycm8tbW9iaWxlLnBuZyddO3ZhciBpc0lQYWQ9d2luZG93LmlubmVyV2lkdGg+PTc2ODt2YXIgaXRlbUhlaWdodD1pc0lQYWQ/JzcwMHB4JzonNTAwcHgnO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucW9kZWYtaWItaXRlbScpLmZvckVhY2goZnVuY3Rpb24oZWwpe2VsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JyxpdGVtSGVpZ2h0LCdpbXBvcnRhbnQnKX0pO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xb2RlZi1pYi1pbWFnZS1ob2xkZXItcmVzcG9uc2l2ZScpLmZvckVhY2goZnVuY3Rpb24oZWwsaSl7aWYoaW1hZ2VzW2ldKXtlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScsJ3VybCgnK2ltYWdlc1tpXSsnKScsJ2ltcG9ydGFudCcpO2VsLnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLGl0ZW1IZWlnaHQsJ2ltcG9ydGFudCcpO2VsLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCdjb3ZlcicsJ2ltcG9ydGFudCcpO2VsLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywnY2VudGVyIGNlbnRlcicsJ2ltcG9ydGFudCcpO2VsLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXJlcGVhdCcsJ25vLXJlcGVhdCcsJ2ltcG9ydGFudCcpfX0pO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xb2RlZi1pYi1pdGVtLXNtYWxsLWltYWdlIGltZycpLmZvckVhY2goZnVuY3Rpb24oaW1nKXtpbWcuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCdub25lJywnaW1wb3J0YW50Jyl9KX0sNjAwKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7aWYod2luZG93LmlubmVyV2lkdGg+MTAyNClyZXR1cm47ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNjcm9sbC1kb3duLWhpbnQnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXtlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsJ25vbmUnLCdpbXBvcnRhbnQnKX0pO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pYi1zY3JvbGwtcGlsbCcpLmZvckVhY2goZnVuY3Rpb24oZWwpe2VsLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5J
99ywnbm9uZScsJ2ltcG9ydGFudCcpfSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe2lmKHdpbmRvdy5pbm5lcldpZHRoPjEwMjQpcmV0dXJuO2lmKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygncGFnZS1pZC0xMDI3JykpcmV0dXJuO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdnNzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xb2RlZi12c3MtcmVzcG9uc2l2ZScpO2lmKCF2c3MpcmV0dXJuO3ZhciBjaGlsZHJlbj1BcnJheS5mcm9tKHZzcy5jaGlsZHJlbik7dmFyIGxhc3Q9Y2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoLTFdO3ZhciBzZWNvbmRMYXN0PWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aC0yXTtpZihsYXN0JiZzZWNvbmRMYXN0KXt2c3MuaW5zZXJ0QmVmb3JlKGxhc3Qsc2Vjb25kTGFzdCl9fSw2MDApfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHN3aXBlcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZWxlbWVudG9yLWVsZW1lbnQtYzJlMzJlZSAucW9kZWYtcWktc3dpcGVyLWNvbnRhaW5lcicpO2lmKHN3aXBlciYmc3dpcGVyLnN3aXBlcil7c3dpcGVyLnN3aXBlci5zbGlkZVRvTG9vcCgwLDAsITEpfX0sMTIwMCl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe3ZhciBzcGxpdFNsaWRlclBhZ2VzPVs3MDMwLDEwMjcsNTY2Nyw1NjY1LDU2NjZdO3ZhciBvblNwbGl0UGFnZT1zcGxpdFNsaWRlclBhZ2VzLnNvbWUoZnVuY3Rpb24oaWQpe3JldHVybiBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZS5pbmRleE9mKCdwYWdlLWlkLScraWQpIT09LTF9KTtpZighb25TcGxpdFBhZ2UpcmV0dXJuO2Z1bmN0aW9uIHN5bmNWaWRlb1Zpc2liaWxpdHkoKXt2YXIgc2VjdGlvbnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1zLXJpZ2h0IC5tcy1zZWN0aW9uJyk7c2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzZWN0aW9uKXt2YXIgdmlkZW89c2VjdGlvbi5xdWVyeVNlbGVjdG9yKCd2aWRlbycpO2lmKCF2aWRlbylyZXR1cm47aWYoc2VjdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKXt2aWRlby5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsJ3Zpc2libGUnLCdpbXBvcnRhbnQnKTt2aWRlby5zdHlsZS5zZXRQcm9wZXJ0eSgnb3BhY2l0eScsJzEnLCdpbXBvcnRhbnQnKTtpZih2aWRlby5wYXVzZWQpdmlkZW8ucGxheSgpO31lbHNle3ZpZGVvLnN0eWxlLnNldFByb3BlcnR5KCd2aXNpYmlsaXR5JywnaGlkZGVuJywnaW1wb3J0YW50Jyk7dmlkZW8uc3R5bGUuc2V0UHJvcGVydHkoJ29wYWNpdHknLCcwJywnaW1wb3J0YW50Jyk7dmlkZW8ucGF1c2UoKX19KX0KdmFyIG9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHN5bmNWaWRlb1Zpc2liaWxpdHkpO29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WydjbGFzcyddfSk7c2V0VGltZW91dChzeW5jVmlkZW9WaXNpYmlsaXR5LDYwMCk7c2V0VGltZW91dChzeW5jVmlkZW9WaXNpYmlsaXR5LDE1MDApO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxzeW5jVmlkZW9WaXNpYmlsaXR5KX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7dmFyIHNwbGl0U2xpZGVyUGFnZXM9WzcwMzAsMTAyNyw1NjY3LDU2NjUsNTY2Nl07dmFyIG9uU3BsaXRQYWdlPXNwbGl0U2xpZGVyUGFnZXMuc29tZShmdW5jdGlvbihpZCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lLmluZGV4T2YoJ3BhZ2UtaWQtJytpZCkhPT0tMX0pO2lmKCFvblNwbGl0UGFnZSlyZXR1cm47ZnVuY3Rpb24gaGFuZGxlVW5pZmllZExheW91dCgpe3ZhciBhY3RpdmVTZWN0aW9uPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tcy1sZWZ0IC5tcy1zZWN0aW9uLmFjdGl2ZScpO2lmKCFhY3RpdmVTZWN0aW9uKXJldHVybjt2YXIgaXNVbmlmaWVkPWFjdGl2ZVNlY3Rpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCdxb2RlZi1tLXNsaWRlLXVuaWZpZWQnKTt2YXIgbXNMZWZ0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tcy1sZWZ0Jyk7dmFyIG1zUmlnaHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1zLXJpZ2h0Jyk7aWYoIW1zTGVmdHx8IW1zUmlnaHQpcmV0dXJuO2lmKGlzVW5pZmllZCl7bXNMZWZ0LnN0eWxlLnNldFByb3BlcnR5KCd3aWR0aCcsJzEwMCUnLCdpbXBvcnRhbnQnKTttc1JpZ2h0LnN0eWxlLnNldFByb3BlcnR5KCd3aWR0aCcsJzUwJScsJ2ltcG9ydGFudCcpO21zUmlnaHQuc3R5bGUuc2V0UHJvcGVydHkoJ29wYWNpdHknLCcwJywnaW1wb3J0YW50Jyk7bXNSaWdodC5zdHlsZS5zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsJ2hpZGRlbicsJ2ltcG9ydGFudCcpO21zUmlnaHQuc3R5bGUuc2V0UHJvcGVydHkoJ3BvaW50ZXItZXZlbnRzJywnbm9uZScsJ2ltcG9ydGFudCcpfWVsc2V7bXNMZWZ0LnN0eWxlLnNldFByb3BlcnR5KCd3aWR0aCcsJzUwJScsJ2ltcG9ydGFudCcpO21zUmlnaHQuc3R5bGUuc2V0UHJvcGVydHkoJ3dpZHRoJywnNTAlJywnaW1wb3J0YW50Jyk7bXNSaWdodC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3BhY2l0eScsJzEnLCdpbXBvcnRhbnQnKTttc1JpZ2h0LnN0eWxlLnNldFByb3BlcnR5KCd2aXNpYmlsaXR5JywndmlzaWJsZScsJ2ltcG9ydGFudCcpO21zUmlnaHQuc3R5bGUuc2V0UHJvcGVydHkoJ3BvaW50ZXItZXZlbnRzJywnYXV0bycsJ2ltcG9ydGFudCcpfX0KdmFyIG9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGhhbmRsZVVuaWZpZWRMYXlvdXQpO29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WydjbGFzcyddfSk7c2V0VGltZW91dChoYW5kbGVVbmlmaWVkTGF5b3V0LDYwMCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGhhbmRsZVVuaWZpZWRMYXlvdXQpfSk7KGZ1bmN0aW9uKCl7dmFyIHZzc1BhZ2VJZHM9WydwYWdlLWlkLTEwMTU4JywncGFnZS1pZC0xMDQ3NicsJ3BhZ2UtaWQtMTA0NzcnLCdwYWdlLWlkLTEwNDc4J107aWYoIXZzc1BhZ2VJZHMuc29tZShmdW5jdGlvbihpZCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGlkKX0pKXJldHVybjt2YXIgdnNzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdGktdnNzJyk7dmFyIHRyYWNrTGVmdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXRpLXZzcy10cmFjay1pcy1sZWZ0Jyk7dmFyIHRyYWNrUmlnaHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF0aS12c3MtdHJhY2staXMtcmlnaHQnKTt2YXIgcGFuZWxzVW5pZmllZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXRpLXZzcy1wYW5lbC1pcy11bmlmaWVkJyk7dmFyIHBhbmVsQ292ZXIxPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbGVtZW50b3ItZWxlbWVudC03MzczMDgxJyl8fHBhbmVsc1VuaWZ
99pZWRbMF18fG51bGw7dmFyIHBhbmVsQ292ZXIyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbGVtZW50b3ItZWxlbWVudC04ZTQ1MjhhJyl8fG51bGw7aWYoIXZzc3x8IXRyYWNrTGVmdHx8IXRyYWNrUmlnaHQpcmV0dXJuO3ZhciBtcURlc2t0b3A9d2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEwMjVweCknKTtmdW5jdGlvbiBpc0Rlc2t0b3AoKXtyZXR1cm4gbXFEZXNrdG9wLm1hdGNoZXN9CmZ1bmN0aW9uIGNsZWFySW5saW5lTW90aW9uKCl7W3RyYWNrTGVmdCx0cmFja1JpZ2h0LHBhbmVsQ292ZXIxLHBhbmVsQ292ZXIyXS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXtpZighZWwpcmV0dXJuO2VsLnN0eWxlLnRyYW5zZm9ybT0nJztlbC5zdHlsZS5vcGFjaXR5PScnO2VsLnN0eWxlLnBvaW50ZXJFdmVudHM9Jyd9KTtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZPScnfQp2YXIgY3VycmVudFNuYXA9MDt2YXIgdG90YWxTbmFwcz1wYW5lbENvdmVyMj8yOjE7dmFyIGlzU25hcHBpbmc9ITE7dmFyIG1vdGlvbkNsZWFyZWQ9ITE7ZnVuY3Rpb24gZ2V0VnNzRG9jVG9wKCl7cmV0dXJuIHZzcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ard2luZG93LnBhZ2VZT2Zmc2V0fQpmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0KXtyZXR1cm4gdDwwLjU/NCp0KnQqdDoxLU1hdGgucG93KC0yKnQrMiwzKS8yfQpmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbnMoKXtpZighaXNEZXNrdG9wKCkpe2lmKCFtb3Rpb25DbGVhcmVkKXtjbGVhcklubGluZU1vdGlvbigpO21vdGlvbkNsZWFyZWQ9ITB9CnJldHVybn0KbW90aW9uQ2xlYXJlZD0hMTt2YXIgcHJvZ3Jlc3M9TWF0aC5tYXgoMCxNYXRoLm1pbigtdnNzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC93aW5kb3cuaW5uZXJIZWlnaHQsdG90YWxTbmFwcykpO3ZhciBwQT1NYXRoLm1pbihwcm9ncmVzcywxKTt2YXIgcEI9TWF0aC5tYXgoMCxwcm9ncmVzcy0xKTt2YXIgZUE9ZWFzZUluT3V0Q3ViaWMocEEpO3ZhciBlQj1lYXNlSW5PdXRDdWJpYyhwQik7dHJhY2tMZWZ0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgwKSc7dHJhY2tSaWdodC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTIwMHZoKSc7aWYocGFuZWxDb3ZlcjEpe3BhbmVsQ292ZXIxLnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgnKygoMS1lQSkqMTAwKSsndmgpJztwYW5lbENvdmVyMS5zdHlsZS5vcGFjaXR5PScxJztwYW5lbENvdmVyMS5zdHlsZS5wb2ludGVyRXZlbnRzPShlQT4wLjg1JiZwQjw9MCk/J2F1dG8nOidub25lJ30KaWYocGFuZWxDb3ZlcjIpe3BhbmVsQ292ZXIyLnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgnKygoMS1lQikqMTAwKSsndmgpJztwYW5lbENvdmVyMi5zdHlsZS5vcGFjaXR5PScxJztwYW5lbENvdmVyMi5zdHlsZS5wb2ludGVyRXZlbnRzPWVCPjAuODU/J2F1dG8nOidub25lJ30KaWYocHJvZ3Jlc3M+PS0wLjEmJnByb2dyZXNzPD10b3RhbFNuYXBzKzAuNSl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WT0naGlkZGVuJ31lbHNle2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1k9Jyd9fQpmdW5jdGlvbiBzbmFwVG8oaW5kZXgpe2lmKCFpc0Rlc2t0b3AoKSlyZXR1cm47aWYoaXNTbmFwcGluZylyZXR1cm47aW5kZXg9TWF0aC5tYXgoMCxNYXRoLm1pbih0b3RhbFNuYXBzLGluZGV4KSk7aWYoaW5kZXg9PT1jdXJyZW50U25hcClyZXR1cm47Y3VycmVudFNuYXA9aW5kZXg7aXNTbmFwcGluZz0hMDt2YXIgdmg9d2luZG93LmlubmVySGVpZ2h0O3ZhciB0YXJnZXQ9Z2V0VnNzRG9jVG9wKCkrKGluZGV4KnZoKTt3aW5kb3cuc2Nyb2xsVG8oe3RvcDp0YXJnZXQsYmVoYXZpb3I6J3Ntb290aCd9KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aXNTbmFwcGluZz0hMTt1cGRhdGVIaW50KCl9LDcwMCl9CnZhciBpc0xvZ2lzdGlxdWUyPWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWlkLTEwNDc3Jyk7dmFyIHZzc0hpbnQ9bnVsbDtpZighaXNMb2dpc3RpcXVlMil7dnNzSGludD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTt2c3NIaW50LmNsYXNzTmFtZT0nc2Nyb2xsLWRvd24taGludCc7dnNzSGludC50ZXh0Q29udGVudD0nU0NST0xMIERPV04nO3Zzc0hpbnQuc3R5bGUub3BhY2l0eT0nMCc7dnNzSGludC5zdHlsZS50cmFuc2l0aW9uPSdvcGFjaXR5IDAuM3MgZWFzZSc7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2c3NIaW50KTt2c3NIaW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe3NuYXBUbyhjdXJyZW50U25hcCsxKX0pfQpmdW5jdGlvbiB1cGRhdGVIaW50KCl7aWYoIXZzc0hpbnQpcmV0dXJuO3ZhciBwcm9ncmVzcz0tdnNzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC93aW5kb3cuaW5uZXJIZWlnaHQ7dmFyIGluc2lkZVpvbmU9cHJvZ3Jlc3M+LTAuMiYmcHJvZ3Jlc3M8dG90YWxTbmFwcyswLjU7dmFyIG9uTGFzdFNuYXA9cHJvZ3Jlc3M+PXRvdGFsU25hcHMtMC4wNTt2YXIgc2hvdz1pc0Rlc2t0b3AoKSYmaW5zaWRlWm9uZSYmIW9uTGFzdFNuYXA7dmFyIHBhaXI9dnNzSGludC5wYXJlbnROb2RlJiZ2c3NIaW50LnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdGktcGlsbC1wYWlyJyk/dnNzSGludC5wYXJlbnROb2RlOm51bGw7dmFyIGhvc3Q9cGFpcnx8dnNzSGludDtob3N0LnN0eWxlLm9wYWNpdHk9c2hvdz8nMSc6JzAnO2hvc3Quc3R5bGUucG9pbnRlckV2ZW50cz1zaG93PydhdXRvJzonbm9uZSc7aWYocGFpcilwYWlyLmNsYXNzTGlzdC50b2dnbGUoJ2F0aS1waWxsLXBhaXItLXBhaXJlZCcscHJvZ3Jlc3M+PTAuNSk7fQp2YXIgd2hlZWxUaW1lcj1udWxsO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsZnVuY3Rpb24oZSl7aWYoIWlzRGVza3RvcCgpKXJldHVybjt2YXIgcmVjdD12c3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHZoPXdpbmRvdy5pbm5lckhlaWdodDt2YXIgcHJvZ3Jlc3M9LXJlY3QudG9wL3ZoO2lmKHByb2dyZXNzPC0wLjJ8fHByb2dyZXNzPnRvdGFsU25hcHMrMC41KXJldHVybjtlLnByZXZlbn
99REZWZhdWx0KCk7aWYod2hlZWxUaW1lcilyZXR1cm47d2hlZWxUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2hlZWxUaW1lcj1udWxsfSwxMzApO3NuYXBUbyhlLmRlbHRhWT4wP2N1cnJlbnRTbmFwKzE6Y3VycmVudFNuYXAtMSl9LHtwYXNzaXZlOiExfSk7dmFyIHRvdWNoU3RhcnRZPTA7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLGZ1bmN0aW9uKGUpe3RvdWNoU3RhcnRZPWUudG91Y2hlc1swXS5jbGllbnRZfSx7cGFzc2l2ZTohMH0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsZnVuY3Rpb24oZSl7aWYoIWlzRGVza3RvcCgpKXJldHVybjt2YXIgcmVjdD12c3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHZoPXdpbmRvdy5pbm5lckhlaWdodDt2YXIgcHJvZ3Jlc3M9LXJlY3QudG9wL3ZoO2lmKHByb2dyZXNzPC0wLjJ8fHByb2dyZXNzPnRvdGFsU25hcHMrMC41KXJldHVybjt2YXIgZHk9dG91Y2hTdGFydFktZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO2lmKE1hdGguYWJzKGR5KTwzMClyZXR1cm47c25hcFRvKGR5PjA/Y3VycmVudFNuYXArMTpjdXJyZW50U25hcC0xKX0se3Bhc3NpdmU6ITB9KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7aWYoIWlzRGVza3RvcCgpKXJldHVybjt2YXIgcmVjdD12c3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHZoPXdpbmRvdy5pbm5lckhlaWdodDt2YXIgcHJvZ3Jlc3M9LXJlY3QudG9wL3ZoO2lmKHByb2dyZXNzPC0wLjJ8fHByb2dyZXNzPnRvdGFsU25hcHMrMC41KXJldHVybjtpZihlLmtleT09PSdBcnJvd0Rvd24nfHxlLmtleT09PSdQYWdlRG93bid8fGUua2V5PT09JyAnKXtlLnByZXZlbnREZWZhdWx0KCk7c25hcFRvKGN1cnJlbnRTbmFwKzEpfWVsc2UgaWYoZS5rZXk9PT0nQXJyb3dVcCd8fGUua2V5PT09J1BhZ2VVcCcpe2UucHJldmVudERlZmF1bHQoKTtzbmFwVG8oY3VycmVudFNuYXAtMSl9fSk7dmFyIHRpY2tpbmc9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsZnVuY3Rpb24oKXtpZih0aWNraW5nKXJldHVybjt0aWNraW5nPSEwO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt1cGRhdGVQb3NpdGlvbnMoKTt1cGRhdGVIaW50KCk7dGlja2luZz0hMX0pfSx7cGFzc2l2ZTohMH0pO2Z1bmN0aW9uIHN5bmNUb1Njcm9sbFBvc2l0aW9uKCl7aWYoIWlzRGVza3RvcCgpKXtjbGVhcklubGluZU1vdGlvbigpO3JldHVybn0KdmFyIHZoPXdpbmRvdy5pbm5lckhlaWdodDt2YXIgcmVjdD12c3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHByb2dyZXNzPU1hdGgubWF4KDAsLXJlY3QudG9wL3ZoKTtjdXJyZW50U25hcD1NYXRoLnJvdW5kKE1hdGgubWluKHByb2dyZXNzLHRvdGFsU25hcHMpKTt1cGRhdGVQb3NpdGlvbnMoKTt1cGRhdGVIaW50KCl9CmlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0nY29tcGxldGUnKXtzeW5jVG9TY3JvbGxQb3NpdGlvbigpfWVsc2V7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLHN5bmNUb1Njcm9sbFBvc2l0aW9uKX0Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdXBkYXRlUG9zaXRpb25zKTtpZihtcURlc2t0b3AuYWRkRXZlbnRMaXN0ZW5lcil7bXFEZXNrdG9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZnVuY3Rpb24oKXtjdXJyZW50U25hcD0wO2lmKGlzRGVza3RvcCgpKXtzeW5jVG9TY3JvbGxQb3NpdGlvbigpfWVsc2V7Y2xlYXJJbmxpbmVNb3Rpb24oKTt1cGRhdGVIaW50KCl9fSl9fSkoKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe2lmKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygncGFnZS1pZC0xMDIyMicpKXJldHVybjt2YXIgYmFubmVyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xb2RlZi1pbnRlcmFjdGl2ZS1iYW5uZXJzJyk7aWYoIWJhbm5lcilyZXR1cm47dmFyIHdpZGdldENvbnRhaW5lcj1iYW5uZXIuY2xvc2VzdCgnLmVsZW1lbnRvci13aWRnZXQtY29udGFpbmVyJyk7aWYoIXdpZGdldENvbnRhaW5lcilyZXR1cm47dmFyIGNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb250YWluZXIuY2xhc3NOYW1lPSdhdGktaG9tZS12aWRlby1jb250YWluZXInO3ZhciB2aWRlbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO3ZpZGVvLnNyYz0naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOC9ub3V2ZWxsZS12aWRlby1kZS1nYXJkZTQubXA0Jzt2aWRlby5hdXRvcGxheT0hMDt2aWRlby5tdXRlZD0hMDt2aWRlby5sb29wPSEwO3ZpZGVvLnBsYXlzSW5saW5lPSEwO2NvbnRhaW5lci5hcHBlbmRDaGlsZCh2aWRlbyk7d2lkZ2V0Q29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcil9KQ==" defer></script>
99<style class="wpcode-css-snippet">/* ============================================================ 100 ATI EXPORT - ADDITIONAL CSS 101 Breakpoints: 480px | 768px | 1024px | 1279px | 1280px+ 102 Brand: Yellow #fdec01 | Red #e1312d | Black #000000 103 ------------------------------------------------------------ 104 HOW TO FIND THINGS IN THIS FILE 105 Every rule block carries a [TAG]. Ctrl+F the tag to jump to it. 106 Tag format: [AREA-WHAT] - AREA = page/section, WHAT = the job. 107 108 TAG INDEX 109 [GLOBAL-*] 1. Global / page wrapper 110 [HDR-*] 2. Header desktop 111 [STICKY-*] 3. Header sticky 112 [MOBHDR-*] 4. Header mobile 113 [LANG-*] 5. Language switcher 114 [DEVIS-*] 6. Demande de devis button 115 [BANNER-*] 7. Homepage banner (sector cards) 116 [MARQUEE-*] 8. Logos carousel 117 [HERO-*] 9. Inner page heroes 118 [SPLIT-*] 10. Split slider pages (old stack - delete Phase 7) 119 [QSN-*] 11. Qui Sommes Nous 120 [ICONS-*] 12. Sector pages icon rows 121 [SIDENAV-*] 13. Secteurs sidebar nav 122 [FORM-*] 14. Forms (CF7) 123 [JOBS-*] 15. Recrutement jobs table 124 [FOOTER-*] 16. Footer 125 [ACTU-*] 17. Actualites page 126 [VSS-*] 18. New VSS pages (10158) 127 [VIDHOME-*] 19. Homepage video variant (10222) 128 ============================================================ */ 129 130 131/* ============================================================ 132 1. GLOBAL / PAGE WRAPPER 133 ============================================================ */ 134 135/* [GLOBAL-MINHEIGHT] Fill full viewport to prevent gap at bottom */ 136#qodef-page-wrapper { 137 min-height: 100vh !important; 138} 139 140/* [GLOBAL-GAPFIX] Remove theme gap below inner page hero. 141 NOTE: the 10px here is what VSS must zero out - see [VSS-PADRESET]. */ 142#qodef-page-content { 143 padding-top: 10px !important; 144} 145#qodef-page-inner { 146 padding-top: 0 !important; 147} 148.qodef-page-content-section { 149 padding-top: 0 !important; 150} 151 152/* [GLOBAL-STRETCHFLASH] Fix Elementor full-width section flash on load */ 153.elementor-section.elementor-section-stretched { 154 width: 100vw !important; 155 max-width: 100vw !important; 156 margin-left: calc(-1 * (100vw - 100%) / 2) !important; 157} 158 159/* [GLOBAL-BACKTOTOP] Back to top button - moved to bottom left */ 160#qodef-back-to-top { 161 left: 30px !important; 162 right: auto !important; 163} 164 165 166/* ============================================================ 167 2. HEADER - DESKTOP 168 ============================================================ */ 169 170/* [HDR-HIDETOP] Hide theme top bar and search icon */ 171#qodef-top-area { 172 display: none !important; 173} 174.qodef-header-search-opener, 175.qodef-search-opener, 176#qodef-search-opener { 177 display: none !important; 178} 179 180/* [HDR-INNERFLEX] Header inner: flex row, logo pinned left. 181 Session 38: extended to .qodef-header-sticky-inner too. The sticky header 182 is a separate DOM subtree from the standard one (see [HDR-LOGO-VSS]'s 183 note) and was never given this flex/alignment treatment. Standard is the 184 source of truth here (opposite direction from [DEVIS-BASE]'s Session 38 185 resize, where sticky was the source). CONFIRMED CORRECT AND NECESSARY by 186 live measurement: with this in place, `#qodef-page-header-inner` and 187 `.qodef-header-sticky-inner` measured pixel-identical (same left/width/ 188 display/position). It just wasn't the *whole* fix - see [STICKY-NAVHOME] 189 for the other, separate 26px this session tracked down the same way. */ 190#qodef-page-header-inner, 191.qodef-header-sticky-inner { 192 display: flex !important; 193 align-items: center !important; 194 justify-content: flex-start !important; 195 position: relative !important; 196} 197 198/* [HDR-INNERWIDTH] Fix header width on inner pages (not homepage). 199 Session 38: same extension to .qodef-header-sticky-inner as above. */ 200.page:not(.home) #qodef-page-header-inner, 201.single #qodef-page-header-inner, 202.page:not(.home) .qodef-header-sticky-inner, 203.single .qodef-header-sticky-inner { 204 width: 100% !important; 205 max-width: 100% !important; 206} 207 208/* [HDR-LOGO] Logo sizing and spacing */ 209.qodef-header-logo-link { 210 flex-shrink: 0 !important; 211 margin-right: 30px !important; 212} 213.qodef-header-logo-link img { 214 max-width: 80px !important; 215 height: auto !important; 216} 217.home .qodef-header-logo-link { 218 margin-left: -40px !important; 219} 220/* [HDR-LOGO-VSS] Session 35 - the VSS pages are :not(.home), so they miss the 221 homepage's -40px logo pull and their STANDARD header logo sits 40px too far 222 right. Match the homepage on the 4 VSS pages, plus Mentions Legales 223 (page-id-10926, Session 41). 224 REVERTED a broader `body:not(.home)` version same session, same day - it 225 regressed Supply Chain (page-id-2504) and likely every other normal inner 226 page (Qui Sommes Nous, sector pages, etc.): those pages were NEVER broken 227 without the pull, so ":not(.home)" was the wrong root cause. Whatever 228 actually makes VSS pages + this new page need the pull isn't simply 229 "not home" - most :not(.home) pages are fine without it. Back to an 230 explicit list until the real shared cause is found; add new page IDs here 231 ONE AT A TIME, only after confirming that page's logo is actually 232 crowding its nav, not preemptively. 233 Session 35b: scoped to `#qodef-page-header-inner` (the STANDARD header inner) 234 ONLY. The first version targeted a bare `.qodef-header-logo-link`, which also 235 hit the STICKY header's own logo (a separate `.qodef-header-sticky` subtree, 236 already correctly positioned) and pulled it off the left edge. The sticky
237 header must stay untouched - do not broaden this selector again. */ 238body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478, .page-id-10926) #qodef-page-header-inner .qodef-header-logo-link { 239 margin-left: -40px !important; 240} 241 242/* [HDR-NAV] Navigation container. 243 WARNING: padding-right:400px below is the source of the site-wide 244 66px horizontal overflow. Normally clipped by #qodef-page-wrapper 245 overflow:hidden - but VSS pages remove that, see [VSS-OVERFLOWCLIP]. */ 246.qodef-header-navigation { 247 flex: 1 !important; 248 width: auto !important; 249 box-sizing: border-box !important; 250 padding-right: 175px !important; 251} 252.qodef-header-navigation .menu { 253 display: flex !important; 254 justify-content: flex-end !important; 255 gap: 30px !important; 256 padding: 0 !important; 257 margin: 0 !important; 258 list-style: none !important; 259} 260.qodef-header-navigation .menu > li { 261 flex: 0 0 auto !important; 262 text-align: left !important; 263} 264.qodef-header-navigation .menu > li > a { 265 color: #ffffff !important; 266 opacity: 1 !important; 267} 268.qodef-header-navigation .menu > li > a:hover { 269 color: #fdec01 !important; 270} 271 272/* [HDR-NAVPAD] Inner pages - extra right padding for the extra nav item */ 273#qodef-page-header-inner .qodef-header-navigation { 274 padding-right: 400px !important; 275} 276 277/* [HDR-WIDGETHOLDER] Widget holder - the Devis button + headset icon area */ 278.qodef-widget-holder { 279 display: flex !important; 280 align-items: center !important; 281 gap: 10px !important; 282 position: absolute !important; 283 right: 55px !important; 284 z-index: 10 !important; 285 flex-shrink: 0 !important; 286} 287 288/* [HDR-HEADSET] Headset icon - hide theme's line-bars, inject FA icon */ 289.qodef-side-area-opener--predefined { 290 display: none !important; 291} 292.qodef-side-area-opener--predefined .qodef-lines { 293 display: none !important; 294} 295.qodef-side-area-opener--predefined::before { 296 font-family: "Font Awesome 5 Free" !important; 297 content: "\f590" !important; 298 font-weight: 900 !important; 299 font-size: 20px !important; 300 color: #000000 !important; 301} 302 303/* [HDR-BLACKBG] Header background - black on all pages */ 304#qodef-page-header { 305 background-color: #000000 !important; 306} 307.home #qodef-page-header-inner .qodef-header-navigation { 308 padding-right: 300px !important; 309} 310 311/* [HDR-DROPDOWN] Dropdown arrow + hover colors */ 312.qodef-header-sticky .qodef-menu-arrow { 313 color: #1a1a1a !important; 314} 315.qodef-drop-down-second .menu-item a:hover .qodef-menu-item-text, 316.qodef-drop-down-second .current-menu-item > a .qodef-menu-item-text { 317 color: #e1312d !important; 318} 319 320/* [HDR-SPLITPAGES] Split-slider pages - nav padding + widget holder reset. 321 TO DELETE in Phase 7 once old stack is gone. */ 322body.page-id-7030 #qodef-page-header-inner .qodef-header-navigation, 323body.page-id-1027 #qodef-page-header-inner .qodef-header-navigation, 324body.page-id-5667 #qodef-page-header-inner .qodef-header-navigation, 325body.page-id-5665 #qodef-page-header-inner .qodef-header-navigation, 326body.page-id-5666 #qodef-page-header-inner .qodef-header-navigation { 327 padding-right: 400px !important; 328} 329body.page-id-7030 .qodef-widget-holder, 330body.page-id-1027 .qodef-widget-holder, 331body.page-id-5667 .qodef-widget-holder, 332body.page-id-5665 .qodef-widget-holder, 333body.page-id-5666 .qodef-widget-holder { 334 margin-right: 0 !important; 335} 336 337 338/* ============================================================ 339 3. HEADER - STICKY 340 ============================================================ */ 341 342/* [STICKY-BG] Sticky header background - black */ 343.qodef-header-sticky, 344.qodef-header-sticky-inner { 345 background-color: #000000 !important; 346} 347 348/* [STICKY-NAV] Sticky header nav colors + padding */ 349.qodef-header-sticky .qodef-header-navigation .menu > li > a { 350 color: #ffffff !important; 351} 352.qodef-header-sticky .qodef-header-navigation { 353 padding-right: 400px !important; 354} 355 356/* [STICKY-NAVHOME] Session 38 - the actual, confirmed-by-measurement cause 357 of "sticky header nav sits right of the standard header's": the theme 358 gives every top-level nav <li> `padding: 0 26px` by default, and only the 359 STANDARD header has a theme rule zeroing the first item's padding-left 360 (confirmed live: identical "Accueil" markup in both headers, but computed 361 padding-left was 0 on standard vs 26px on sticky - every other item was
362 byte-identical between the two). That one extra 26px on "Accueil" was the 363 entire gap. Fixes it directly instead of guessing at the container/flex 364 properties again (see [HDR-INNERFLEX]/[HDR-INNERWIDTH], which fixed a 365 real but separate issue earlier this session - the two header containers 366 are now confirmed pixel-identical; this was the one remaining piece). */ 367.qodef-header-sticky .qodef-header-navigation .menu > li:first-child { 368 padding-left: 0 !important; 369} 370 371/* [STICKY-DEVIS] RETIRED Session 38 - the sticky and standard headers now 372 share one .devis-fab size (see [DEVIS-BASE]), so this override became a 373 no-op. Left as a marker in case a future session wants the sticky button 374 smaller again; nothing currently depends on it. */ 375 376/* [STICKY-CONTACTICON] Contact icon shrinks in the sticky header, same 377 treatment as [STICKY-DEVIS] */ 378.qodef-header-sticky .contact-fab { 379 width: 32px !important; 380 height: 32px !important; 381} 382.qodef-header-sticky .contact-fab svg { 383 width: 15px !important; 384 height: 15px !important; 385} 386 387 388/* ============================================================ 389 4. HEADER - MOBILE 390 ============================================================ */ 391 392/* [MOBHDR-BG] Mobile header bar background */ 393#qodef-page-mobile-header { 394 background-color: #000000 !important; 395} 396 397/* [MOBHDR-OPENER] Hamburger opener colors (idle / hover / open) */ 398.qodef-fullscreen-menu-opener { 399 color: #ffffff !important; 400} 401.qodef-fullscreen-menu-opener:hover, 402.qodef-fullscreen-menu-opener:active, 403.qodef-fullscreen-menu-opener.qodef-menu-is-open { 404 color: #fdec01 !important; 405} 406.qodef-fullscreen-menu-opener .qodef-close-icon { 407 color: #000000 !important; 408} 409 410/* [MOBHDR-LINES] Side-area opener line-bars - force black */ 411.qodef-side-area-opener .qodef-line, 412#qodef-page-mobile-header .qodef-line { 413 background-color: #000000 !important; 414} 415 416/* [MOBHDR-PANEL] Open mobile menu panel - white bg, dark text */ 417#qodef-page-mobile-header .qodef-m-inner { 418 background-color: #ffffff !important; 419} 420#qodef-page-mobile-header .qodef-m-inner .qodef-menu-item-inner, 421#qodef-page-mobile-header .qodef-m-inner a { 422 color: #1a1a1a !important; 423} 424#qodef-page-mobile-header .qodef-m-inner .current-menu-item a, 425#qodef-page-mobile-header .qodef-m-inner .current-menu-ancestor > a, 426#qodef-page-mobile-header .qodef-m-inner .current-menu-parent > a { 427 color: #fdec01 !important; 428} 429 430 431/* ============================================================ 432 5. LANGUAGE SWITCHER 433 Injected by Custom JS into desktop, sticky and mobile headers. 434 ============================================================ */ 435 436/* [LANG-BASE] Switcher pill - shared styling */ 437.qodef-lang-switcher { 438 display: flex; 439 align-items: center; 440 gap: 6px; 441 color: #ffffff !important; 442 text-decoration: none !important; 443 font-size: 13px; 444 font-weight: 700; 445 letter-spacing: 1px; 446 cursor: pointer; 447} 448.qodef-lang-switcher span { 449 color: #ffffff !important; 450} 451 452/* [LANG-MOBILE] Mobile placement - sits inline before the hamburger */ 453.qodef-lang-mobile { 454 flex: 1; 455 justify-content: center; 456} 457 458/* [LANG-DESKTOP] Desktop placement - absolute, vertically centred right */ 459.qodef-lang-desktop { 460 position: absolute; 461 top: 50%; 462 transform: translateY(-50%); 463 right: 26px; 464} 465 466/* [LANG-BREAKPOINT] Show one, hide the other - 1024px split */ 467@media (min-width: 1025px) { 468 .qodef-lang-mobile { display: none !important; } 469} 470@media (max-width: 1024px) { 471 .qodef-lang-desktop { display: none !important; } 472} 473 474 475/* ============================================================ 476 6. DEMANDE DE DEVIS BUTTON 477 Injected by Custom JS into every .qodef-widget-holder. 478 ============================================================ */ 479 480/* [DEVIS-BASE] Button - yellow outline, transparent fill. 481 Session 38: resized to match what [STICKY-DEVIS] used to shrink it to in 482 the sticky header (200px/13px/15px padding -> 160px/11px/10px padding) - 483 the two headers now use one size. Requested once the contact icon was 484 added and made the standard header's larger button crowd the nav. */ 485.devis-fab { 486 position: relative !important; 487 bottom: auto !important; 488 right: auto !important; 489 width: 160px !important; 490 height: 45px !important; 491 border-radius: 4px !important; 492 border: 2px solid #fdec01 !important; 493 background-color: transparent !important; 494 color: #ffffff !important; 495 font-size: 11px !important; 496 font-weight: 700 !important; 497 letter-spacing: 0.5px !important; 498 text-decoration: none !important; 499 display: inline-flex !important; 500 align-items: center !important; 501 justify-content: space-between !important; 502 padding: 0 10px !important; 503 box-shadow: none !important; 504 transition: background-color 0.2s ease, color 0.2s ease !important; 505 z-index: 10 !important; 506} 507 508/* [DEVIS-HOVER] Invert on hover - yellow fill, black text */ 509.devis-fab:hover { 510 background-color: #fdec01 !important; 511 color: #000000 !important; 512} 513 514/* [DEVIS-ARROW] Trailing arrow icon. Restored Session 28 - regression: this 515 rule was entirely missing (button had zero icon markup, [DEVIS-BASE]'s 516 justify-content:space-between was pushing against nothing). Same pattern 517 as the working [HDR-HEADSET] icon - requires Font Awesome 5 Free to be 518 enqueued site-wide. DIAGNOSED Session 28: document.styleSheets currently 519 contains ZERO Font Awesome stylesheets - this and [HERO-SCROLLHINT-ARROW] 520 and [HDR-HEADSET] will all stay invisible until that's fixed in wp-admin 521 (check WPCode Code Snippets and Stal Core theme options - qode-optimizer 522 is active site-wide and is the prime suspect for stripping/deferring it 523 as "unused" CSS/JS). This CSS is correct and ready the moment FA loads. */ 524.devis-fab::after { 525 font-family: "Font Awesome 5 Free" !important; 526 font-weight: 900 !important; 527 content: "\f061" !important; 528 font-size: 13px !important; 529} 530 531/* [HDR-CONTACTICON] Session 37 - circular "contact" icon in the header 532 widget holder, injected by [JS-CONTACTICON] right after the Devis button. 533 Links straight to the CF7 form on Qui Sommes Nous, reusing the form's own 534 auto-generated id (#wpcf7-f9472-p2174-o1 - the fragment CF7 already puts 535 in its own <form action> for post-submit scroll-back) instead of adding a 536 new Elementor anchor. Deliberately an inline SVG, not Font Awesome, so it 537 renders regardless of the known site-wide FA loading bug (see Known 538 Gotchas / Pending backlog) - unlike [HDR-HEADSET] and [DEVIS-ARROW], this 539 one doesn't have to wait for that fix. */ 540.contact-fab { 541 display: inline-flex !important; 542 align-items: center !important; 543 justify-content: center !important; 544 width: 38px !important; 545 height: 38px !important; 546 border-radius: 50% !important; 547 border: 2px solid #fdec01 !important; 548 background-color: transparent !important; 549 color: #ffffff !important; 550 flex-shrink: 0 !important; 551 transition: background-color 0.2s ease, color 0.2s ease !important; 552} 553.contact-fab:hover { 554 background-color: #fdec01 !important; 555 color: #000000 !important; 556} 557.contact-fab svg { 558 width: 18px !important; 559 height: 18px !important; 560 display: block !important; 561} 562 563 564/* ============================================================ 565 7. HOMEPAGE BANNER (SECTOR CARDS) 566 Layout is owned by Custom JS ("Homepage interactive banners"), 567 which is gated on body.home - so none of the .home rules below 568 fire on the video-variant clone (10222). See section 19. 569 ============================================================ */ 570 571/* [BANNER-FULLWIDTH] Force banner section to full viewport width */ 572.elementor-element-e542973 { 573 width: 100vw !important; 574 max-width: 100vw !important; 575 left: 0 !important; 576 margin-left: 0 !important; 577 position: relative !important; 578} 579.elementor-element-e542973 .elementor-container { 580 max-width: 100% !important; 581 width: 100% !important; 582} 583.elementor-element-e542973 .elementor-col-100, 584.elementor-element-e542973 .elementor-widget-wrap { 585 width: 100% !important; 586 max-width: 100% !important; 587} 588 589/* [BANNER-HEIGHT] Desktop height = viewport - header(86) - marquee(35).
590 MUST stay in sync with the same formula in Custom JS. */ 591@media (min-width: 1025px) { 592 .home .qodef-interactive-banners, 593 .home .qodef-ib-item, 594 .home .qodef-ib-content-holder { 595 height: calc(100vh - 86px - 35px) !important; 596 } 597} 598 599/* [BANNER-OVERFLOW] Clip the horizontal reel + reset content offset */ 600.elementor-element-e542973, 601.elementor-element-0a4b23f, 602.elementor-element-485c428, 603.home .qodef-interactive-banners { 604 overflow: hidden !important; 605} 606.home .qodef-ib-content-holder { 607 margin-left: 0 !important; 608 left: 0 !important; 609} 610 611/* [BANNER-GRIDLINES] Hide theme grid lines - JS owns the layout */ 612.home .qodef-ib-grid-line { 613 display: none !important; 614} 615 616/* [BANNER-LOGOOVERLAY] Centred ATI logo over the columns (desktop only) */ 617@media (min-width: 1025px) { 618 .home #banner-logo-overlay { 619 position: absolute !important; 620 top: 0 !important; 621 left: 0 !important; 622 width: 100% !important; 623 height: 100% !important; 624 display: flex !important; 625 align-items: center !important; 626 justify-content: center !important; 627 z-index: 50 !important; 628 pointer-events: none !important; 629 box-sizing: border-box !important; 630 } 631} 632#banner-logo-overlay img { 633 width: 2024px; 634 max-width: 160%; 635 height: auto; 636} 637 638/* [BANNER-NAVARROWS] Prev/next circular arrows. 639 NOTE: the live scroll pills are .ib-scroll-pill, styled inline by JS. 640 These .ib-nav-btn rules are the older round-button variant. */ 641.ib-nav-btn { 642 position: absolute; 643 top: 50%; 644 transform: translateY(-50%); 645 z-index: 100; 646 background: rgba(0, 0, 0, 0.65); 647 color: #ffffff; 648 border: none; 649 width: 44px; 650 height: 44px; 651 border-radius: 50%; 652 font-size: 18px; 653 cursor: pointer; 654 display: flex; 655 align-items: center; 656 justify-content: center; 657 transition: background 0.2s ease; 658} 659.ib-nav-btn:hover { 660 background: #fdec01; 661 color: #000000; 662} 663.ib-nav-prev { left: 10px; } 664.ib-nav-next { right: 10px; } 665 666/* [BANNER-CARD] Sector card base - clip + scale origin for hover */ 667.qodef-ib-item { 668 overflow: hidden !important; 669 position: relative !important; 670 transition: transform 0.3s ease !important; 671 transform-origin: bottom center !important; 672} 673 674/* [BANNER-CARDLINK] Whole card is clickable - invisible full-bleed anchor */ 675.qodef-ib-item .qodef-ib-item-btn-holder a { 676 position: absolute !important; 677 inset: 0 !important; 678 z-index: 10 !important; 679 font-size: 0 !important; 680 background: transparent !important; 681} 682 683/* [BANNER-LABELS] Card tag + title chips */ 684.qodef-ib-item-tag { 685 writing-mode: horizontal-tb !important; 686 transform: none !important; 687 text-orientation: mixed !important; 688 background-color: rgba(40, 40, 40, 0.75) !important; 689 padding: 4px 10px !important; 690} 691.qodef-ib-item-title h3 { 692 font-size: 15px !important; 693 white-space: nowrap !important; 694 background-color: rgba(0, 0, 0, 0.85) !important; 695 padding: 4px 12px !important; 696 display: inline-block !important; 697 text-transform: uppercase !important; 698} 699.qodef-ib-item-title h3, 700.qodef-ib-item-tag, 701.qodef-ib-item-inner { 702 font-weight: 900 !important; 703} 704 705/* [BANNER-CARDINNER] Card inner content - pinned near the bottom */ 706.qodef-ib-item-inner { 707 position: absolute !important; 708 left: 0 !important; 709 right: 0 !important; 710 bottom: 20% !important; 711 width: 100% !important; 712 transform: none !important; 713 box-sizing: border-box !important; 714 padding: 0 10px !important; 715 text-align: center !important; 716 margin: 0 auto !important; 717 z-index: 2 !important; 718} 719 720/* [BANNER-DESKTOPHEIGHT] Desktop height again + 86px header offset. 721 Breakpoint 1025px matches the JS bail (innerWidth lte 1024, returns). */ 722@media (min-width: 1025px) { 723 .home .qodef-interactive-banners { 724 height: calc(100vh - 86px - 35px) !important; 725 margin-top: 86px !important; 726 } 727 .home .qodef-ib-item { 728 height: calc(100vh - 86px - 35px) !important; 729 } 730} 731 732/* [BANNER-XL] 1920px+ - scale labels and icons up */ 733@media (min-width: 1920px) { 734 .qodef-ib-item-title h3 { font-size: 28px !important; } 735 .qodef-ib-item-tag { font-size: 16px !important; } 736 .qodef-ib-item-small-image img { width: 90px !important; height: 90px !important; } 737} 738 739/* [BANNER-STACK] Tablet/mobile - stack cards vertically, kill the reel */ 740@media (max-width: 1024px) { 741 .home .qodef-interactive-banners { 742 display: flex !important; 743 flex-direction: column !important; 744 height: auto !important; 745 min-height: unset !important; 746 overflow: visible !important; 747 } 748 .home .qodef-ib-content-holder { 749 display: flex !important; 750 flex-direction: column !important; 751 width: 100% !important; 752 transform: none !important; 753 transition: none !important; 754 } 755 .home .qodef-ib-item { 756 width: 100% !important; 757 height: 280px !important; 758 overflow: hidden !important; 759 } 760 .home .qodef-ib-image-holder-responsive { 761 background-position: center center !important; 762 background-size: cover !important; 763 } 764 .home .ib-nav-btn { 765 display: none !important; 766 } 767 #banner-logo-overlay { 768 display: none !important; 769 } 770 .qodef-ib-item-inner { 771 left: -10px !important; 772 } 773} 774 775/* [BANNER-MOBILEOFFSET] Mobile - push banner below the fixed header */ 776@media (max-width: 768px) { 777 .home .elementor-widget-container:has(.qodef-interactive-banners
777) { 778 margin-top: 86px !important; 779 } 780 .home .qodef-ib-item-inner { 781 transform: none !important; 782 left: 0 !important; 783 } 784} 785 786/* [BANNER-PILLANIM] Keyframes for the yellow SCROLL pills (JS-injected) */ 787@keyframes scrollBounceLeft { 788 0%, 100% { transform: translateY(-50%) translateX(0); } 789 50% { transform: translateY(-50%) translateX(-10px); } 790} 791@keyframes scrollBounceRight { 792 0%, 100% { transform: translateY(-50%) translateX(0); } 793 50% { transform: translateY(-50%) translateX(10px); } 794} 795 796 797/* ============================================================ 798 8. LOGOS CAROUSEL (homepage) 799 Current component = .ati-marquee-band (pure CSS marquee, Session 21). 800 .elementor-element-c2e32ee is the RETIRED Swiper carousel it replaced. 801 ============================================================ */ 802 803/* [MARQUEE-LOGOS] Logo images inside the band - fixed 35px height */ 804.ati-marquee-band img { 805 height: 35px !important; 806 width: auto !important; 807} 808 809/* [MARQUEE-CONTAINER] Elementor container holding the marquee - zero padding */ 810.elementor-element-7355d69 { 811 padding: 0 !important; 812} 813.elementor-element-7355d69 > .e-con-inner { 814 padding: 0 !important; 815} 816 817/* [MARQUEE-FULLWIDTH] Break the band out of the 1100px content grid */ 818.ati-marquee-band { 819 width: 100vw !important; 820 max-width: 100vw !important; 821 margin-left: calc(-1 * (100vw - 100%) / 2) !important; 822 position: relative !important; 823} 824 825/* [MARQUEE-OLDSWIPER] Retired Swiper carousel (c2e32ee) - kept in case the 826 element still renders anywhere. Safe to delete once confirmed unused. */ 827.elementor-element-c2e32ee { 828 width: 100vw !important; 829 max-width: 100vw !important; 830 margin-left: calc(-1 * (100vw - 100%) / 2) !important; 831 position: relative !important; 832 height: 35px !important; 833 overflow: hidden !important; 834} 835.elementor-element-c2e32ee.elementor-widget, 836.elementor-element-c2e32ee .elementor-widget-container { 837 padding: 0 !important; 838 margin: 0 !important; 839} 840.elementor-element-c2e32ee .elementor-widget-container, 841.elementor-element-c2e32ee img { 842 height: 35px !important; 843 object-fit: contain !important; 844} 845.elementor-element-c2e32ee .swiper-wrapper, 846.elementor-element-c2e32ee .swiper-slide, 847.elementor-element-c2e32ee .swiper { 848 height: 35px !important; 849 align-items: center !important; 850} 851.elementor-element-c2e32ee .qodef-e-title { 852 display: none !important; 853} 854.elementor-element-c2e32ee .qodef-e-inner, 855.elementor-element-c2e32ee .qodef-e-images-holder, 856.elementor-element-c2e32ee .qodef-e-main-image { 857 padding: 0 !important; 858 margin: 0 !important; 859 background: transparent !important; 860} 861.elementor-element-c2e32ee .swiper-slide { 862 width: 200px !important; 863} 864 865/* [MARQUEE-WRAPPER] Outer wrapper container - zero vertical padding so the 866 band sits flush against the banner above it */ 867.elementor-element-4263672 > .e-con-inner { 868 padding: 0 !important; 869} 870.elementor-element-4263672 { 871 padding-top: 0 !important; 872 padding-bottom: 0 !important; 873} 874.elementor-element-4263672 > .e-con-inner { 875 padding-top: 0 !important; 876 padding-bottom: 0 !important; 877} 878 879/* [ACTU-BADGE] "Notre Actualite" floating badge/button - homepage only. 880 DISABLED Session 27 - client pulled the button (didn't like the pale 881 accent-outline pixel visible in the source PNG at bottom-right - that 882 pixel is genuine artwork, not a bug, see the pixel-scan in that 883 session's log). Kept commented, not deleted - client is known to 884 change their mind. Widget markup also still lives in 885 actu-badge-widget.html; the actual Elementor HTML widget instance was 886 removed from the live homepage, so uncommenting this alone is not 887 enough to bring it back - the widget must be re-added in Elementor too. 888 889 Links to /actualites/. Whole flattened image, animated as ONE unit. 890 SOURCE FILE: boutton-actualite.png is 1563x1563 but the actual art 891 (measured via canvas pixel-scan) only occupies a band at 892 x:[10.2%,89.8%] y:[34.4%,65.6%] - ~80% wide, ~31% tall, aspect ~2.55:1. 893 Wrapper is overflow:hidden at that aspect ratio; the img is rendered 894 oversized and shifted with negative top/left so only the art band 895 shows. If this PNG is ever replaced, re-run the pixel-scan console 896 script (see session-log.md) and redo these numbers. 897 Positioned to intentionally hang off the right edge of the viewport. */ 898/* 899body.home .ati-actu-badge { 900 position: absolute; 901 right: calc(-16px - (100vw - 100%) / 2); 902 bottom: calc(100% + 40px); 903 width: 200px; 904 height: 90px; 905 overflow: hidden; 906 display: block; 907 z-index: 5; 908 cursor: pointer; 909} 910body.home .ati-actu-badge-img { 911 position: absolute; 912 top: -69px; 913 left: -14px; 914 width: 228px; 915 height: 228px; 916 animation: ati-actu-float 3.4s ease-in-out infinite; 917} 918@keyframes ati-actu-float { 919 0%, 100% { transform: translate(0, 0); } 920 50% { transform: translate(10px, 14px); } 921} 922@media (max-width: 768px) { 923 body.home .ati-actu-badge { width: 136px; height: 61px; } 924 body.home .ati-actu-badge-img { width: 155px; height: 155px; top: -47px; left: -10px; } 925} 926*/ 927 928 929/* ============================================================ 930 9. INNER PAGE HEROES 931 ============================================================ */ 932 933/* [HERO-HEADER] Theme's single-page header block - 80vh tall */ 934.qodef-single-page-header { 935 min-height: 80vh !important; 936 margin-bottom: 10px !important; 937} 938.qodef-single-page-header .qodef-m-image { 939 height: 100% !important; 940 position: absolute !important; 941 top: 0 !important; 942 left: 0 !important; 943 width: 100% !important; 944} 945.qodef-single-page-header .qodef-m-image img { 946 width: 100% !important; 947 height: 100% !important; 948 object-fit: cover !important; 949} 950 951/* [HERO-TITLE] Page titles uppercase */ 952.qodef-m-title.entry-title { 953 text-transform: uppercase !important; 954} 955 956/* [HERO-VIDEO] Qui Sommes Nous (5366) - full-bleed video hero */ 957.hero-video-container { 958 width: 100% !important; 959 position: relative !important; 960 height: calc(100vh - 86px) !important; 961 overflow: hidden !important; 962 margin-top: -10px !important; 963} 964.hero-video-container video.e-self-hosted-video-base { 965 width: 100% !important; 966 height: 100% !important; 967 object-fit: cover !important; 968 display: block !important; 969} 970 971/* [HERO-QSNRESET] QSN (5366) - kill theme top padding so video sits flush */ 972.page-id-5366 #qodef-page-content, 973.page-id-5366 #qodef-page-inner, 974.page-id-5366 .qodef-page-content-section { 975 padding-top: 0 !important; 976 margin-top: 0 !important; 977} 978 979/* [HERO-SCROLLHINT] Yellow SCROLL DOWN pill (JS-injected on 1027/7030/5667/2174) */ 980.scroll-down-hint { 981 position: fixed; 982 bottom: 30px; 983 left: 50%; 984 transform: translateX(-50%); 985 text-align: center; 986 color: #000 !important; 987 background: #fdec01; 988 padding: 10px 28px; 989 border-radius: 50px; 990 letter-spacing: 2px; 991 font-size: 11px; 992 font-weight: 700; 993 z-index: 999; 994 text-shadow: none; 995 animation: scrollBounce 0.9s ease-in-out infinite; 996 white-space: nowrap; 997 cursor: pointer; 998 display: inline-flex !important; 999 align-items: center !important; 1000 gap: 8px !important; 1001} 1002/* [HERO-SCROLLHINT-ARROW] Trailing down-chevron. Same regression + same fix 1003 as [DEVIS-ARROW] - see that comment for the Font Awesome diagnosis. */ 1004.scroll-down-hint::after { 1005 font-family: "Font Awesome 5 Free" !important; 1006 font-weight: 900 !important; 1007 content: "\f107" !important; 1008} 1009@keyframes scrollBounce { 1010 0%, 100% { transform: translateX(-50%) translateY(0); } 1011 50% { transform: translateX(-50%) translateY(10px); } 1012} 1013 1014/* [HERO-SUPPLYCHAIN] Supply chain (2504) - hide title, size the video */ 1015body.page-id-2504 .qodef-page-title { 1016 display: none !important; 1017} 1018.elementor-element-bd5485f video { 1019 height: 80vh !important; 1020 width: auto !important; 1021 display: block; 1022 margin: 0 auto; 1023} 1024 1025 1026/* ============================================================ 1027 10. SPLIT SLIDER PAGES (Sourcing, Logistique, etc.) 1028 OLD STACK - multiscroll.js + stal-core. ALL OF SECTION 10 1029 IS TO BE DELETED in VSS Phase 7. Pages: 7030/1027/5665/5667/5666. 1030 ============================================================ */ 1031 1032/* [SPLIT-NAVDOTS] Hide multiscroll's nav dots */ 1033#multiscroll-nav { 1034 display: none !important; 1035} 1036 1037/* [SPLIT-LOGISTIQUE] Logistique (5665) - slide background sizing */ 1038.page-id-5665 .qodef-m-slide-image.ms-section { 1039 background-position: center 75px !important; 1040 background-size: 85% auto !important; 1041 background-repeat: no-repeat !important; 1042} 1043
1044/* [SPLIT-LOGISTIQUERIGHT] Logistique (5665) - right panel image + offset */ 1045.page-id-5665 .ms-right .qodef-m-slide-image { 1046 background-size: 98% !important; 1047 background-color: transparent !important; 1048 background-position: center center !important; 1049} 1050.page-id-5665 .ms-right { 1051 right: 0 !important; 1052} 1053 1054/* [SPLIT-SOURCINGPARTNERS] Sourcing (1027) - NOS PARTENAIRES image position */ 1055.page-id-1027 .ms-right .qodef-m-slide-image[style*="NOS-PARTENAIRES"] { 1056 background-position: center 40px !important; 1057 background-size: 85% auto !important; 1058 background-repeat: no-repeat !important; 1059} 1060 1061/* [SPLIT-SOURCINGRIGHT] Sourcing (1027) - right panel text top padding */ 1062.page-id-1027 .ms-right .ms-tableCell { 1063 padding-top: 90px !important; 1064 vertical-align: top !important; 1065} 1066 1067/* [SPLIT-VIDEOBORDER] Sourcing - kill right-panel offset + video inline gap */ 1068.ms-right { 1069 right: 0 !important; 1070} 1071.qodef-m-slide-image video { 1072 display: block; 1073} 1074 1075/* [SPLIT-SOURCINGLEFT] Sourcing (1027) - left panel vertical alignment */ 1076.page-id-1027 .ms-left .qodef-m-slide-content { 1077 padding-top: -70px !important; 1078 justify-content: flex-start !important; 1079 align-items: flex-start !important; 1080} 1081.page-id-1027 .ms-left .elementor-element-960a9d9 { 1082 align-items: flex-start !important; 1083 padding-bottom: 80px !important; 1084} 1085 1086/* [SPLIT-MOBILE] Tablet/mobile - hide ms panels, show theme's vss-responsive */ 1087@media (max-width: 1024px) { 1088 .qodef-ib-image-holder-responsive { 1089 background-size: contain !important; 1090 background-repeat: no-repeat !important; 1091 background-position: center !important; 1092 } 1093 .qodef-vertical-split-slider .ms-left, 1094 .qodef-vertical-split-slider .ms-right { 1095 display: none !important; 1096 } 1097 .qodef-vss-responsive { 1098 display: block !important; 1099 height: auto !important; 1100 width: 100% !important; 1101 } 1102 .qodef-vss-responsive .qodef-m-slide-content { 1103 display: block !important; 1104 height: auto !important; 1105 width: 100% !important; 1106 } 1107 .qodef-vss-responsive .qodef-m-slide-image { 1108 height: 350px !important; 1109 background-size: contain !important; 1110 background-repeat: no-repeat !important; 1111 background-position: center top !important; 1112 display: block !important; 1113 width: 100% !important; 1114 } 1115 .qodef-vss-responsive .elementor-absolute { 1116 position: relative !important; 1117 width: 100% !important; 1118 height: auto !important; 1119 top: 0 !important; 1120 left: 0 !important; 1121 } 1122 .qodef-vss-responsive, 1123 .qodef-m-slide-content { 1124 height: auto !important; 1125 min-height: 0 !important; 1126 } 1127} 1128 1129/* [SPLIT-MOBILESCROLL] Tablet - undo multiscroll's scroll trap on the wrapper */ 1130@media (max-width: 1024px) { 1131 #qodef-page-wrapper { 1132 overflow: visible !important; 1133 height: auto !important; 1134 } 1135} 1136 1137 1138/* ============================================================ 1139 11. QUI SOMMES NOUS PAGE 1140 ============================================================ */ 1141 1142/* [QSN-FORMANCHOR] Session 38 - the header contact icon's target 1143 (#wpcf7-f9472-p2174-o1, the CF7 form) was landing in the wrong scroll 1144 position - past the form, at the footer when arriving from another page, 1145 or near the form's bottom when already on this page. Confirmed via a live 1146 fetch that the id is genuinely unique on the page (not a duplicate-id 1147 bug) - the real cause is Chrome's default CSS Scroll Anchoring, which 1148 keeps nudging the scroll position to compensate as content above the fold 1149 (this page has an autoplaying hero video) finishes loading/reflowing 1150 *after* the browser's native fragment jump already fired. The more that 1151 loads after the jump, the further the drift - which is exactly why a 1152 fresh cross-page arrival (nothing loaded yet) overshot further than a 1153 same-page click (video already settled). This turns that feature off for 1154 the whole document; see [JS-CONTACTSCROLL] in Custom-JS.js for the 1155 explicit scroll that replaces the native jump. scroll-margin-top clears 1156 the ~86px fixed header so the form's first field isn't hidden under it. */ 1157html, body {
1158 overflow-anchor: none !important; 1159} 1160#wpcf7-f9472-p2174-o1 { 1161 scroll-margin-top: 100px !important; 1162} 1163 1164/* [QSN-CLIENTS] Clients carousel - band height + logo sizing */ 1165.elementor-element-959f90c .qodef-qi-clients-slider { 1166 height: 85px; 1167} 1168.elementor-element-959f90c .qodef-e-main-image img { 1169 height: 70px; 1170 width: auto; 1171 max-width: none; 1172 object-fit: contain; 1173} 1174 1175/* [QSN-MOBILE] Mobile - text width + force Swiper icons to wrap into a grid. 1176 Swiper owns width/transform inline, so .swiper-wrapper must be targeted. */ 1177@media (max-width: 1024px) { 1178 .page-id-2174 .e-paragraph-base { 1179 width: 100% !important; 1180 max-width: 100% !important; 1181 box-sizing: border-box !important; 1182 padding: 0 30px !important; 1183 } 1184 .page-id-2174 [data-id="5128616"] .swiper-slide { 1185 width: 50% !important; 1186 max-width: 50% !important; 1187 flex-shrink: 0 !important; 1188 } 1189 .page-id-2174 [data-id="5128616"] .swiper-wrapper { 1190 flex-wrap: wrap !important; 1191 transform: none !important; 1192 height: auto !important; 1193 justify-content: center !important; 1194 } 1195} 1196 1197 1198/* ============================================================ 1199 12. SECTOR PAGES - CUSTOM ICON ROWS 1200 ============================================================ */ 1201 1202/* [ICONS-ROW] Icon row container - evenly spaced flex row */ 1203.custom-icons-row { 1204 display: flex; 1205 justify-content: space-between; 1206 align-items: flex-start; 1207 padding: 30px 0; 1208 gap: 10px; 1209 margin-top: -40px; 1210} 1211 1212/* [ICONS-ITEM] Single icon card - white tile, centred content */ 1213.custom-icon-item { 1214 flex: 1; 1215 display: flex; 1216 flex-direction: column; 1217 align-items: center; 1218 text-align: center; 1219 gap: 12px; 1220 background: #ffffff; 1221 padding: 20px 10px; 1222 border-radius: 4px; 1223} 1224.custom-icon-item img { 1225 width: 70px; 1226 height: auto; 1227} 1228.custom-icon-item p { 1229 font-size: 13px; 1230 font-weight: 600; 1231 color: #1a1a1a; 1232 margin: 0; 1233 line-height: 1.4; 1234} 1235 1236/* [ICONS-MOBILE] 768px - 2 per row. 480px - 1 per row. */ 1237@media (max-width: 768px) { 1238 .custom-icons-row { 1239 flex-wrap: wrap; 1240 justify-content: center; 1241 margin-top: 80px !important; 1242 } 1243 .custom-icon-item { 1244 flex: 0 0 45%; 1245 max-width: 45%; 1246 } 1247} 1248@media (max-width: 480px) { 1249 .custom-icon-item { 1250 flex: 0 0 100%; 1251 max-width: 100%; 1252 } 1253} 1254 1255 1256/* ============================================================ 1257 13. SECTEURS SIDEBAR NAV 1258 ============================================================ */ 1259 1260/* [SIDENAV-CURRENT] Hide the page you're already on from the list */ 1261#nav_menu-3 .current-menu-item { 1262 display: none !important; 1263} 1264 1265/* [SIDENAV-MENU] Menu as a wrapping row of pill links */ 1266#nav_menu-3 .menu { 1267 list-style: none !important; 1268 padding: 0 !important; 1269 display: flex !important; 1270 flex-wrap: wrap !important; 1271 gap: 10px !important; 1272} 1273#nav_menu-3 .menu li { 1274 padding: 0 !important; 1275 background: none !important; 1276} 1277#nav_menu-3 .menu li::before { 1278 display: none !important; 1279} 1280 1281/* [SIDENAV-PILL] Pill link styling + yellow hover */ 1282#nav_menu-3 .menu li a { 1283 display: inline-block !important; 1284 padding: 6px 16px !important; 1285 border: 1px solid #cccccc !important; 1286 border-radius: 4px !important; 1287 font-size: 12px !important; 1288 font-weight: 700 !important; 1289 letter-spacing: 1px !important; 1290 text-transform: uppercase !important; 1291 color: #1a1a1a !important; 1292 text-decoration: none !important; 1293 background: transparent !important; 1294} 1295#nav_menu-3 .menu li a:hover { 1296 background: #fdec01 !important; 1297 border-color: #fdec01 !important; 1298} 1299 1300/* [SIDENAV-LOGOS] Sidebar logos - 2-column grid of grey tiles */ 1301#sidebar-logos-section { 1302 margin-bottom: 30px; 1303} 1304#sidebar-logos-grid { 1305 display: grid; 1306 grid-template-columns: 1fr 1fr; 1307 gap: 12px; 1308 margin-top: 15px; 1309} 1310.sidebar-logo-item { 1311 background: #f1f3f5; 1312 border-radius: 4px; 1313 padding: 10px; 1314 display: flex; 1315 align-items: center; 1316 justify-content: center; 1317} 1318.sidebar-logo-item img { 1319 max-width: 100%; 1320 max-height: 50px; 1321 object-fit: contain; 1322 height: auto; 1323} 1324 1325/* [PARTNERS-BROCHURE] Session 38 - "Télécharger la brochure" button, added 1326 by [JS-BROCHURE] to every "Nos partenaires" section on the sector pages. 1327 Session 38 2nd follow-up: solid yellow idle / solid black hover, matching 1328 what the user asked for explicitly (not the transparent-outline pattern 1329 devis-fab/contact-fab use) - black text idle, white text on hover. Kept 1330 the earlier un-stretch fix (`align-self`+`width:fit-content` - the 1331 Elementor container it lands in is a flex row/column that stretches a 1332 lone child to fill the cross-axis by default). */ 1333.brochure-btn { 1334 display: inline-flex !important; 1335 align-self: center !important; 1336 width: fit-content !important; 1337 align-items: center !important; 1338 gap: 6px !important; 1339 margin: 20px 0 0 !important; 1340 padding: 0 14px !important; 1341 height: 36px !important; 1342 border-radius: 4px !important; 1343 border: 2px solid #fdec01 !important; 1344 background-color: #fdec01 !important; 1345 color: #1a1a1a !important; 1346 font-size: 11px !important; 1347 font-weight: 700 !important; 1348 letter-spacing: 0.5px !important; 1349 text-decoration: none !important; 1350 text-transform: uppercase !important; 1351 transition: background-color 0.2s ease, color 0.2s ease !important; 1352} 1353.brochure-btn:hover { 1354 background-color: #000000 !important; 1355 color: #ffffff !important; 1356} 1357.brochure-btn svg { 1358 width: 14px !important; 1359 height: 14px !important; 1360 flex-shrink: 0 !important; 1361} 1362 1363/* [PARTNERS-BROCHURE-COVER] Sourcing (10476) - the "SCROLL DOWN" + brochure 1364 pill pair on cover 1. 1365 1366 Session 38 4th follow-up: REWRITTEN as one wrapper holding both pills, 1367 replacing three failed rounds of positioning them as two independent 1368 elements (guessed offset -> runtime-measured offset -> opposing centerline 1369 anchors + equal min-widths). Every one of those shared the same root flaw:
1370 two separately-positioned elements each running their OWN copy of the 1371 bounce animation can never stay in phase, because each animation starts 1372 whenever its element gets the property - and the two are created by 1373 different scripts at different times. That permanent phase drift is what 1374 read as "the 3D position is not the same / scroll down looks more out of 1375 the screen". No amount of matching their sizes or offsets could have fixed 1376 it; it isn't a sizing bug. 1377 1378 The wrapper fixes four separate reported problems at once, by construction 1379 rather than by tuning: 1380 1. PHASE - one animation on one element, so both pills move as one solid 1381 unit. Desync is now structurally impossible. 1382 2. CENTERING - flexbox centers the GROUP. Nothing has to know the other 1383 pill's width, so both keep their natural width (no `min-width` 1384 padding them out - that's the "still too wide" complaint) and the 1385 pair stays balanced whether one pill is showing or both. 1386 3. THE FLASH on scrolling past cover 1 - the hint used to be re-centered 1387 the instant it stopped being "paired", which happened while it was 1388 still mid-fade, so you saw it jump back to center before vanishing. 1389 Now the hint never moves at all: it sits in normal flow inside the 1390 wrapper, and only the wrapper's opacity animates. 1391 4. Panel-transform coupling - the pair is `position:fixed` on <body>, 1392 no longer absolutely positioned inside the transformed VSS panel. 1393 1394 Uses [HERO-SCROLLHINT]'s existing `scrollBounce` keyframes, which already 1395 carry the `translateX(-50%)` this wrapper needs for centering. 1396 1397 â ï¸ Do NOT put `transform: none !important` on the wrapper. An `!important` 1398 author declaration outranks a running animation's value for the same 1399 property, so the keyframes would keep playing while moving nothing - that 1400 silently killed the bounce once already this session. */ 1401.ati-pill-pair { 1402 position: fixed !important; 1403 left: 50% !important; 1404 bottom: 30px !important; 1405 display: flex !important; 1406 align-items: center !important; 1407 justify-content: center !important; 1408 gap: 12px !important; 1409 z-index: 999 !important; 1410 opacity: 0; 1411 transition: opacity 0.3s ease; 1412 /* Centering fallback for if the animation never applies (reduced-motion, 1413 etc). Left non-!important on purpose: a running animation outranks a 1414 normal declaration, so scrollBounce's own translateX(-50%) still wins 1415 whenever it is playing. */ 1416 transform: translateX(-50%); 1417 animation: scrollBounce 0.9s ease-in-out infinite; 1418} 1419 1420/* Both children drop to normal flow - the wrapper owns position and motion. 1421 The hint in particular has to give up [HERO-SCROLLHINT]'s fixed 1422 positioning, centering transform and its own bounce, or it would fight the 1423 wrapper for all three. */ 1424.ati-pill-pair .scroll-down-hint, 1425.ati-pill-pair .brochure-btn--cover { 1426 position: static !important; 1427 left: auto !important; 1428 right: auto !important; 1429 bottom: auto !important; 1430 margin: 0 !important; 1431 transform: none !important; 1432 animation: none !important; 1433} 1434 1435/* The brochure pill only exists on cover 1, so it stays out of the flow 1436 until [JS-VSS-HINT] marks the pair as being on that slide. `display` (not 1437 `visibility`) so the wrapper re-centers around the lone hint on slide 1. */ 1438.ati-pill-pair .brochure-btn--cover { 1439 display: none !important; 1440 padding: 10px 28px !important; 1441 border-radius: 50px !important; 1442 border: none !important; 1443 font-size: 11px !important; 1444 font-weight: 700 !important; 1445 letter-spacing: 2px !important; 1446 background-color: #fdec01 !important; 1447 color: #000000 !important; 1448 white-space: nowrap !important; 1449} 1450.ati-pill-pair--paired .brochure-btn--cover { 1451 display: inline-flex !important; 1452} 1453.ati-pill-pair .brochure-btn--cover:hover { 1454 background-color: #000000 !important; 1455 color: #ffffff !important; 1456} 1457 1458/* [SIDENAV-HIDEFAMILLE] Session 37 - "Famille de produit" category dropdown 1459 in the sector-page sidebar (widget id categories-2, "main-sidebar" widget 1460 area), commented out (hidden, not deleted) per the marketing team's 1461 "famille produits a retirer" decision on 3 rows of the client feedback 1462 sheet. Kept reversible - this client revisits decisions - instead of 1463 removing the widget in wp-admin. #categories-2 is a stable per-instance 1464 widget id, unique to this one widget, so no page-id scoping is needed. */ 1465#categories-2 { 1466 display: none !important; 1467} 1468 1469 1470/* ============================================================ 1471 14. FORMS (CF7) 1472 ============================================================ */ 1473 1474/* [FORM-ROW] Two-up field rows (Devis form) */ 1475.wpcf7 .dv-form-row { 1476 display: flex; 1477 gap: 16px; 1478 margin-bottom: 16px; 1479} 1480.wpcf7 .dv-form-row .wpcf7-form-control-wrap { 1481 flex: 1; 1482 display: block; 1483} 1484.wpcf7 .dv-form-row input { 1485 width: 100% !important; 1486} 1487
1488/* [FORM-FIELDS] All CF7 inputs - shared border/padding/background */ 1489.wpcf7 input[type="text"], 1490.wpcf7 input[type="tel"], 1491.wpcf7 input[type="email"], 1492.wpcf7 textarea { 1493 width: 100% !important; 1494 border: 1px solid #888 !important; 1495 border-radius: 6px !important; 1496 padding: 16px !important; 1497 font-size: 15px !important; 1498 background: #ffffff !important; 1499 color: #333 !important; 1500 box-sizing: border-box !important; 1501 display: block !important; 1502} 1503.wpcf7 textarea { 1504 height: 160px !important; 1505 resize: vertical !important; 1506 margin-top: 16px !important; 1507 margin-bottom: 16px !important; 1508} 1509 1510/* [FORM-CONTACTBOX] Contact form white card wrapper */ 1511.elementor-element-85ec075 .wpcf7-form { 1512 background: #ffffff !important; 1513 margin-top: 20px !important; 1514 padding: 20px !important; 1515} 1516 1517/* [FORM-MOBILE] Stack two-up rows on mobile */ 1518@media (max-width: 767px) { 1519 .wpcf7 .dv-form-row { 1520 flex-direction: column !important; 1521 } 1522} 1523 1524/* [FORM-RECRUTEMENT] Recrutement form - rows, fields, file input */ 1525.recrutement-form .form-row { 1526 display: flex !important; 1527 gap: 20px !important; 1528} 1529.recrutement-form .form-row .wpcf7-form-control-wrap { 1530 flex: 1 !important; 1531}
1532.recrutement-form .wpcf7-form-control-wrap input, 1533.recrutement-form .wpcf7-form-control-wrap textarea, 1534.recrutement-form input[type="text"], 1535.recrutement-form input[type="email"], 1536.recrutement-form input[type="tel"], 1537.recrutement-form textarea { 1538 border: 1px solid #cccccc !important; 1539 border-radius: 4px !important; 1540 padding: 12px 15px !important; 1541 width: 100% !important; 1542 background: #ffffff !important; 1543} 1544.recrutement-form .wpcf7-file { 1545 margin-bottom: 20px !important; 1546} 1547 1548/* [FORM-BUTTONTEXT] Theme button label colors (black, white on hover) */ 1549.qodef-button .qodef-m-text, 1550.qodef-button span.qodef-m-text { 1551 color: #000000 !important; 1552 font-family: inherit !important; 1553} 1554.qodef-button:hover .qodef-m-text, 1555.qodef-button:hover span.qodef-m-text { 1556 color: #ffffff !important; 1557 font-family: inherit !important; 1558} 1559 1560 1561/* ============================================================ 1562 15. RECRUTEMENT PAGE - JOBS TABLE 1563 ============================================================ */ 1564 1565/* [JOBS-TABLE] Table shell */ 1566.jobs-table { width: 100%; border: 1px solid #e0e0e0; border-radius: 4px; overflow: hidden; } 1567 1568/* [JOBS-HEADER] Header row - grey band, uppercase labels */ 1569.jobs-header { display: grid; grid-template-columns: 2fr 1fr 1fr 150px; padding: 15px 20px; background: #f5f5f5; font-weight: 700; font-size: 13px; letter-spacing: 1px; text-transform: uppercase; border-bottom: 1px solid #e0e0e0; } 1570 1571/* [JOBS-ROW] Data row - same grid template as the header */ 1572.jobs-row { display: grid; grid-template-columns: 2fr 1fr 1fr 150px; padding: 25px 20px; border-bottom: 1px solid #e0e0e0; align-items: center; } 1573.jobs-row:last-child { border-bottom: none; } 1574.jobs-cell p { margin: 5px 0 0; font-size: 14px; color: #666; } 1575 1576/* [JOBS-BUTTON] Apply button - yellow pill, red on hover */ 1577.jobs-btn { background: #fdec01; color: #000; padding: 10px 25px; border-radius: 50px; font-weight: 700; text-decoration: none; font-size: 14px; } 1578.jobs-btn:hover { background: #e1312d; color: #fdec01; } 1579 1580 1581/* ============================================================ 1582 16. FOOTER 1583 ============================================================ */ 1584 1585/* [FOOTER-SPACING] Top area padding + widget margin resets */ 1586#qodef-page-footer-top-area #qodef-page-footer-top-area-inner { 1587 padding: 20px 0 20px !important; 1588} 1589#qodef-page-footer-top-area .textwidget p { 1590 margin-bottom: 3px !important; 1591} 1592#qodef-page-footer-top-area .textwidget { 1593 margin-bottom: 0 !important; 1594} 1595#qodef-page-footer-top-area .widget { 1596 padding-top: 0 !important; 1597 margin-top: 0 !important; 1598 margin-bottom: 0 !important; 1599} 1600#qodef-page-footer-top-area .qodef-grid-item { 1601 padding-top: 0 !important; 1602 margin-top: 0 !important; 1603} 1604#qodef-page-footer-top-area h3 { 1605 margin-top: 0 !important; 1606 margin-bottom: 15px !important; 1607} 1608 1609/* [FOOTER-LOGO] Footer logo max width */ 1610#qodef-page-footer-top-area img { 1611 max-width: 100px !important; 1612 height: auto !important; 1613} 1614 1615/* [FOOTER-TITLES] Widget titles - yellow, uppercase, tracked */ 1616#qodef-page-footer-top-area .qodef-widget-title { 1617 color: #fdec01 !important; 1618 font-size: 14px !important; 1619 letter-spacing: 2px !important; 1620 margin-top: 0 !important; 1621 margin-bottom: 15px !important; 1622 text-transform: uppercase !important; 1623} 1624 1625/* [FOOTER-GRID] Footer columns align to the top */ 1626#qodef-page-footer-top-area .qodef-grid-inner { 1627 display: flex !important; 1628 align-items: flex-start !important; 1629 flex-wrap: wrap !important; 1630} 1631 1632/* [FOOTER-NAV] Footer menu - strip theme bullets, white links */ 1633#nav_menu-2 .menu li::before, 1634#nav_menu-2 .menu li::after { 1635 display: none !important; 1636 content: "" !important; 1637} 1638#nav_menu-2 ul.menu { 1639 list-style: none !important; 1640 padding-left: 0 !important; 1641} 1642#nav_menu-2 ul.menu li { 1643 list-style: none !important; 1644 padding-left: 0 !important; 1645 background: none !important; 1646} 1647#nav_menu-2 ul.menu li a { 1648 color: #ffffff !important; 1649} 1650 1651/* [FOOTER-CONTACT] Contact column - white text + links */ 1652#stal_core_icon_list_item-2 .qodef-e-title-text, 1653#stal_core_icon_list_item-3 .qodef-e-title-text, 1654#stal_core_icon_list_item-4 .qodef-e-title-text { 1655 color: #ffffff !important; 1656} 1657#stal_core_icon_list_item-2 a, 1658#stal_core_icon_list_item-3 a, 1659#stal_core_icon_list_item-4 a { 1660 color: #ffffff !important; 1661} 1662 1663/* ------------------------------------------------------------ 1664 NOTE: the rules below were historically parked in section 16 1665 but are NOT footer rules. Left in place to avoid churn; they
1666 belong to Achat Industriel / Sourcing. 1667 ------------------------------------------------------------ */ 1668 1669/* [FOOTER-ACHATIMG] MISPLACED - Achat Industriel body image sizing */ 1670.elementor-element-98fcabf img { 1671 width: 75% !important; 1672 height: auto !important; 1673 display: block !important; 1674 margin: 20px auto 0 auto !important; 1675} 1676 1677/* [FOOTER-SOURCINGSTRIP] MISPLACED - Sourcing (1027) white strip fix at the 1678 top of the ms-right video panel. Superseded once 1027 moves to new VSS. */ 1679.page-id-1027 .elementor-widget-stal_vertical_split_slider { 1680 margin-top: -15px !important; 1681} 1682 1683/* [FOOTER-SOURCINGTPL] MISPLACED - Sourcing (1027) unified slide template 1684 9421: force full height + centre its content. Irrelevant post-Phase 7. */ 1685.page-id-1027 [data-elementor-id="9421"] { 1686 height: 100% !important; 1687 min-height: 100% !important; 1688} 1689.page-id-1027 [data-elementor-id="9421"] .e-con, 1690.page-id-1027 [data-elementor-id="9421"] .elementor-section { 1691 height: 100% !important; 1692 min-height: 100% !important; 1693} 1694.page-id-1027 [data-elementor-id="9421"] .e-con { 1695 display: flex !important; 1696 align-items: center !important; 1697 justify-content: center !important; 1698} 1699@media (min-width: 1440px) { 1700 .page-id-1027 [data-elementor-id="9421"] .elementor-widget-html div:first-child { 1701 max-width: 900px !important; 1702 padding: 40px 80px !important; 1703 } 1704 .page-id-1027 [data-elementor-id="9421"] h2 { 1705 font-size: 42px !important; 1706 } 1707 .page-id-1027 [data-elementor-id="9421"] p, 1708 .page-id-1027 [data-elementor-id="9421"] li { 1709 font-size: 18px !important; 1710 } 1711} 1712 1713 1714/* ============================================================ 1715 17. ACTUALITES PAGE 1716 Template: wp-content/themes/stal/ati-actualites-template.php 1717 (we have a local copy: ati-actualites-template.php in this folder) 1718 1719 Session 30: all styling for this page (hero image, subtitle position, 1720 card redesign) lives DIRECTLY in that template file's own inline 1721 <style> block now, not here. The template is a real PHP file we can 1722 edit and deploy (via Hostinger File Manager's file editor - re-uploading 1723 the file does NOT persist, per the template's own header comment), so 1724 there's no need to fight the cascade with !important overrides from a 1725 separate file. Nothing to see here on purpose - check the template file. 1726 ============================================================ */ 1727 1728 1729/* ============================================================ 1730 18. NEW VSS PAGES - Achat Industriel 2 (page-id-10158) + 1731 Session 31 clones: Sourcing2 (10476), Logistique2 (10477), 1732 Export international2 (10478). All 4 page IDs are grouped via 1733 `body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478)` 1734 throughout this section - a plain comma-list would have broken 1735 every rule with a descendant combinator after it (Session 31 bug, 1736 caught and reverted before deploy - see session log). 1737 The 3 clones were made via Elementor's page-duplicate action, 1738 which copies element IDs as-is (unlike copy/paste of individual 1739 elements) - so [VSS-L1BG]/[VSS-R-ORDER]/etc keep matching by the 1740 SAME hardcoded IDs on all 4 pages with no remapping needed. If a 1741 future clone is made differently and a panel goes visually wrong, 1742 re-verify content-per-ID before assuming this still holds. 1743 ------------------------------------------------------------ 1744 Layout is CSS. Motion is JS ([JS-VSS] block in Custom JS). 1745 Nothing here sets `transform` on the TRACKS at runtime - JS owns 1746 that. The one CSS transform below ([VSS-INITIALPOS]) is the 1747 pre-JS starting state only, and its value MUST match what JS 1748 parks the right track at. 1749 1750 STRUCTURE AS BUILT (Phase 4 - verified in DOM): 1751 .ati-vss 300vh, the scroll runway 1752 .ati-vss-viewport sticky, 100vh, overflow hidden 1753 .ati-vss-track-is-left 50% wide, 300vh [L1, L3] 1754 .ati-vss-track-is-right 50% wide, 300vh [R3, R2-blank, R1] 1755 .ati-vss-panel-is-unified ABSOLUTE, 100vw x 100vh, z-index 10 1756 -- sibling of both tracks, NOT inside 1757 either. Slides up over them. 1758 1759 PANEL COUNTS ARE ASYMMETRIC AND THAT IS FINE: 1760 left = 2 real panels (L1, L3) in a 300vh track 1761 right = 3 real panels (Devenir-fournisseur, R2-blank, R1) in a 300vh track 1762 Both tracks stay 300vh so they share ONE coordinate system driven 1763 by one `progress` value. 1764 DO NOT set the left track to height:auto - that decouples the two 1765 tracks and desyncs every transform. (This was the Session 26 bug.) 1766 1767 MOTION CONTRACT with [JS-VSS] - keep these in lockstep. RISE-TO-COVER STACK 1768 (Session 32 - tracks NEVER move, only cover panels animate; a track-slide 1769 attempt this session produced an opposite-direction split motion and was 1770 reverted - see CLAUDE.md Motion Law history): 1771 progress = clamp(-vssRect.top / vh, 0, 2) 1772 pA = clamp(progress,0,1); pB = clamp(progress-1,0,1); easeInOutCubic -> eA,eB 1773 left track : translateY(0) <- NEVER moves 1774 right track : translateY(-200vh) <- NEVER moves 1775 cover 1 (logos, .elementor-element-7373081) : translateY((1-eA)*100vh), 1776 opacity 1, z-index 10 - rises progress 0->1 1777 cover 2 (slide 3, .elementor-element-8e4528a, Sourcing2 only so far) : 1778 translateY((1-eB)*100vh), opacity 1, z-index 11 (ABOVE cover 1) - 1779 rises progress 1->2, see [VSS-COVER2] 1780 Both covers share the class .ati-vss-panel-is-unified (inherit this rule's 1781 positioning), so [JS-VSS] finds them by their distinct elementor-element 1782 IDs, not by class. L3 / R2-blank / the 3rd right-track panel are still 1783 never revealed inside the TRACKS - their content was moved OUT into cover 2 1784 instead (Session 32). [VSS-L3-BG]/[VSS-R2-BG] remain defensive-only leftovers 1785 on the (now empty) track panels. Right track's -200vh keeps its at-rest 1786 child in view; [VSS-INITIALPOS] below MUST equal that -200vh. 1787 1788 THE STICKY TRAP - read before touching anything here: 1789 position:sticky dies if ANY ancestor is a scroll container, or has 1790 transform / filter / contain / will-change / perspective set. 1791 Clip horizontal bleed on the html element, NEVER on body or the wrapper. 1792 1793 REAL DOM CLASSES (Elementor Navigator labels lie - verified in DOM): 1794 left track : .ati-vss-panel (L1) / .ati-vss-panel (L3) 1795 right track : .ati-vss-panel (R3) / .ati-vss-panel-is-blank (R2) / 1796 .ati-vss-panel (R1) 1797 sibling : .ati-vss-panel-is-unified (L2) 1798 L1 and L3 share .ati-vss-panel, so L1 is targeted by its Elementor 1799 element id .elementor-element-05b1eea - see [VSS-L1BG]. 1800 ============================================================ */ 1801 1802/* [VSS-STICKYBODY] Sticky prerequisite #1 - theme sets body{overflow-y:auto}, 1803 which makes body a scroll box, so sticky binds to body not the window. */ 1804body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) { 1805 overflow: visible !important; 1806 overflow-y: visible !important; 1807} 1808 1809/* [VSS-STICKYWRAPPER] Sticky prerequisite #2 - theme sets the wrapper to 1810 overflow:hidden with !important. Specificity alone loses; must be !important. */ 1811body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-wrapper { 1812 overflow: visible !important; 1813} 1814 1815/* [VSS-PADRESET] Sticky prerequisite #3 - the global gap fix in section 1 1816 adds 10px top padding here, which offsets every panel inside the tracks 1817 and desyncs the layout from the transform math. See [GLOBAL-GAPFIX]. */ 1818body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-content { 1819 padding-top: 0 !important; 1820} 1821 1822/* [VSS-WRAPPER] Outer wrapper - its height IS the scroll distance. 1823 300vh = 100vh to traverse slide 1, 100vh for the unified panel to 1824 slide up and cover, 100vh of hold. Also breaks out of the theme's 1825 1100px content grid. */ 1826body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss { 1827 position: relative !important; 1828 height: 300vh; 1829 width: 100% !important; 1830 max-width: 100% !important; 1831 padding: 0 !important; /* kill Elementor's default 10px container padding - 1832 it insets the viewport + both tracks by 10px, opening 1833 a blank sliver left of L1 and right of R1, and shifting 1834 the absolute unified panel 10px right (Session 31). */ 1835} 1836 1837/* [VSS-VIEWPORT] The pinned window. sticky + top:0 holds it at the window 1838 top for as long as .ati-vss (300vh) still has height scrolling past. 1839 position:relative is NOT needed and must NOT be added - sticky already 1840 establishes the containing block for [VSS-UNIFIED-SLOT]'s absolute panel. */ 1841body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-viewport { 1842 position: sticky; 1843 top: 0; 1844 height: 100vh; /* exactly one screen tall, never more */ 1845 overflow: hidden; /* clips the 300vh tracks inside it */ 1846 padding: 0 !important; /* Elementor container default - must be zero */ 1847} 1848 1849/* [VSS-TRACKS] Both tracks. Comma-grouped because Elementor's Atomic 1850 Classes field flattens multi-word classes - they share no base class. 1851 BOTH are 300vh regardless of how many real panels they hold. Do not 1852 "optimise" one down to its content height - see the header note. */ 1853body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left, 1854body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right { 1855 width: 50%; /* half the viewport each */ 1856 height: 300vh !important; /* the full reel that JS slides past the viewport */ 1857 min-height: 300vh !important; 1858 flex-shrink: 0; /* stop flexbox squashing it into the 100vh viewport */ 1859 gap: 0;
1859 /* math assumes exact 100vh steps - no gaps */ 1860 padding: 0 !important; 1861 will-change: transform; /* GPU compositing - smoother scroll motion */ 1862 /* No z-index: tracks are non-positioned and STATIC. The unified panel 1863 (positioned, z-index:10) paints above them and rises to cover - see 1864 [VSS-UNIFIED-SLOT]. (Doors-reveal briefly put tracks above; reverted.) */ 1865} 1866 1867/* [VSS-R-ORDER] Pin right-track visual order by stable Elementor ID, NOT DOM 1868 order. flex `order` makes this immune to reordering/content edits in the 1869 Elementor editor - whichever ID actually holds the image always renders 1870 last / at rest, regardless of DOM position. 1871 VERIFIED Session 28: DOM order was found reversed - fixed via `order`. 1872 VERIFIED Session 29 (later same day): the IMAGE ITSELF had moved to a 1873 different element ID - elementor-element-3355159 (originally R1) now 1874 holds a debug label ("Ati-vss-panel-right-2") - deliberately placed 1875 there to visually identify which panel is on screen, for catching 1876 exactly this kind of panel-identity bug - while elementor-element-ccb21ab 1877 (originally R3, "empty, never seen") now holds the handshake image. 1878 Mapping below reflects the CURRENT real content, not the original 1879 build - if R1 goes blank again, re-run the ID/content scan from that 1880 session's log before assuming this mapping is still right. */ 1881body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right { 1882 display: flex !important; 1883 flex-direction: column !important; 1884} 1885body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-3355159 { 1886 order: 1 !important; /* debug label panel - keep out of view in the reel */ 1887} 1888body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-335fbf4 { 1889 order: 2 !important; /* R2-blank */ 1890} 1891body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab { 1892 order: 3 !important; /* holds the handshake image now - render LAST */ 1893} 1894 1895/* [VSS-PANELS] The four in-track panels. Each exactly one screen tall. 1896 NOTE: .ati-vss-panel-is-unified is deliberately NOT in this list - 1897 it lives outside both tracks and is sized by [VSS-UNIFIED-SLOT]. */ 1898body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left > .ati-vss-panel, 1899body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right > .ati-vss-panel, 1900body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right > .ati-vss-panel-is-blank { 1901 height: 100vh !important; 1902 flex: 0 0 100vh !important; /* fixed - never grow or shrink */ 1903 width: 100%; /* fill the track's 50% column */ 1904 margin: 0; 1905 display: flex; 1906 align-items: center; 1907 justify-content: center; 1908} 1909 1910/* [VSS-GRIDBREAK] Kill the theme's 1100px content grid on this page. 1911 #qodef-page-inner carries margin: 0 82.33px, and 1912 .qodef-page-content-section adds 15px padding each side. 1913 Both must be zeroed or the slider can never reach full viewport width. */ 1914body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-inner { 1915 margin-left: 0 !important; 1916 margin-right: 0 !important; 1917 max-width: 100% !important; 1918 width: 100% !important; 1919} 1920body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-content { 1921 width: 100% !important; 1922 max-width: 100% !important; 1923} 1924body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .qodef-page-content-section { 1925 padding-left: 0 !important; 1926 padding-right: 0 !important; 1927 width: 100% !important; 1928 max-width: 100% !important; 1929} 1930/* [VSS-GRIDINNER] Zero the theme grid-gutter negative margin on 1931 .qodef-grid-inner. Measured at width 1310 / left -15 on a 1280 window; 1932 every descendant inherits it via width:100%, pushing the slider's right 1933 edge ~15px past the viewport - the "handshake sliver" on the far right. */ 1934body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .qodef-grid-inner { 1935 margin-left: 0 !important; 1936 margin-right: 0 !important; 1937 max-width: 100% !important; 1938 width: 100% !important; 1939} 1940 1941/* [VSS-BEHINDHEADER] Pull content up so the slider sits BEHIND the 86px 1942 header, matching the old split-slider pages. */ 1943body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-content { 1944 margin-top: -86px !important; 1945} 1946 1947/* [VSS-HIDETITLE] Hide the theme's page title block */ 1948body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .qodef-page-title { 1949 display: none !important; 1950} 1951 1952/* [VSS-L1BG] L1 (left, slide 1) - dark bg + network overlay. 1953 Targeted by Elementor id because L1 and L3 share .ati-vss-panel. 1954 The PNG is a WHITE pattern on transparent - it is invisible without 1955 the background-color underneath it. Do not remove the color. 1956 Top padding 120px clears the overlapping header. */ 1957body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea { 1958 background-color: #0a0a0a !important;
1959 background-image: url('https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2020/02/vertical-split-slider-stars-img.png') !important; 1960 background-size: cover !important; 1961 background-position: center !important; 1962 padding: 120px 60px 60px 60px !important; 1963} 1964 1965/* [VSS-L1TITLE] L1 heading - pulled up, spaced away from the body copy */ 1966body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea h1 { 1967 margin-top: -30px !important; 1968} 1969body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea h1, 1970body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea h2 { 1971 margin-bottom: 40px !important; 1972} 1973 1974/* [VSS-OVERFLOWCLIP] Removing overflow:hidden from body and the wrapper 1975 (required for sticky) exposes a pre-existing 66px horizontal overflow. 1976 Sources: [HDR-NAV] padding-right:400px, and the theme's off-canvas 1977 .qodef-side-area parked off-screen right. 1978 Clip on the html element - it's the scroll container, so this contains the bleed 1979 WITHOUT creating a scroll container between the sticky element and the 1980 window. Clipping body or the wrapper would re-break sticky. */ 1981body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) { 1982 max-width: 100vw; 1983} 1984html:has(body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478)) { 1985 overflow-x: hidden; 1986} 1987 1988/* [VSS-R1IMAGE] R1 right panel - kill container padding so image fills edge 1989 to edge. The 10px Elementor default here was the white strip above R1. */ 1990body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .ati-vss-panel { 1991 padding: 0 !important; 1992} 1993body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .ati-vss-panel img { 1994 width: 100% !important; 1995 height: 100% !important; 1996 object-fit: cover !important; 1997 display: block !important; 1998} 1999body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .ati-vss-panel .elementor-widget-image { 2000 height: 100% !important; 2001 padding: 0 !important; 2002 margin: 0 !important; 2003} 2004body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .ati-vss-panel .elementor-widget-container { 2005 height: 100% !important; 2006 padding: 0 !important; 2007 margin: 0 !important; 2008} 2009 2010/* [VSS-R1VIDEO] R1 (elementor-element-ccb21ab) holds a hosted VIDEO widget on 2011 Sourcing2, which the img-only rules in [VSS-R1IMAGE] above never match. 2012 Elementor wraps a hosted video in `.e-hosted-video` and locks it to 2013 `aspect-ratio: 1/1` (verified via console, Session 32). That square fills the 2014 panel width but, on tall viewports (e.g. 1920x1080 -> R1 panel 960w x 1080h), 2015 can't reach the panel's height - leaving a blank strip below the video. Kill 2016 the ratio lock and force the whole chain (widget -> .e-hosted-video wrapper 2017 -> <video>) to fill the panel and cover-crop. Scoped to R1's stable id; on 2018 pages where R1 is still an image there's no video/.e-hosted-video to match, 2019 so this is a harmless no-op there. */ 2020body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-ccb21ab .elementor-widget, 2021body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-ccb21ab .elementor-wrapper, 2022body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-ccb21ab .e-hosted-video { 2023 width: 100% !important; 2024 height: 100% !important; 2025 aspect-ratio: auto !important; 2026 padding: 0 !important; 2027 margin: 0 !important; 2028} 2029body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-ccb21ab video { 2030 width: 100% !important; 2031 height: 100% !important; 2032 object-fit: cover !important; 2033 display: block !important; 2034} 2035 2036/* [VSS-INITIALPOS] Right track's starting position, set in CSS so the 2037 correct panel is painted before JS parses - prevents flash on load. 2038 VALUE MUST MATCH the JS parking position: (trackProgress - 2) * vh
2039 at trackProgress 0 = -200vh. If you change one, change both. 2040 JS overwrites this on first updatePositions(), so no runtime conflict. */ 2041body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right { 2042 transform: translateY(-200vh); 2043} 2044 2045/* [VSS-UNIFIED-SLOT] The unified panel (L2) is a SIBLING of both tracks, 2046 not a child of either. position:absolute lifts it out of the viewport's 2047 flex flow so it ignores the tracks' 50% width and spans the full screen. 2048 Containing block = .ati-vss-viewport (sticky counts as positioned). 2049 RISE-TO-COVER MODEL: this panel is opaque and rises from below the fold to 2050 cover the (static) split slide 1. It sits ABOVE the tracks - z-index:10 on 2051 this positioned element paints over the non-positioned, static tracks. 2052 Parked at translateY(100vh) pre-JS: if JS never runs, the panel sits below 2053 the fold and slide 1 stays visible. JS drives translateY 100vh -> 0. */ 2054body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified { 2055 position: absolute !important; 2056 top: 0 !important; 2057 left: 0 !important; 2058 width: 100vw !important; 2059 height: 100vh !important; 2060 flex: none !important; /* it is not a flex item any more */ 2061 margin: 0 !important; 2062 padding: 0 !important; 2063 z-index: 10; /* ABOVE the non-positioned static tracks - it covers them */ 2064 transform: translateY(100vh); /* parked below the fold; JS raises it to 0 */ 2065 opacity: 1; /* opaque - revealed by position, not fade */ 2066 background-color: #fff; /* Session 31: opaque backdrop for the panel BOX itself - 2067 `opacity:1` above only means this element isn't see-through 2068 on its own, it does NOT paint a fill color. Content that 2069 doesn't cover 100% of the box (e.g. an object-fit:contain 2070 image, which letterboxes on mismatched aspect ratios) needs 2071 this or the tracks underneath show through the gaps. */ 2072 pointer-events: none; /* JS flips to auto once it covers */ 2073 will-change: transform; /* GPU compositing */ 2074 overflow-y: scroll; /* infographic may be taller than 100vh */ 2075 scrollbar-width: none; /* Firefox - hide scrollbar visually */ 2076 -ms-overflow-style: none; /* IE/Edge - hide scrollbar visually */ 2077} 2078body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified::-webkit-scrollbar { 2079 display: none; /* Chrome/Safari - hide scrollbar visually */ 2080} 2081 2082/* [VSS-UNIFIED-IMAGE] Session 31 - some clone pages (Sourcing2 etc.) put a plain 2083 Elementor Image widget directly in the unified panel instead of the HTML 2084 infographic. The panel is fluid (100vw x 100vh, [VSS-UNIFIED-SLOT]) but an 2085 <img> defaults to its own natural/cropped pixel size - it will never match 2086 a fluid box on its own. object-fit:contain scales the WHOLE image to fit 2087 inside the panel with nothing cropped (may letterbox on mismatched aspect 2088 ratios - accepted tradeoff, see session log). This does NOT fix a 2089 server-side hard crop - the Elementor widget's "Image Resolution" must be 2090 set to Full/Original, not Custom, or the missing pixels are already gone 2091 before this CSS ever runs. */ 2092body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image, 2093body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image .elementor-widget-container { 2094 width: 100% !important; 2095 height: 100% !important; 2096} 2097body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image img { 2098 width: 100% !important; 2099 height: 100% !important; 2100 object-fit: contain !important; 2101 display: block !important; 2102} 2103 2104/* [VSS-COVER-HEADERCLEAR] Session 32 - the whole VSS section sits BEHIND the 2105 fixed header on purpose ([VSS-BEHINDHEADER] pulls it up -86px), so the top 2106 of every full-bleed cover panel is covered by the opaque header bar. L1 2107 already compensates for exactly this with its own 120px top padding (see 2108 [VSS-L1BG]) - the cover panels never got the same treatment, so anything 2109 near the top of their content (an infographic's title, a heading) renders 2110 underneath the header and looks cut off. 2111 MUST come AFTER [VSS-UNIFIED-SLOT], which sets `padding:0 !important` - 2112 same specificity, so the later rule wins. 2113 box-sizing is forced to border-box so the 120px comes OUT of the panel's 2114 100vh rather than adding to it (which would overflow the viewport). 2115 120px matches [VSS-L1BG]'s value; if the header height ever changes, measure 2116 it with: document.querySelector('#qodef-page-header').getBoundingClientRect().height 2117 and update both this and [VSS-L1BG] together. */ 2118body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified { 2119 /* Session 33: promoted to a custom property so [VSS-FLUID] can subtract the 2120 exact same value when sizing the infographic. Hard-coding 120px in two 2121 places is how they drift apart - change it here only. Mobile/tablet zero 2122 this out in [VSS-FLOW] (the header stops overlapping once the section 2123 leaves sticky/behind-header mode). */ 2124 --vss-header-clear: 120px; 2125 box-sizing: border-box !important;
2126 padding-top: var(--vss-header-clear) !important; 2127} 2128 2129/* [VSS-UNIFIED-IMGFULL] Session 35 - the unified panels now hold IMAGES (the 2130 infographic, the partner-logos grid, etc. exported as images). Two effects 2131 for image panels only: 2132 1. TOP BLANK (issue: "too much blank above NOS PARTENAIRES; push it up"). 2133 The 120px clearance above is sized for a TEXT cover; an image with 2134 `object-fit:contain` also gets vertically centred, so any slack piles up 2135 as a blank band above the picture. Fixes: (a) drop the clearance to just 2136 past the ~86px header (reclaims ~30px), and (b) `object-position: center 2137 top` so the image sits at the TOP of its box - any contain slack now 2138 falls to the BOTTOM instead of above the title. Together this pushes the 2139 picture up without pulling its title behind the opaque header (which 2140 padding-top:0 WOULD do - the titles sit at the image's top edge). 2141 2. The picture also uses the reclaimed height, so it is marginally larger. 2142 `:has(> .elementor-widget-image)` matches only panels whose DIRECT child is 2143 an Image widget - so the HTML infographic still on 10478, and cover 2's 2144 "Devenir fournisseur" text, keep their normal 120px clearance. 2145 NOTE (issue 1, user chose to keep whole image): the residual LEFT/RIGHT 2146 margins on a wide desktop are the aspect gap - images are ~1.5:1, the panel 2147 is ~2:1, and `contain` letterboxes that without cropping. Edge-to-edge would 2148 need the images re-exported at ~2:1; user opted to keep the whole image. */ 2149body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified:has(> .elementor-widget-image) { 2150 padding-top: 90px !important; /* was 120px - just clears the ~86px header */ 2151} 2152body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified:has(> .elementor-widget-image) .elementor-widget-image img { 2153 object-position: center top !important; 2154} 2155 2156/* [VSS-10158-IMGCOVER] Session 39 - TRIED AND REVERTED, same session. 2157 10158 got a NEW infographic image (Achat-industriel-infographic.png, 2158 ~1.6:1) and cover was tried to fill the panel edge-to-edge with no white 2159 side margins. Reverted because the panel is a fixed 100vh and very wide 2160 (2:1+) on a large desktop screen - cover has to scale the image up until 2161 it fills that width, and at that scale the image (proportionally taller 2162 than the panel) overflows the 100vh height by more than one full content 2163 row ("Nos engagements" + its 5 icons), which cover then silently crops 2164 away rather than showing. Confirmed live: the row was not just trimmed 2165 at the edges, it was entirely gone below the fold with no way to scroll 2166 to it. That's strictly worse than the letterbox tradeoff this was meant 2167 to fix, so 10158 is back on the same shared [VSS-UNIFIED-IMAGE] contain 2168 behavior as the other 3 VSS pages - see that rule and 2169 [VSS-UNIFIED-IMGFULL] above for the current (accepted) side-margin 2170 tradeoff. If edge-to-edge fill is wanted again, the real fix is 2171 re-exporting the image closer to the panel's own aspect ratio (~2:1), 2172 not forcing cover on a taller image. */ 2173 2174/* [VSS-COVER2] Session 32 - the user built a 3rd cover panel (slide 3) by 2175 duplicating the logos panel and dragging the L3 image + "Devenir 2176 fournisseur" widget into it as 2 columns. It shares the SAME class 2177 (.ati-vss-panel-is-unified) as the logos panel, so it inherits all of 2178 [VSS-UNIFIED-SLOT]'s positioning/sizing for free - only 2 things need 2179 overriding here, targeted by its stable elementor-element ID (also used 2180 by [JS-VSS] to tell the two same-class panels apart): 2181 1. z-index higher than the logos panel, so it visibly rises ABOVE it. 2182 2. Elementor auto-generated flex-direction:column for this panel's 2183 children (verified via console, Session 32) - overridden to 2184 row-reverse so the widgets render in the visual order the user wants 2185 (image left, text right) - the DOM order is [text, image] because the 2186 Navigator labels ("panel3right"/"panel3left") reflect where each 2187 widget ORIGINALLY lived (right track / left track), not where they 2188 render now; row-reverse flips DOM order to visual order without 2189 needing to touch Elementor's own widget order. 2190 3. Vertically center each column's content - a plain height:100% box 2191 left-aligns content to its own top by default, which combined with 2192 point 4 below caused the HTML widget's title to clip and left a gap 2193 at the bottom. 2194 4. The image needs object-fit:cover (not the shared [VSS-UNIFIED-IMAGE] 2195 contain rule, which is correct for the logo grid but wrong for a 2196 single photo - contain letterboxes on a mismatched aspect ratio, 2197 showing empty space around the photo). Targeted via a more specific 2198 selector so it doesn't affect cover 1's logo image. */ 2199body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a { 2200 z-index: 11 !important; 2201 flex-direction: row-reverse !important; 2202 /* Session 34: drive the "Devenir fournisseur" HTML widget's fluid unit. 2203 Everything in devenir-fournisseur.html is calc(var(--u,1px)*N); this 2204 makes --u track the viewport so the text GROWS on a large monitor 2205 instead of sitting tiny in a huge panel (the "html too small on large 2206 PC" report). 100vw/1220 = ~1.05px at the 1280 dev machine (â original 2207 size) rising to the 2px cap at ~2440px wide. The image column ignores 2208 --u, so this is harmless to it. Mobile overrides --u in [VSS-FLOW]. */ 2209 --u: clamp(1.05px, 100vw / 1220, 2px); 2210 /* Session 34: cancel [VSS-COVER-HEADERCLEAR]'s 120px top padding for THIS 2211 panel only. That padding is right for a text/infographic cover, but here 2212 it insets the photo 120px from the top, leaving a blank band above the 2213 handshake instead of letting it bleed edge-to-edge behind the header the 2214 way slide 1's R1 image does. The text column is vertically centered, so 2215 it still clears the (opaque) header without the padding. */ 2216 padding-top: 0 !important; 2217} 2218body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a > * { 2219 width: 50% !important; 2220 flex: 1 1 50% !important; 2221 height: 100% !important; 2222 display: flex !important; 2223 align-items: center !important; 2224 justify-content: center !important; 2225} 2226body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-element-24f5448 { 2227 padding: 0 !important; 2228 margin: 0 !important; 2229 width: 100% !important; 2230 height: 100% !important; 2231} 2232body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-widget-image { 2233 width: 100% !important; 2234 height: 100% !important; 2235 padding: 0 !important; 2236 margin: 0 !important; 2237} 2238body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-widget-container { 2239 width: 100% !important; 2240 height: 100% !important; 2241 padding: 0 !important; 2242 margin: 0 !important; 2243} 2244body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-widget-image img { 2245 width: 100% !important; 2246 height: 100% !important; 2247 object-fit: cover !important; 2248 display: block !important; 2249} 2250 2251/* [VSS-SNAPSCROLL] Prevent browser native scroll-behavior fighting JS snap */ 2252body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) { 2253 scroll-behavior: auto !important; 2254} 2255 2256/* [VSS-NOBACKTOTOP] The theme's floating "back to top" button
2257 (#qodef-back-to-top, site-wide via the qodef-back-to-top--enabled body 2258 class) doesn't belong on the VSS pages - the whole point of these pages 2259 is JS-driven snap scroll, not a manual jump-to-top control, and it sits 2260 on top of the cover panels' content (Session 32: seen overlapping the 2261 slide-3 panel). Hidden here rather than disabled site-wide in theme 2262 settings, since it's still wanted on every other page. */ 2263body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-back-to-top { 2264 display: none !important; 2265} 2266 2267/* [VSS-L3-BG] L3 (empty panel) gets same dark background as L1 2268 so if it briefly appears during snap transit it looks identical to L1. 2269 Session 32: scoped to `.ati-vss-track-is-left .elementor-element-24f5448` 2270 specifically (was a bare page-wide selector) - on Sourcing2 the user 2271 dragged this exact element (still carrying its original ID; Elementor 2272 doesn't reassign IDs on a drag, only on duplication) out of the left 2273 track into cover 2's slide-3 panel. The old unscoped rule followed it 2274 there, painting L1's dark background + network pattern behind the 2275 relocated photo. Scoping to the track means this rule naturally stops 2276 applying once the element is no longer inside it - no cover2-specific 2277 override needed, and pages where it's still in place (10158/10477/10478) 2278 are unaffected. */ 2279body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left .elementor-element-24f5448 { 2280 background-color: #0a0a0a !important; 2281 background-image: url('https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2020/02/vertical-split-slider-stars-img.png') !important; 2282 background-size: cover !important; 2283 background-position: center !important; 2284} 2285 2286/* [VSS-R2-BG] R2-blank gets same image as R1 so it looks identical during transit */ 2287body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-335fbf4 { 2288 padding: 0 !important; 2289 background-color: #000 !important; 2290} 2291body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-335fbf4::after { 2292 content: ''; 2293 display: block; 2294 width: 100%; 2295 height: 100%; 2296 position: absolute; 2297 inset: 0; 2298 background-image: url('https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/06/collaboration-suppliers-manufacturers-ensure-smooth-operations-communication.jpg'); 2299 background-size: cover; 2300 background-position: center; 2301} 2302 2303/* ---- DEAD CODE WARNING (Session 33) -------------------------------------- 2304 Every [VSS-L2-*] rule from here to the end of section 18 is INERT. These 2305 are plain (non-!important) declarations, and the infographic sizes itself 2306 with inline styles, which beat them - so none of this has had any effect 2307 for several sessions. Worse, the values here have silently drifted away 2308 from the ones that actually render (this block says the map is 200px tall 2309 and the eyebrow 22px; the widget really uses 105 and 14 units). Reading 2310 these numbers to understand the current design will mislead you. 2311 2312 The live sizing model is: infographic_unified.html (inline calc()) + 2313 [VSS-FLUID] in section 18b, which owns --u. Change sizes there. 2314 2315 Left in place rather than deleted because removing ~140 lines is churn 2316 unrelated to this session's task and none of it is doing harm today. 2317 Flagged in CLAUDE.md's backlog for deletion. 2318 -------------------------------------------------------------------------- */ 2319 2320/* [VSS-L2-WRAP] Infographic sized to fill exactly 100vh (632px on this screen). 2321 flex column + justify:space-between pushes top/bottom sections to edges. 2322 overflow:hidden clips anything that doesn't fit. */ 2323body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .vss-l2-infographic { 2324 width: 100%; 2325 height: 100vh; 2326 padding: 20px 40px 16px; 2327 box-sizing: border-box; 2328 background: #ffffff; 2329 display: flex; 2330 flex-direction: column; 2331 justify-content: space-between; 2332 overflow: hidden; 2333} 2334 2335/* [VSS-L2-TOP] Top section doesn't grow - only takes what it needs */ 2336body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-top { 2337 flex: 0 0 auto; 2338} 2339 2340/* [VSS-L2-BOTTOM] Bottom section doesn't grow either */ 2341body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-bottom { 2342 flex: 0 0 auto; 2343 margin-top: 10px; 2344} 2345 2346/* [VSS-L2-COMPACT] Tuned to fit 632px viewport without scroll */ 2347body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-eyebrow { font-size: 14px; margin: 0 0 2px; } 2348body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-title { font-size: 17px; line-height: 1.2; margin: 0 0 10px; } 2349body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-rows { gap: 8px; } 2350body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row { gap: 12px; } 2351body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon { flex: 0 0 32px; width: 32px; height: 32px; } 2352body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon svg { width: 14px; height: 14px; } 2353body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text { padding-left: 10px; } 2354body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text strong { font-size: 12px; } 2355body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text span { font-size: 10px; } 2356body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-map { max-height: 200px; } 2357body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-engagements-title { font-size: 13px; margin: 0 0 8px; padding-bottom: 4px; } 2358body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-cards { gap: 8px; } 2359body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card { padding: 10px 8px; clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px)); } 2360body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card-icon { width: 28px; height: 28px; margin: 0 auto 6px; } 2361body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card h4 { font-size: 9px; margin: 0 0 4px; padding-bottom: 3px; } 2362body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card p { font-size: 9px; line-height: 1.3; } 2363 2364/* [VSS-L2-TOP] Top row: text left, map right */ 2365body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-top { 2366 display: flex; 2367 gap: 40px; 2368 align-items: flex-start; 2369} 2370body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-left { flex: 0 0 46%; } 2371body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-right { flex: 1; min-width: 0; } 2372 2373/* [VSS-L2-TITLE] Eyebrow + red headline */ 2374body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-eyebrow { 2375 font-size: 22px; 2376 font-weight: 800; 2377 color: #111; 2378 margin: 0 0 6px; 2379} 2380body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-title { 2381 font-size: 26px; 2382 font-weight: 800; 2383 line-height: 1.25;
2384 color: #e30613; 2385 margin: 0 0 30px; 2386} 2387 2388/* [VSS-L2-ROWS] Four icon rows */ 2389body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-rows { display: flex; flex-direction: column; gap: 20px; } 2390body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row { display: flex; align-items: center; gap: 18px; } 2391body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon { 2392 flex: 0 0 48px; 2393 width: 48px; 2394 height: 48px; 2395 border-radius: 50%; 2396 border: 2px solid #e30613; 2397 color: #e30613; 2398 display: flex; 2399 align-items: center; 2400 justify-content: center; 2401} 2402body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon svg { width: 22px; height: 22px; } 2403body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text { display: flex; flex-direction: column; padding-left: 14px; border-left: 2px solid #e5e5e5; } 2404body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text strong { color: #e30613; font-size: 16px; font-weight: 800; letter-spacing: 0.3px; } 2405body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-row-text span { color: #111; font-size: 13px; font-weight: 600; } 2406 2407/* [VSS-L2-MAP] Inline SVG world map with arcs */ 2408body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-map { width: 100%; height: auto; display: block; } 2409body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-arcs .arc.red { stroke: #e30613; } 2410body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-arcs .arc.orange { stroke: #f7941d; } 2411 2412/* [VSS-L2-BOTTOM] Engagements section */ 2413body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-bottom { margin-top: 40px; } 2414body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-engagements-title { 2415 font-size: 22px; 2416 font-weight: 800; 2417 color: #f7941d; 2418 margin: 0 0 20px; 2419 padding-bottom: 8px; 2420 border-bottom: 2px solid #f7941d; 2421 display: inline-block; 2422} 2423 2424/* [VSS-L2-CARDS] Five engagement cards - notched corners via clip-path */ 2425body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-cards { 2426 display: grid; 2427 grid-template-columns: repeat(5, 1fr); 2428 gap: 18px; 2429} 2430body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card { 2431 border: 1.5px solid #e5e5e5; 2432 padding: 24px 16px; 2433 text-align: center; 2434 clip-path: polygon(0 0, calc(100% - 20px) 0, 100% 20px, 100% 100%, 20px 100%, 0 calc(100% - 20px)); 2435} 2436body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card-icon { 2437 width: 46px; 2438 height: 46px; 2439 margin: 0 auto 16px; 2440 color: #e30613; 2441} 2442body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card-icon svg { width: 100%; height: 100%; } 2443body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card:nth-child(2) .vss-l2-card-icon, 2444body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card:nth-child(5) .vss-l2-card-icon { color: #f7941d; } 2445body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card h4 { 2446 font-size: 13px; 2447 font-weight: 800; 2448 color: #111; 2449 margin: 0 0 10px; 2450 padding-bottom: 6px; 2451 border-bottom: 2px solid #e5e5e5; 2452 display: inline-block; 2453} 2454body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-card p { 2455 font-size: 12px; 2456 color: #444; 2457 margin: 0; 2458 line-height: 1.4; 2459} 2460 2461 2462/* ============================================================ 2463 18b. VSS RESPONSIVE (Session 33) 2464 ------------------------------------------------------------ 2465 Everything in section 18 above this point was written against ONE 2466 screen: the 1280x632 dev window. This subsection makes the four VSS 2467 pages work from a 360px phone up to a 4K monitor. Three jobs: 2468 2469 [VSS-FLUID] >=1025px - the infographic scales WITH the viewport 2470 instead of sitting at a fixed 9px inside a giant 2471 panel (the "too small on big screens" report). 2472 [VSS-BIGSCREEN] >=1600px - L1's typography and padding scale too, so 2473 the split slide doesn't go sparse on a large monitor. 2474 [VSS-FLOW] <=1024px - the entire scroll-hijack / split-track 2475 model is switched OFF and every panel becomes an 2476 ordinary stacked full-width section. 2477 2478 ORDER MATTERS: this subsection must stay LAST in section 18. Several 2479 rules below deliberately re-declare properties set earlier at equal 2480 specificity and win only by source order. 2481 ============================================================ */ 2482 2483/* [VSS-FLUID] One fluid unit driving the whole infographic. 2484 2485 THE BUG THIS FIXES: every size in infographic_unified.html is an inline 2486 style, and inline styles are invisible to @media queries - so the design 2487 was frozen at the window it was tuned on. On a 1440px-tall monitor the 2488 panel grew to fill the screen while the type stayed at 9px, leaving the 2489 blank space the client reported. 2490 2491 THE MECHANISM: those inline styles are now written as 2492 `calc(var(--u,1px) * N)`, where N is the original reference pixel value. 2493 A custom property CAN be changed by a media query, and an inline calc() 2494 re-evaluates when it does - so we get full responsive control of an 2495 inline-styled element without fighting specificity at all. To rescale 2496 the whole infographic for a breakpoint, change --u here; never edit the 2497 numbers in the widget. 2498 2499 THE MATH - do not change one of these without the other: 2500 panel height = 100vh
2501 panel reserves = var(--vss-header-clear) (fixed header) 2502 so infographic height H = 100vh - var(--vss-header-clear) 2503 The reference design held 532px of content between 10px top and 10px 2504 bottom padding = a 552-unit budget. So u = H / 552, and the content 2505 fills H EXACTLY at every viewport height: no blank space, no overflow, 2506 at any screen size. That exact-fit property is why there is no clamp() 2507 or cap on --u - capping it would reintroduce blank space, which is the 2508 very thing being fixed. 2509 2510 `height` is forced here rather than left to the widget's inline 2511 `height:100%` because 100% would depend on every Elementor wrapper in 2512 between also being 100% tall, which is not guaranteed. Setting the 2513 computed height directly is immune to that chain; the inline 100% 2514 stays as the no-CSS fallback. */ 2515@media (min-width: 1025px) { 2516 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-infographic { 2517 --u: calc((100vh - var(--vss-header-clear, 120px)) / 552); 2518 height: calc(100vh - var(--vss-header-clear, 120px)) !important; 2519 width: 100% !important; 2520 } 2521} 2522 2523/* [VSS-BIGSCREEN] L1's copy is Elementor-managed and sized in fixed px, so on 2524 anything wider than the dev machine the dark panel reads as mostly empty 2525 space around small text ("no writing gets bigger" report). This scales the 2526 heading, body copy AND padding continuously with viewport width. 2527 2528 Session 34: threshold lowered 1600 -> 1281. The 1600 gate was the actual 2529 bug behind "no writing gets bigger" - a typical "Large PC" is 1440-1536 2530 wide, i.e. BELOW 1600, so the rule never fired on the exact screens the 2531 client was looking at. 1281 keeps the 1280 dev-machine baseline untouched 2532 (it is `min-width`, so =1280 is excluded) while catching every larger 2533 screen. The clamp() vw terms do the smooth growth; the floors sit at/above 2534 the previous values so nothing shrinks. */ 2535@media (min-width: 1281px) { 2536 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea { 2537 padding: clamp(120px, 9vh, 200px) clamp(60px, 4vw, 120px) clamp(60px, 6vh, 110px) !important; 2538 } 2539 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea h1, 2540 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea h2, 2541 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea .elementor-heading-title { 2542 font-size: clamp(36px, 3vw, 66px) !important; 2543 line-height: 1.15 !important; 2544 } 2545 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea p, 2546 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea li { 2547 font-size: clamp(17px, 1.3vw, 27px) !important; 2548 line-height: 1.6 !important; 2549 } 2550} 2551 2552/* [VSS-FLOW] TABLET + MOBILE - the VSS mechanism is switched OFF entirely. 2553 2554 WHY OFF, not "made smaller". Three things break below ~1025px and none of 2555 them is a sizing problem: 2556 1. Two 50%-wide tracks give ~195px columns on a 390px phone. The L1 copy 2557 is unreadable at that width no matter how the type is tuned. 2558 2. Scroll hijacking fights touch momentum scrolling and the mobile 2559 address bar's show/hide (which changes 100vh mid-gesture). It is also 2560 an accessibility problem - it removes the user's control of the page. 2561 3. 100vh is unreliable on mobile browsers for the same address-bar 2562 reason, and the entire motion model is built on 100vh steps. 2563 So below 1025px every panel becomes an ordinary full-width block in normal 2564 document flow, scrolled natively, in this order: 2565 L1 (dark copy) -> R1 (image/video) -> cover 1 -> cover 2 2566 2567 [JS-VSS] is gated to >=1025px (Session 33) so nothing drives transforms 2568 here. That gate is what makes `transform:none` safe below - see the JS 2569 Principles note in CLAUDE.md warning never to set it while the JS is
2570 still driving the tracks. The !important also means a stale inline 2571 transform left behind by a desktop->mobile resize cannot survive. */ 2572@media (max-width: 1024px) { 2573 2574 /* 1. Runway collapses - there is no scroll distance to consume any more */ 2575 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss { 2576 height: auto !important; 2577 min-height: 0 !important; 2578 } 2579 2580 /* 2. Un-pin the sticky viewport */ 2581 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-viewport { 2582 position: static !important; 2583 height: auto !important; 2584 min-height: 0 !important; 2585 overflow: visible !important; 2586 display: block !important; 2587 } 2588 2589 /* 3. Tracks: full width, natural height, no transform. 2590 display:block also retires [VSS-R-ORDER]'s flex `order` here - that 2591 is intentional and safe, because the only right-track child left 2592 visible below is the one holding real content (see 5). */ 2593 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left, 2594 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right { 2595 display: block !important; 2596 width: 100% !important; 2597 height: auto !important; 2598 min-height: 0 !important; 2599 transform: none !important; 2600 will-change: auto !important; 2601 } 2602 2603 /* 4. In-track panels stop being exactly one screen tall */ 2604 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left > .ati-vss-panel, 2605 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right > .ati-vss-panel, 2606 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right > .ati-vss-panel-is-blank { 2607 width: 100% !important; 2608 height: auto !important; 2609 min-height: 0 !important; 2610 flex: none !important; 2611 } 2612 2613 /* 5. Hide the never-seen filler panels. On desktop these are parked 2614 off-screen by the transform; with the transform gone they would 2615 render as large empty coloured blocks in the middle of the page. 2616 The L3 selector is scoped to .ati-vss-track-is-left ON PURPOSE - on 2617 Sourcing2 that same element ID was dragged into cover 2, and Elementor 2618 does not reassign IDs on drag, so an unscoped rule would hide real 2619 content there. Same trap that bit [VSS-L3-BG] in Session 32. */ 2620 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-left .elementor-element-24f5448, 2621 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-3355159, 2622 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-335fbf4 { 2623 display: none !important; 2624 } 2625 2626 /* 6. Cover panels rejoin normal flow instead of being absolutely 2627 positioned and parked below the fold by JS. */ 2628 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified { 2629 --vss-header-clear: 0px; /* nothing overlaps once we leave sticky mode */ 2630 position: static !important; 2631 transform: none !important; 2632 opacity: 1 !important; 2633 pointer-events: auto !important; 2634 width: 100% !important; 2635 height: auto !important; 2636 min-height: 0 !important; 2637 z-index: auto !important; 2638 overflow: visible !important; 2639 will-change: auto !important; 2640 padding-top: 0 !important; 2641 } 2642 2643 /* 7. The section no longer sits behind the fixed header, so undo the 2644 negative pull - otherwise L1's first lines start underneath it. */ 2645 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) #qodef-page-content { 2646 margin-top: 0 !important; 2647 } 2648 2649 /* 8. Belt-and-braces: [JS-VSS] hides the page scrollbar with an inline 2650 style while inside the VSS zone. The JS gate means it should never 2651 run here, but an !important rule guarantees the page can always be 2652 scrolled even if a stale inline value survives a resize. */ 2653 html:has(body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478)) { 2654 overflow-y: auto !important; 2655 } 2656 2657 /* 9. L1 - desktop's 120px/60px padding is far too generous on a phone */ 2658 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea { 2659 padding: 56px 24px 48px !important; 2660 min-height: 0 !important; 2661 } 2662 2663 /* 10. R1 (image on most pages, hosted video on Sourcing2). Session 34: use 2664 NATURAL height, not an aspect-ratio box. 2665 WHY THE CHANGE: the first version gave the panel aspect-ratio:16/10 2666 and told the media height:100%. But height:100% only resolves if 2667 EVERY wrapper between the panel and the <img>/<video> is also 2668 height:100% - the Elementor widget wrappers are not, so the media 2669 collapsed to its natural height, shorter than the 16/10 box, leaving
2670 a white strip below the image (the reported bug). Letting the media 2671 set its own height makes the container wrap it exactly - a blank 2672 below is then structurally impossible, and cropping a photo on mobile 2673 was never needed anyway. `display:block` drops the panel's desktop 2674 flex-centering; the aspect-ratio/height/object-fit resets undo the 2675 global [VSS-R1IMAGE]/[VSS-R1VIDEO] sizing for this breakpoint. */ 2676 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab { 2677 display: block !important; 2678 height: auto !important; 2679 aspect-ratio: auto !important; 2680 } 2681 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab .elementor-widget, 2682 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab .elementor-widget-container, 2683 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab .elementor-wrapper, 2684 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab .e-hosted-video { 2685 height: auto !important; 2686 aspect-ratio: auto !important; 2687 display: block !important; 2688 } 2689 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab img, 2690 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab video { 2691 width: 100% !important; 2692 height: auto !important; 2693 aspect-ratio: auto !important; 2694 object-fit: initial !important; 2695 display: block !important; 2696 } 2697 2698 /* 11. A plain Image widget in a cover panel (the logo grid, the Export & 2699 Transport infographic) is height:100% + object-fit:contain on 2700 desktop. In auto-height flow that collapses, so let it size to its 2701 own aspect ratio instead. Side effect worth noting: this also makes 2702 the desktop letterboxing question moot on mobile - at natural 2703 aspect there are no side margins to fill. */ 2704 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image, 2705 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image .elementor-widget-container { 2706 height: auto !important; 2707 display: block !important; 2708 } 2709 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-panel-is-unified .elementor-widget-image img { 2710 width: 100% !important; 2711 height: auto !important; 2712 object-fit: initial !important; /* natural height = container wraps it, no gap */ 2713 display: block !important; 2714 } 2715 2716 /* 12. Cover 2 (Sourcing2) - desktop uses row-reverse to get image-left / 2717 text-right out of a [text, image] DOM order. column-REVERSE keeps 2718 that same reading order stacked: image on top, text beneath. 2719 --u drops to a fixed readable base here (the desktop value is 2720 viewport-derived and would be tiny at phone width); ~1.15 lands the 2721 28px title near 32px and 13-14px body near 15-16px. Image uses 2722 natural height for the same no-blank reason as rule 10. */ 2723 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a { 2724 flex-direction: column-reverse !important; 2725 height: auto !important; 2726 gap: 0 !important; 2727 --u: 1.15px; 2728 } 2729 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-element-24f5448, 2730 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-element-24f5448 .elementor-widget-container { 2731 width: 100% !important; 2732 height: auto !important; 2733 aspect-ratio: auto !important; 2734 display: block !important; 2735 } 2736 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-8e4528a .elementor-element-24f5448 img { 2737 width: 100% !important; 2738 height: auto !important; 2739 object-fit: initial !important; 2740 display: block !important; 2741 } 2742 2743 /* 13. The infographic stops being a fill-the-screen layout and becomes a 2744 normal stacked document. --u switches from viewport-derived to a 2745 fixed readable base: 9px reference text lands at ~14px, which is 2746 the minimum comfortable body size on a phone. */ 2747 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-infographic { 2748 --u: 1.55px; 2749 display: block !important; 2750 height: auto !important; 2751 width: 100% !important; 2752 padding: 32px 20px 40px !important; 2753 overflow: visible !important; 2754 } 2755 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-top { 2756 display: block !important; 2757 } 2758 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-left { 2759 flex: none !important; 2760 width: 100% !important; 2761 } 2762 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-right { 2763 margin-top: 26px !important; 2764 } 2765 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-map { 2766 max-height: none !important; 2767 width: 100% !important; 2768 } 2769 /* Icons are the one thing that should NOT scale with --u here - at 1.55 2770 a 32-unit circle lands near 50px, which crowds the row on a phone. */ 2771 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon { 2772 flex: 0 0 40px !important; 2773 width: 40px !important; 2774 height: 40px !important; 2775 } 2776 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-icon svg { 2777 width: 18px !important; 2778 height: 18px !important; 2779 } 2780 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-cards { 2781 grid-template-columns: repeat(2, 1fr) !important; 2782 gap: 12px !important; 2783 } 2784} 2785 2786/* [VSS-FLOW-PHONE] Below 600px the 2-up engagement cards get too narrow for 2787 their headings (several are two words on two lines already). */ 2788@media (max-width: 600px) { 2789 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-cards { 2790 grid-template-columns: 1fr !important; 2791 } 2792 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .vss-l2-infographic { 2793 --u: 1.5px; 2794 padding: 28px 16px 32px !important; 2795 } 2796 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .elementor-element-05b1eea { 2797 padding: 48px 18px 40px !important; 2798 } 2799 body:is(.page-id-10158, .page-id-10476, .page-id-10477, .page-id-10478) .ati-vss-track-is-right .elementor-element-ccb21ab { 2800 aspect-ratio: 4 / 3; 2801 } 2802} 2803 2804 2805/* ============================================================ 2806 19. HOMEPAGE VIDEO VARIANT - clone (page-id-10222) 2807 ------------------------------------------------------------ 2808 Client preview: homepage with a video instead of the interactive 2809 columns. The clone is NOT .home, so every .home rule in section 7 2810 (heights, logo overlay, nav hiding) simply never fires here - 2811 that's also why Secteurs d'activite shows in its header naturally. 2812 Video is injected by Custom JS; CSS owns the sizing. 2813 ============================================================ */ 2814 2815/* [VIDHOME-HIDECOLUMNS] Remove the interactive columns widget */ 2816body.page-id-10222 .qodef-interactive-banners { 2817 display: none !important; 2818} 2819 2820/* [VIDHOME-SECTIONBOX] Section = viewport - header(86) - marquee(35), 2821 pushed below the header. Same formula as [BANNER-HEIGHT]. */ 2822body.page-id-10222 .elementor-element-e542973 { 2823 min-height: calc(100vh - 86px - 35px) !important; 2824 height: calc(100vh - 86px - 35px) !important; 2825 margin-top: 86px !important; 2826} 2827 2828/* [VIDHOME-FILL] Column/widget/container must stretch to the section's full 2829 height - otherwise the video centres with empty bands above and below. */ 2830body.page-id-10222 .elementor-element-0a4b23f, 2831body.page-id-10222 .elementor-element-485c428, 2832body.page-id-10222 .elementor-element-485c428 > .elementor-widget-container, 2833body.page-id-10222 .ati-home-video-container { 2834 height: 100% !important; 2835 align-self: stretch !important; 2836} 2837 2838/* [VIDHOME-CONTAINER] Video container - clips the cover-cropped video */ 2839body.page-id-10222 .ati-home-video-container { 2840 width: 100%; 2841 overflow: hidden; 2842 position: relative; 2843} 2844 2845/* [VIDHOME-VIDEO] The video itself - fills and crops to the container. 2846 To change the video, edit the src in the Custom JS block, not here. */ 2847body.page-id-10222 .ati-home-video-container video { 2848 width: 100%; 2849 height: 100%; 2850 object-fit: cover; 2851 display: block; 2852} 2853 2854/* [COUNTER-TONNAGE] Session - the "Nos Services" counter row (Clients/Pays/ 2855 Tonnes de marchandise/Fournisseurs) writes each label vertically. Client 2856 wants "TONNES DE MARCHANDISE" (2 words) where the other 3 counters have 1, 2857 and can't use a manual line break in the field, so it wraps and crowds the 2858 number ("30000") next to it. 2859 2860 TWO WRONG GUESSES BEFORE THIS, both confirmed dead live via console 2861 (getComputedStyle + getBoundingClientRect on the real page) - this is a 2862 Stal theme widget (stal_core_counter), not a native Elementor counter, so 2863 .elementor-counter-title/.elementor-counter-number-wrapper - the classes 2864 that seemed obvious - don't exist on it at all. Never landed, on either 2865 attempt. Console dump of the widget's real descendants found the actual 2866 structure: 2867 p.qodef-m-title <- the vertical label 2868 div.qodef-m-digit-wrapper <- the number 2869 The label is `position:absolute; left:-20px; writing-mode:vertical-rl; 2870 transform:matrix(-1,0,0,-1,0,0)` (a 180deg flip), positioned relative to 2871 its parent .qodef-m-digit-wrapper (position:relative). Measured rects: 2872 title box right edge 983.9px, digit-wrapper left edge 961.6px - the label 2873 was overlapping 22.3px INTO the number, which is what "flush against the 2874 number" actually was. 2875 FIX: `left` is a normal layout offset applied before the rotation 2876 transform (the flip is centered on the box's own center via 2877 transform-origin, so it doesn't change where `left` puts that center) - 2878 moving it further negative reliably shifts the whole label left, still 2879 rotated the same way. -50px (from -20px) cleared the FR overlap. 2880 2881 FOLLOW-UP: the EN translation ("TONNES OF GOODS", 3 words vs FR's 2) 2882 wraps to more vertical-text lines, making the label box wider - at the 2883 same -50px it still measured a live 13.375px overlap into the number 2884 (getBoundingClientRect: titleRight 975.02px vs digitLeft 961.65px). 2885 -50px was tuned for FR's box width, not EN's. Since left offset is 2886 language-independent (both languages render through the same 2887 #counter-tonnage element/CSS, TranslatePress swaps only the text node), 2888 one value has to clear the widest-rendered label across every language
2889 this site's translated into - pushed to -71px (13.375 + 8px breathing 2890 room, same margin used for the original FR fix). Re-check other active 2891 languages here too if any get added later. 2892 Verify what's actually left of this counter (the PAYS widget) isn't 2893 crowded - not checked at the new offset. */ 2894#counter-tonnage .qodef-m-title { 2895 left: -71px !important; 2896} 2897</style><link rel="preconnect" href="https://fonts.googleapis.com"> 2898<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin> 2899<meta name="generator" content="Powered by Slider Revolution 6.7.40 - responsive, Mobile-Friendly Slider Plugin for WordPress with comfortable drag and drop interface." /> 2900<style class='wp-fonts-local' type='text/css'>@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:fallback;src:url(https://goldenrod-pigeon-420491.hostingersite.com/wp-content/plugins/woocommerce/assets/fonts/Inter-VariableFont_slnt,wght.woff2) format('woff2');font-stretch:normal}@font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url(https://goldenrod-pigeon-420491.hostingersite.com/wp-content/plugins/woocommerce/assets/fonts/cardo_normal_400.woff2) format('woff2')}</style> 2901<link rel="icon" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1-32x32.webp" sizes="32x32" /> 2902<link rel="icon" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1-192x192.webp" sizes="192x192" /> 2903<link rel="apple-touch-icon" href="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1-180x180.webp" /> 2904<meta name="msapplication-TileImage" content="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1-270x270.webp" />
2905<script data-optimized="1" src="data:text/javascript;base64,d2luZG93Ll90cHQ/Pz17fTt3aW5kb3cuU1I3Pz89e307X3RwdC5SPz89e307X3RwdC5SLmZvbnRzPz89e307X3RwdC5SLmZvbnRzLmN1c3RvbUZvbnRzPz89e307U1I3LmRldk1vZGU9ITE7U1I3LkY/Pz17fTtTUjcuRz8/PXt9O1NSNy5MSUI/Pz17fTtTUjcuRT8/PXt9O1NSNy5FLmdBZGRvbnM/Pz17fTtTUjcuRS5waHA/Pz17fTtTUjcuRS5ub25jZT0nNzRhNDdmMmMwZSc7U1I3LkUuYWpheHVybD0naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocCc7U1I3LkUucmVzdHVybD0naHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1qc29uLyc7U1I3LkUuc2x1Z19wYXRoPSdyZXZzbGlkZXIvcmV2c2xpZGVyLnBocCc7U1I3LkUuc2x1Zz0ncmV2c2xpZGVyJztTUjcuRS5wbHVnaW5fdXJsPSdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9yZXZzbGlkZXIvJztTUjcuRS53cF9wbHVnaW5fdXJsPSdodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy8nO1NSNy5FLnJldmlzaW9uPSc2LjcuNDAnO1NSNy5FLmZvbnRCYXNlVXJsPScnO1NSNy5HLmJyZWFrUG9pbnRzPVsxMjQwLDEwMjQsNzc4LDQ4MF07U1I3LkcuZlNVVlc9ITE7U1I3LkUubW9kdWxlcz1bJ21vZHVsZScsJ3BhZ2UnLCdzbGlkZScsJ2xheWVyJywnZHJhdycsJ2FuaW1hdGUnLCdzcnRvb2xzJywnY2FudmFzJywnZGVmYXVsdHMnLCdjYXJvdXNlbCcsJ25hdmlnYXRpb24nLCdtZWRpYScsJ21vZGlmaWVycycsJ21pZ3JhdGlvbiddO1NSNy5FLmxpYnM9WydXRUJHTCddO1NSNy5FLmNzcz1bJ2Nzc2xwJywnY3NzYnRucycsJ2Nzc2ZpbHRlcnMnLCdjc3NuYXYnLCdjc3NtZWRpYSddO1NSNy5FLnJlc291cmNlcz17fTtTUjcuRS55dG5jPSExO1NSNy5KU09OPz89e307Ci8qISBTbGlkZXIgUmV2b2x1dGlvbiA3LjAgLSBQYWdlIFByb2Nlc3NvciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7d2luZG93LlNSNz8/PXt9LHdpbmRvdy5fdHB0Pz89e30sU1I3LnZlcnNpb249IlNsaWRlciBSZXZvbHV0aW9uIDYuNy4xNiIsX3RwdC5nZXRNb2JpbGVab29tPSgpPT5fdHB0LmlzX21vYmlsZT9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgvd2luZG93LmlubmVyV2lkdGg6MSxfdHB0LmdldFdpbkRpbT1mdW5jdGlvbih0KXtfdHB0LnNjcmVlbkhlaWdodFdpdGhVcmxCYXI/Pz13aW5kb3cuaW5uZXJIZWlnaHQ7bGV0IGU9U1I3LkY/Lm1vZGFsPy52aXNpYmxlJiZTUjcuTVtTUjcuRi5tb2R1bGUuZ2V0SWRCeUFsaWFzKFNSNy5GLm1vZGFsLnJlcXVlc3RlZCldO190cHQuc2Nyb2xsQmFyPXdpbmRvdy5pbm5lcldpZHRoIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxlJiZ3aW5kb3cuaW5uZXJXaWR0aCE9PWUuYy5tb2R1bGUuY2xpZW50V2lkdGgsX3RwdC53aW5XPV90cHQuZ2V0TW9iaWxlWm9vbSgpKndpbmRvdy5pbm5lcldpZHRoLShfdHB0LnNjcm9sbEJhcnx8InByZXBhcmUiPT10P190cHQuc2Nyb2xsQmFyVz8/X3RwdC5tZXN1cmVTY3JvbGxCYXIoKTowKSxfdHB0Lndpbkg9X3RwdC5nZXRNb2JpbGVab29tKCkqd2luZG93LmlubmVySGVpZ2h0LF90cHQud2luV0FsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh9LF90cHQuZ2V0UmVzcG9uc2l2ZUxldmVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNSNy5HLmZTVVZXP190cHQuY2xvc2VzdEdFKHQsd2luZG93LmlubmVyV2lkdGgpOl90cHQuY2xvc2VzdEdFKHQsX3RwdC53aW5XQWxsKX0sX3RwdC5tZXN1cmVTY3JvbGxCYXI9ZnVuY3Rpb24oKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9IlJTc2Nyb2xsYmFyLW1lYXN1cmUiLHQuc3R5bGUud2lkdGg9IjEwMHB4Iix0LnN0eWxlLmhlaWdodD0iMTAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItOTk5OXB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLF90cHQuc2Nyb2xsQmFyVz10Lm9mZnNldFdpZHRoLXQuY2xpZW50V2lkdGgsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxfdHB0LnNjcm9sbEJhcld9LF90cHQubG9hZENTUz1hc3luYyBmdW5jdGlvbih0LGUscyl7cmV0dXJuIHM/X3RwdC5SLmZvbnRzLnJlcXVpcmVkW2VdLnN0YXR1cz0xOihfdHB0LlJbZV0/Pz17fSxfdHB0LlJbZV0uc3RhdHVzPTEpLG5ldyBQcm9taXNlKCgoaSxuKT0+e2lmKF90cHQuaXNTdHlsZXNoZWV0TG9hZGVkKHQpKXM/X3RwdC5SLmZvbnRzLnJlcXVpcmVkW2VdLnN0YXR1cz0yOl90cHQuUltlXS5zdGF0dXM9MixpKCk7ZWxzZXtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtvLnJlbD0ic3R5bGVzaGVldCI7bGV0IGw9InRleHQiLHI9ImNzcyI7by50eXBlPWwrIi8iK3Isby5ocmVmPXQsby5vbmxvYWQ9KCk9PntzP190cHQuUi5mb250cy5yZXF1aXJlZFtlXS5zdGF0dXM9MjpfdHB0LlJbZV0uc3RhdHVzPTIsaSgpfSxvLm9uZXJyb3I9KCk9PntzP190cHQuUi5mb250cy5yZXF1aXJlZFtlXS5zdGF0dXM9MzpfdHB0LlJbZV0uc3RhdHVzPTMsbihuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIENTUzogJHt0fWApKX0sZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChvKX19KSl9LF90cHQuYWRkQ29udGFpbmVyPWZ1bmN0aW9uKHQpe2NvbnN0e3RhZzplPSJkaXYiLGlkOnMsY2xhc3M6aSxkYXRhczpuLHRleHRDb250ZW50Om8saUhUTUw6bH09dCxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7aWYocyYmIiIhPT1zJiYoci5pZD1zKSxpJiYiIiE9PWkmJihyLmNsYXNzTmFtZT1pKSxuKWZvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVud
2905HJpZXMobikpInN0eWxlIj09dD9yLnN0eWxlLmNzc1RleHQ9ZTpyLnNldEF0dHJpYnV0ZShgZGF0YS0ke3R9YCxlKTtyZXR1cm4gbyYmKHIudGV4dENvbnRlbnQ9byksbCYmKHIuaW5uZXJIVE1MPWwpLHJ9LF90cHQuY29sbGVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJue2ZyYWdtZW50Om5ldyBEb2N1bWVudEZyYWdtZW50LGFkZCh0KXt2YXIgZT1fdHB0LmFkZENvbnRhaW5lcih0KTtyZXR1cm4gdGhpcy5mcmFnbWVudC5hcHBlbmRDaGlsZChlKSxlfSxhcHBlbmQodCl7dC5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50KX19fSxfdHB0LmlzU3R5bGVzaGVldExvYWRlZD1mdW5jdGlvbih0KXtsZXQgZT10LnNwbGl0KCI/IilbMF07cmV0dXJuIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9InN0eWxlc2hlZXQiXSwgbGlua1tyZWw9InByZWxvYWQiXScpKS5zb21lKCh0PT50LmhyZWYuc3BsaXQoIj8iKVswXT09PWUpKX0sX3RwdC5wcmVsb2FkZXI9e3JlcXVlc3RzOm5ldyBNYXAscHJlbG9hZGVyVGVtcGxhdGVzOm5ldyBNYXAsc2hvdzpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdClyZXR1cm47Y29uc3R7dHlwZTpzLGNvbG9yOml9PWU7aWYoczwwfHwib2ZmIj09cylyZXR1cm47Y29uc3Qgbj1gcHJlbG9hZGVyXyR7c31gO2xldCBvPXRoaXMucHJlbG9hZGVyVGVtcGxhdGVzLmdldChuKTtvfHwobz10aGlzLmJ1aWxkKHMsaSksdGhpcy5wcmVsb2FkZXJUZW1wbGF0ZXMuc2V0KG4sbykpLHRoaXMucmVxdWVzdHMuaGFzKHQpfHx0aGlzLnJlcXVlc3RzLnNldCh0LHtjb3VudDowfSk7Y29uc3QgbD10aGlzLnJlcXVlc3RzLmdldCh0KTtjbGVhclRpbWVvdXQobC50aW1lciksbC5jb3VudCsrLDE9PT1sLmNvdW50JiYobC50aW1lcj1zZXRUaW1lb3V0KCgoKT0+e2wucHJlbG9hZGVyQ2xvbmU9by5jbG9uZU5vZGUoITApLGwuYW5pbSYmbC5hbmltLmtpbGwoKSx2b2lkIDAhPT1fdHB0LmdzYXA/bC5hbmltPV90cHQuZ3NhcC5mcm9tVG8obC5wcmVsb2FkZXJDbG9uZSwxLHtvcGFjaXR5OjB9LHtvcGFjaXR5OjF9KTpsLnByZWxvYWRlckNsb25lLmNsYXNzTGlzdC5hZGQoInNyNy1mYWRlLWluIiksdC5hcHBlbmRDaGlsZChsLnByZWxvYWRlckNsb25lKX0pLDE1MCkpfSxoaWRlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnJlcXVlc3RzLmhhcyh0KSlyZXR1cm47Y29uc3QgZT10aGlzLnJlcXVlc3RzLmdldCh0KTtlLmNvdW50LS0sZS5jb3VudDwwJiYoZS5jb3VudD0wKSxlLmFuaW0mJmUuYW5pbS5raWxsKCksMD09PWUuY291bnQmJihjbGVhclRpbWVvdXQoZS50aW1lciksZS5wcmVsb2FkZXJDbG9uZSYmKGUucHJlbG9hZGVyQ2xvbmUuY2xhc3NMaXN0LnJlbW92ZSgic3I3LWZhZGUtaW4iKSxlLmFuaW09X3RwdC5nc2FwLnRvKGUucHJlbG9hZGVyQ2xvbmUsLjMse29wYWNpdHk6MCxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7ZS5wcmVsb2FkZXJDbG9uZS5yZW1vdmUoKX19KSkpfSxzdGF0ZTpmdW5jdGlvbih0KXtpZighdGhpcy5yZXF1ZXN0cy5oYXModCkpcmV0dXJuITE7cmV0dXJuIHRoaXMucmVxdWVzdHMuZ2V0KHQpLmNvdW50PjB9LGJ1aWxkOih0LGU9IiNmZmZmZmYiLHM9IiIpPT57aWYodDwwfHwib2ZmIj09PXQpcmV0dXJuIG51bGw7Y29uc3QgaT1wYXJzZUludCh0KTtpZih0PSJwcmx0IitpLGlzTmFOKGkpKXJldHVybiBudWxsO2lmKF90cHQubG9hZENTUyhTUjcuRS5wbHVnaW5fdXJsKyJwdWJsaWMvY3NzL3ByZWxvYWRlcnMvdCIraSsiLmNzcyIsInByZWxvYWRlcl8iK3QpLGlzTmFOKGkpfHxpPDYpe2NvbnN0IG49YGJhY2tncm91bmQtY29sb3I6JHtlfWAsbz0xPT09aXx8Mj09aT9uOiIiLGw9Mz09PWl8fDQ9PWk/bjoiIixyPV90cHQuY29sbGVjdG9yKCk7WyJkb3QxIiwiZG90MiIsImJvdW5jZTEiLCJib3VuY2UyIiwiYm91bmNlMyJdLmZvckVhY2goKHQ9PnIuYWRkKHt0YWc6ImRpdiIsY2xhc3M6dCxkYXRhczp7c3R5bGU6bH19KSkpO2NvbnN0IGQ9X3RwdC5hZGRDb250YWluZXIoe3RhZzoic3I3LXBybCIsY2xhc3M6YCR7dH0gJHtzfWAsZGF0YXM6e3N0eWxlOm99fSk7cmV0dXJuIHIuYXBwZW5kKGQpLGR9e2xldCBuPXt9O2lmKDc9PT1pKXtsZXQgdDtlLnN0YXJ0c1dpdGgoIiMiKT8odD1lLnJlcGxhY2UoIiMiLCIiKSx0PWByZ2JhKCR7cGFyc2VJbnQodC5zdWJzdHJpbmcoMCwyKSwxNil9LCAke3BhcnNlSW50KHQuc3Vic3RyaW5nKDIsNCksMTYpfSwgJHtwYXJzZUludCh0LnN1YnN0cmluZyg0LDYpLDE2KX0sIGApOmUuc3RhcnRzV2l0aCgicmdiIikmJih0PWUuc2xpY2UoZS5pbmRleE9mKCIoIikrMSxlLmxhc3RJbmRleE9mKCIpIikpLnNwbGl0KCIsIikubWFwKCh0PT50LnRyaW0oKSkpLHQ9YHJnYmEoJHt0WzBdfSwgJHt0WzFdfSwgJHt0WzJdfSwgYCksdCYmKG4uc3R5bGU9YGJvcmRlci10b3AtY29sb3I6ICR7dH0wLjY1KTsgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHt0fTAuMTUpOyBib3JkZXItbGVmdC1jb2xvcjogJHt0fTAuNjUpOyBib3JkZXItcmlnaHQtY29sb3I6ICR7dH0wLjE1KWApfWVsc2UgMTI9PT1pJiYobi5zdHlsZT1gYmFja2dyb3VuZDoke2V9YCk7Y29uc3Qgbz1bMTAsMCw0LDIsNSw5LDAsNCw0LDJdW2ktNl0sbD1fdHB0LmNvbGxlY3RvcigpLHI9bC5hZGQoe3RhZzoiZGl2IixjbGFzczoic3I3LXBybC1pbm5lciIsZGF0YXM6bn0pO0FycmF5LmZyb20oe2xlbmd0aDpvfSkuZm9yRWFjaCgoKCk9PnIuYXBwZW5kQ2hpbGQobC5hZGQoe3RhZzoic3BhbiIsZGF0YXM6e3N0eWxlOmBiYWNrZ3JvdW5kOiR7ZX1gfX0pKSkpO2NvbnN0IGQ9X3RwdC5hZGRDb250YWluZXIoe3RhZzoic3I3LXBybCIsY2xhc3M6YCR7dH0gJHtzfWB9KTtyZXR1cm4gbC5hcHBlbmQoZCksZH19fSxTUjcucHJlTG9hZGVyPXtzaG93Oih0LGUpPT57Im9mZiIhPT0oU1I3Lk1bdF0/LnNldHRpbmdzPy5wTG9hZGVyPy50eXBlPz8ib2ZmIikmJl90cHQucHJlbG9hZGVyLnNob3coZXx8U1I3Lk1bdF0uYy5tb2R1bGUsU1I3Lk1bdF0/LnNldHRpbmdzPy5wTG9hZGVyPz97Y29sb3I6IiNmZmYiLHR5cGU6MTB9KX0saGlkZToodCxlKT0+eyJvZmYiIT09KFNSNy5NW3RdPy5zZXR0aW5ncz8ucExvYWRlcj8udHlwZT8/Im9mZiIpJiZfdHB0LnByZWxvYWRlci5oaWRlKGV8fFNSNy5NW3RdLmMubW9kdWxlKX0sc3RhdGU6KHQsZSk9Pl90cHQucHJlbG9hZGVyLnN0YXRlKGV8fFNSNy5NW3RdLmMubW9kdWxlKX0sX3RwdC5wcmVwYXJlTW9kdWxlSGVpZ2h0PWZ1bmN0aW9uKHQpe3dpbmRvdy5TUjcuTT8/PXt9LHdpbmRvdy5TUjcuTVt0LmlkXT8/PXt9LCJpZ25vcmUiPT10Lmdvb2dsZUZvbnQmJihTUjcuRS5pZ25vcmVHb29nbGVGb250PSEwKTtsZXQgZT13aW5kb3cuU1I3Lk1bdC5pZF07aWYobnVsbD09X3RwdC5zY3JvbGxCYXJXJiZfdHB0Lm1lc3VyZVNjcm9sbEJhcigpLGUuYz8/PXt9LGUuc3RhdGVzPz89e30sZS5zZXR0aW5ncz8/PXt9LGUuc2V0dGluZ3Muc2l6ZT8/PXt9LHQuZml4ZWQmJihlLnNldHRpbmdzLmZpeGVkPSEwKSxlLmMubW9kdWxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNyNy1tb2R1bGUjIit0LmlkKSxlLmMuYWRqdXN0ZXI9ZS5jLm1vZHVsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3I3LWFkanVzdGVyIilbMF0sZS5jLmNvbnRlbnQ9ZS5jLm1vZHVsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3I3LWNvbnRlbnQiKVswXSwiY2Fyb3VzZWwiPT10LnR5cGUmJihlLmMuY2Fyb3VzZWw9ZS5jLmNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNyNy1jYXJvdXNlbCIpWzBdKSxudWxsPT1lLmMubW9kdWxlfHxudWxsPT1lLmMubW9kdWxlKXJldHVybjt0LnBsVHlwZSYmdC5wbENvbG9yJiYoZS5zZXR0aW5ncy5wTG9hZGVyPXt0eXBlOnQucGxUeXBlLGNvbG9yOnQucGxDb2xvcn0pLHZvaWQgMD09PXQucGxUeXBlfHwib2ZmIj09PXQucGxUeXBlfHxTUjcucHJlTG9hZGVyLnN0YXRlKHQuaWQpJiZTUjcucHJlTG9hZGVyLnN0YXRlKHQuaWQsZS5jLm1vZHVsZSl8fFNSNy5wcmVMb2FkZXIuc2hvdyh0LmlkLGUuYy5tb2R1bGUpLF90cHQud2luV3x8X3RwdC5nZXRXaW5EaW0oInByZXBhcmUiKSxfdHB0LmdldFdpbkRpbSgpO2xldCBzPSIiK2UuYy5tb2R1bGUuZGF0YXNldD8ubW9kYWw7Im1vZGFsIj09c3x8InRydWUiPT1zfHwidW5kZWZpbmVkIiE9PXMmJiJmYWxzZSIhPT1zfHwoZS5zZXR0aW5ncy5zaXplLmZ1bGxXaWR0aD10LnNpemUuZnVsbFdpZHRoLGUuTEVWPz89X3RwdC5nZXRSZXNwb25zaXZlTGV2ZWwod2luZG93LlNSNy5HLmJyZWFrUG9pbnRzLHQuaWQpLHQudnB0PV90cHQuZmlsbEFycmF5KHQudnB0LDUpLGUuc2V0dGluZ3MudlBvcnQ9dC52cHRbZS5MRVZdLHZvaWQgMCE9PXQuZWwmJiI3MjAiPT10LmVsWzRdJiZ0LmdoWzRdIT09dC5lbFs0XSYmIjk2MCI9PXQuZWxbM10mJnQuZ2hbM10hPT10LmVsWzNdJiYiNzY4Ij09dC5lbFsyXSYmdC5naFsyXSE9PXQuZWxbMl0mJmRlbGV0ZSB0LmVsLGUuc2V0dGluZ3Muc2l6ZS5oZWlnaHQ9bnVsbD09dC5lbHx8bnVsbD09dC5lbFtlLkxFVl18fDA9PXQuZWxbZS5MRVZdfHwiYXV0byI9PXQuZWxbZS5MRVZdP190c
2905HQuZmlsbEFycmF5KHQuZ2gsNSwtMSk6X3RwdC5maWxsQXJyYXkodC5lbCw1LC0xKSxlLnNldHRpbmdzLnNpemUud2lkdGg9X3RwdC5maWxsQXJyYXkodC5ndyw1LC0xKSxlLnNldHRpbmdzLnNpemUubWluSGVpZ2h0PV90cHQuZmlsbEFycmF5KHQubWg/P1swXSw1LC0xKSxlLmNhY2hlU2l6ZT17ZnVsbFdpZHRoOmUuc2V0dGluZ3Muc2l6ZT8uZnVsbFdpZHRoLGZ1bGxIZWlnaHQ6ZS5zZXR0aW5ncy5zaXplPy5mdWxsSGVpZ2h0fSx2b2lkIDAhPT10Lm9mZiYmKHQub2ZmPy50JiYoZS5zZXR0aW5ncy5zaXplLm0/Pz17fSkmJihlLnNldHRpbmdzLnNpemUubS50PXQub2ZmLnQpLHQub2ZmPy5iJiYoZS5zZXR0aW5ncy5zaXplLm0/Pz17fSkmJihlLnNldHRpbmdzLnNpemUubS5iPXQub2ZmLmIpLHQub2ZmPy5sJiYoZS5zZXR0aW5ncy5zaXplLnA/Pz17fSkmJihlLnNldHRpbmdzLnNpemUucC5sPXQub2ZmLmwpLHQub2ZmPy5yJiYoZS5zZXR0aW5ncy5zaXplLnA/Pz17fSkmJihlLnNldHRpbmdzLnNpemUucC5yPXQub2ZmLnIpLGUub2Zmc2V0UHJlcGFyZWQ9ITApLF90cHQudXBkYXRlUE1IZWlnaHQodC5pZCx0LCEwKSl9LF90cHQudXBkYXRlUE1IZWlnaHQ9KHQsZSxzKT0+e2xldCBpPVNSNy5NW3RdO3ZhciBuPWkuc2V0dGluZ3Muc2l6ZS5mdWxsV2lkdGg/X3RwdC53aW5XOmkuYy5tb2R1bGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aDtuPTA9PT1ufHxpc05hTihuKT9fdHB0Lndpblc6bjtsZXQgbz1pLnNldHRpbmdzLnNpemUud2lkdGhbaS5MRVZdfHxpLnNldHRpbmdzLnNpemUud2lkdGhbaS5MRVYrK118fGkuc2V0dGluZ3Muc2l6ZS53aWR0aFtpLkxFVi0tXXx8bixsPWkuc2V0dGluZ3Muc2l6ZS5oZWlnaHRbaS5MRVZdfHxpLnNldHRpbmdzLnNpemUuaGVpZ2h0W2kuTEVWKytdfHxpLnNldHRpbmdzLnNpemUuaGVpZ2h0W2kuTEVWLS1dfHwwLHI9aS5zZXR0aW5ncy5zaXplLm1pbkhlaWdodFtpLkxFVl18fGkuc2V0dGluZ3Muc2l6ZS5taW5IZWlnaHRbaS5MRVYrK118fGkuc2V0dGluZ3Muc2l6ZS5taW5IZWlnaHRbaS5MRVYtLV18fDA7aWYobD0iYXV0byI9PWw/MDpsLGw9cGFyc2VJbnQobCksImNhcm91c2VsIiE9PWUudHlwZSYmKG4tPXBhcnNlSW50KGUub253Pz8wKXx8MCksaS5NUD0haS5zZXR0aW5ncy5zaXplLmZ1bGxXaWR0aCYmbjxvfHxfdHB0Lndpblc8bz9NYXRoLm1pbigxLG4vbyk6MSxlLnNpemUuZnVsbFNjcmVlbnx8ZS5zaXplLmZ1bGxIZWlnaHQpe2xldCB0PXBhcnNlSW50KGUuZmhvKXx8MCxzPSgiIitlLmZobykuaW5kZXhPZigiJSIpPi0xO2UubmV3aD1fdHB0LndpbkgtKHM/X3RwdC53aW5IKnQvMTAwOnQpfWVsc2UgZS5uZXdoPWkuTVAqTWF0aC5tYXgobCxyKTtpZihlLm5ld2grPShwYXJzZUludChlLm9uaD8/MCl8fDApKyhwYXJzZUludChlLmNhcm91c2VsPy5wdCl8fDApKyhwYXJzZUludChlLmNhcm91c2VsPy5wYil8fDApLHZvaWQgMCE9PWUuc2xpZGVkdXJhdGlvbiYmKGUubmV3aD1NYXRoLm1heChlLm5ld2gscGFyc2VJbnQoZS5zbGlkZWR1cmF0aW9uKS8zKSksZS5zaGR3JiZfdHB0LmJ1aWxkU2hhZG93KGUuaWQsZSksaS5jLmFkanVzdGVyLnN0eWxlLmhlaWdodD1lLm5ld2grInB4IixpLmMubW9kdWxlLnN0eWxlLmhlaWdodD1lLm5ld2grInB4IixpLmMuY29udGVudC5zdHlsZS5oZWlnaHQ9ZS5uZXdoKyJweCIsaS5zdGF0ZXMuaGVpZ2h0UHJlcGFyZWQ9ITAsaS5kaW1zPz89e30saS5kaW1zLm1vZHVsZVJlY3Q9aS5jLm1vZHVsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpLmMuY29udGVudC5zdHlsZS5sZWZ0PSItIitpLmRpbXMubW9kdWxlUmVjdC5sZWZ0KyJweCIsIWkuc2V0dGluZ3Muc2l6ZS5mdWxsV2lkdGgpcmV0dXJuIHMmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PntuIT09aS5jLm1vZHVsZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoJiZfdHB0LnVwZGF0ZVBNSGVpZ2h0KGUuaWQsZSl9KSksdm9pZCBfdHB0LmJnU3R5bGUoZS5pZCxlLHdpbmRvdy5pbm5lcldpZHRoPT1fdHB0LndpblcsITApO190cHQuYmdTdHlsZShlLmlkLGUsd2luZG93LmlubmVyV2lkdGg9PV90cHQud2luVywhMCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3MmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PntuIT09aS5jLm1vZHVsZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoJiZfdHB0LnVwZGF0ZVBNSGVpZ2h0KGUuaWQsZSl9KSl9KSksaS5lYXJseVJlc2l6ZXJGdW5jdGlvbnx8KGkuZWFybHlSZXNpemVyRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7X3RwdC5nZXRXaW5EaW0oKSxfdHB0Lm1vZHVsZURlZmF1bHRzKGUuaWQsZSksX3RwdC51cGRhdGVTbGlkZUJnKHQsITApfSkpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixpLmVhcmx5UmVzaXplckZ1bmN0aW9uKSl9LF90cHQuYnVpbGRTaGFkb3c9ZnVuY3Rpb24odCxlKXtsZXQgcz1TUjcuTVt0XTtudWxsPT1zLmMuc2hhZG93JiYocy5jLnNoYWRvdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcjctbW9kdWxlLXNoYWRvdyIpLHMuYy5zaGFkb3cuY2xhc3NMaXN0LmFkZCgic3I3LXNoZHctIitlLnNoZHcpLHMuYy5jb250ZW50LmFwcGVuZENoaWxkKHMuYy5zaGFkb3cpKX0sX3RwdC5iZ1N0eWxlPWFzeW5jKHQsZSxzLGksbik9Pntjb25zdCBvPVNSNy5NW3RdO2lmKChlPWU/P28uc2V0dGluZ3MpLmZpeGVkJiYhby5jLm1vZHVsZS5jbGFzc0xpc3QuY29udGFpbnMoInNyNy10b3AtZml4ZWQiKSYmKG8uYy5tb2R1bGUuY2xhc3NMaXN0LmFkZCgic3I3LXRvcC1maXhlZCIpLG8uYy5tb2R1bGUuc3R5bGUucG9zaXRpb249ImZpeGVkIixvLmMubW9kdWxlLnN0eWxlLndpZHRoPSIxMDAlIixvLmMubW9kdWxlLnN0eWxlLnRvcD0iMHB4IixvLmMubW9kdWxlLnN0eWxlLmxlZnQ9IjBweCIsby5jLm1vZHVsZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixvLmMubW9kdWxlLnN0eWxlLnpJbmRleD01ZTMsby5jLmNvbnRlbnQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpLG51bGw9PW8uYy5iZ2NhbnZhcyl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3I3LW1vZHVsZS1iZyIpLGw9ITE7aWYoInN0cmluZyI9PXR5cGVvZiBlPy5iZz8uY29sb3ImJmU/LmJnPy5jb2xvci5pbmNsdWRlcygieyIpKWlmKF90cHQuZ3JhZGllbnQmJl90cHQuZ3NhcCllLmJnLmNvbG9yPV90cHQuZ3JhZGllbnQuY29udmVydChlLmJnLmNvbG9yKTtlbHNlIHRyeXtsZXQgdD1KU09OLnBhcnNlKGUuYmcuY29sb3IpOyh0Py5vcmlnfHx0Py5zdHJpbmcpJiYoZS5iZy5jb2xvcj1KU09OLnBhcnNlKGUuYmcuY29sb3IpKX1jYXRjaCh0KXtyZXR1cm59bGV0IHI9InN0cmluZyI9PXR5cGVvZiBlPy5iZz8uY29sb3I/ZT8uYmc/LmNvbG9yfHwidHJhbnNwYXJlbnQiOmU/LmJnPy5jb2xvcj8uc3RyaW5nPz9lPy5iZz8uY29sb3I/Lm9yaWc/P2U/LmJnPy5jb2xvcj8uY29sb3I/PyJ0cmFuc3BhcmVudCI7aWYodC5zdHlsZVsiYmFja2dyb3VuZCIrKFN0cmluZyhyKS5pbmNsdWRlcygiZ3JhZCIpPyIiOiJDb2xvciIpXT1yLCgidHJhbnNwYXJlbnQiIT09cnx8bikmJihsPSEwKSxvLm9mZnNldFByZXBhcmVkJiYodC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iKSxlPy5iZz8uaW1hZ2U/LnNyYyYmKHQuc3R5bGUuYmFja2dyb3VuZEltYWdlPWB1cmwoJHtlPy5iZz8uaW1hZ2Uuc3JjfSlgLHQuc3R5bGUuYmFja2dyb3VuZFNpemU9IiI9PShlLmJnLmltYWdlPy5zaXplPz8iIik/ImNvdmVyIjplLmJnLmltYWdlLnNpemUsdC5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb249ZS5iZy5pbWFnZS5wb3NpdGlvbix0LnN0eWxlLmJhY2tncm91bmRSZXBlYXQ9IiI9PWUuYmcuaW1hZ2UucmVwZWF0fHxudWxsPT1lLmJnLmltYWdlLnJlcGVhdD8ibm8tcmVwZWF0IjplLmJnLmltYWdlLnJlcGVhdCxsPSEwKSwhbClyZXR1cm47by5jLmJnY2FudmFzPXQsZS5zaXplLmZ1bGxXaWR0aD90LnN0eWxlLndpZHRoPV90cHQud2luVy0ocyYmX3RwdC53aW5IPGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0P190cHQuc2Nyb2xsQmFyVzowKSsicHgiOmkmJih0LnN0eWxlLndpZHRoPW8uYy5tb2R1bGUub2Zmc2V0V2lkdGgrInB4IiksZS5zYnQ/LnVzZT9vLmMuY29udGVudC5hcHBlbmRDaGlsZChvLmMuYmdjYW52YXMpOm8uYy5tb2R1bGUuYXBwZW5kQ2hpbGQoby5jLmJnY2FudmFzKX1vLmMuYmdjYW52YXMuc3R5bGUuaGVpZ2h0PXZvaWQgMCE9PWUubmV3aD9lLm5ld2grInB4IjooImNhcm91c2VsIj09ZS50eXBlP28uZGltcy5tb2R1bGUuaDpvLmRpbXMuY29udGVudC5oKSsicHgiLG8uYy5iZ2NhbnZhcy5zdHlsZS5sZWZ0PSFzJiZlLnNidD8udXNlfHxvLmMuYmdjYW52YXMuY2xvc2VzdCgiU1I3LUNPTlRFTlQiKT8iMHB4IjoiLSIrKG8/LmRpbXM/Lm1vZHVsZVJlY3Q/LmxlZnQ/PzApKyJweCJ9LF90cHQudXBkYXRlU2xpZGVCZz1mdW5jdGlvbih0LGUpe2NvbnN0IHM9U1I3Lk1bdF07bGV0IGk9cy5zZXR0aW5ncztzPy5jPy5iZ2NhbnZhcyYmKGkuc2l6ZS5mdWxsV2lkdGg/cy5jLmJnY2FudmFzLnN0eWxlLndpZHRoPV90cHQud2luVy0oZSYmX3RwdC53aW5IPGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0P190cHQuc2Nyb2xsQmFyVzowKSsicHgiOnByZXBhcmluZyYmKHMuYy5iZ2NhbnZhcy5zdHlsZS53aWR0aD1zLmMubW9kdWxlLm9mZnNldFdpZHRoKyJweCIpKX0sX3RwdC5tb2R1bGVEZWZhdWx0cz0odCxlKT0+e2xldCBzPVNSNy5NW3RdO251bGwhPXMmJm51bGwhPXMuYyYmbnVsbCE9cy5jLm1vZHVsZSYmKHMuZGltcz8/PXt9LHMuZGltcy5tb2R1bGVSZWN0PXMuYy5tb2R1bGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5jLmNvbnRlbnQuc3R5bGUubGVmdD0iLSIrcy5kaW1zLm1vZHVsZVJlY3QubGVmdCsicHgiLHMuYy5jb250ZW50LnN0eWxlLndpZHRoPV90cHQud2luVy1fdHB0LnNjcm9sbEJhclcrInB4IiwiY2Fyb3VzZWwiPT1lLnR5cGUmJihzLmMubW9kdWxlLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIiksX3RwdC5iZ1N0eWxlKHQsZSx3aW5kb3cuaW5uZXJXaWR0aD09X3RwdC53aW5XKSl9LF90cHQuZ2V0T2Zmc2V0PXQ9Pnt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9d2luZG93LnBhZ2VYT2Zmc2V0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxpPXdpbmRvdy5wYWdlWU9mZnNldHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm57dG9wOmUudG9wK2ksbGVmdDplLmxlZnQrc319LF90cHQuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSl7bGV0IHMsaTt0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IG49QXJyYXkoZSksbz10Lmxlbmd0aDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKW5baSsoZS1vKV09dFtpXSxudWxsPT1zJiYiIyIhPT10W2ldJiYocz10W2ldKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXZvaWQgMCE9PW5bdF0mJiIjIiE9blt0XXx8KG5bdF09cykscz1uW3RdO3JldHVybiBufSxfdHB0LmNsb3Nlc3RHRT1mdW5jdGlvbih0LGUpe2xldCBzPU51bWJlci5NQVhfVkFMVUUsaT0tMTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dLTE+PWUmJnRbbl0tMS1lPHMmJihzPXRbbl0tMS1lLGk9bik7cmV0dXJuKytpfX0oKQ==" defer></script>
2905 2906</head> 2907<body class="wp-singular page-template page-template-ati-actualites-template page-template-ati-actualites-template-php page page-id-10087 wp-custom-logo wp-theme-stal theme-stal qode-framework-1.2.6 woocommerce-no-js translatepress-fr_FR qodef-qi--no-touch qi-addons-for-elementor-1.11.1 stal-core-1.7 qode-optimizer-1.2.2 stal-1.7 qodef-back-to-top--enabled qodef-content-grid-1100 qodef-header--standard qodef-header-appearance--sticky qodef-mobile-header--standard qodef-mobile-header-appearance--sticky qodef-drop-down-second--full-width qodef-drop-down-second--animate-height qodef-header-standard--right qodef-search--on-side elementor-default elementor-kit-9 qodef-content-behind-header" itemscope itemtype="https://schema.org/WebPage"> 2908 <div id="qodef-page-wrapper" class=""> 2909 <header id="qodef-page-header"> 2910 <div id="qodef-page-header-inner" > 2911 <a itemprop="url" class="qodef-header-logo-link qodef-height--set " href="https://goldenrod-pigeon-420491.hostingersite.com/" style="height:120px;color:#ffffff;" rel="home"> 2912 <img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--main" alt="logo main" /><img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--dark" alt="logo dark" /><img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--light" alt="logo main" /></a> <nav class="qodef-header-navigation" role="navigation" aria-label="Top Menu"> 2913 <ul id="qodef-main-navigation-menu" class="menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-10362"><a href="https://goldenrod-pigeon-420491.hostingersite.com/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Accueil</span></span></a></li> 2914<li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-5366 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/qui-sommes-nous/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Qui Sommes Nous</span></span></a><span class="qodef-menu-arrow"></span> 2915<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2916 <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-10087 current_page_item menu-item-10668"><a href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Actualités</span></span></a></li> 2917</ul></div></div> 2918</li> 2919<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-5597 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/nos-services/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Nos Services</span></span></a><span class="qodef-menu-arrow"></span> 2920<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2921 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10657"><a href="https://goldenrod-pigeon-420491.hostingersite.com/sourcing/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Sourcing</span></span></a></li> 2922 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10659"><a href="https://goldenrod-pigeon-420491.hostingersite.com/achat-industriel/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Achat Industriel</span></span></a></li> 2923 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10656"><a href="https://goldenrod-pigeon-420491.hostingersite.com/logistique/">
2923<span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Logistique</span></span></a></li> 2924 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/export-international-transport/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Transport/Export International</span></span></a></li> 2925 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5677"><a href="https://goldenrod-pigeon-420491.hostingersite.com/supply-chain/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Supply Chain</span></span></a></li> 2926</ul></div></div> 2927</li> 2928<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8148 qodef-menu-item--narrow"><a href="#"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Secteurs d’activité</span></span></a><span class="qodef-menu-arrow"></span> 2929<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2930 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5587"><a href="https://goldenrod-pigeon-420491.hostingersite.com/agroalimentaire/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Agroalimentaire</span></span></a></li> 2931 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5654"><a href="https://goldenrod-pigeon-420491.hostingersite.com/btp/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">BTP</span></span></a></li> 2932 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5653"><a href="https://goldenrod-pigeon-420491.hostingersite.com/minier/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Minier</span></span></a></li> 2933 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5652"><a href="https://goldenrod-pigeon-420491.hostingersite.com/petrolier/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Pétrolier</span></span></a></li> 2934 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/energie/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Ãnergie</span></span></a></li> 2935 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6317"><a href="https://goldenrod-pigeon-420491.hostingersite.com/automobile/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Automobile</span></span></a></li> 2936 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6316"><a href="https://goldenrod-pigeon-420491.hostingersite.com/aeronautique/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Aéronautique</span></span></a></li> 2937 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6318"><a href="https://goldenrod-pigeon-420491.hostingersite.com/ferroviaire/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Ferroviaire</span></span></a></li> 2938</ul></div></div> 2939</li> 2940<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10366"><a href="https://goldenrod-pigeon-420491.hostingersite.com/recrutement/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Recrutement</span></span></a></li> 2941</ul> </nav> 2942<div class="qodef-widget-holder"> 2943 <div id="stal_core_side_area_opener-2" class="widget widget_stal_core_side_area_opener qodef-header-widget-area-one" data-area="header-widget-one"> <a itemprop="url" class="qodef-side-area-opener qodef-side-area-opener--predefined" href="#"> 2944 <span class="qodef-lines"><span class="qodef-line qodef-line-1"></span><span class="qodef-line qodef-line-2"></span><span class="qodef-line qodef-line-3"></span><span class="qodef-line qodef-line-4"></span><span class="qodef-line qodef-line-5"></span></span> </a> 2945 </div></div> 2946 </div> 2947 <div class="qodef-header-sticky"> 2948 <div class="qodef-header-sticky-inner "> 2949 <a itemprop="url" class="qodef-header-logo-link qodef-height--set " href="https://golde
2949nrod-pigeon-420491.hostingersite.com/" style="height:120px;color:#ffffff;" rel="home"> 2950 <img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--main" alt="logo main" /><img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--dark" alt="logo dark" /><img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--light" alt="logo main" /></a> <nav class="qodef-header-navigation" role="navigation" aria-label="Top Menu"> 2951 <ul id="qodef-sticky-navigation-menu" class="menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-10362"><a href="https://goldenrod-pigeon-420491.hostingersite.com/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Accueil</span></span></a></li> 2952<li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-5366 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/qui-sommes-nous/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Qui Sommes Nous</span></span></a><span class="qodef-menu-arrow"></span> 2953<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2954 <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-10087 current_page_item menu-item-10668"><a href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Actualités</span></span></a></li> 2955</ul></div></div> 2956</li> 2957<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-5597 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/nos-services/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Nos Services</span></span></a><span class="qodef-menu-arrow"></span> 2958<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2959 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10657"><a href="https://goldenrod-pigeon-420491.hostingersite.com/sourcing/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Sourcing</span></span></a></li> 2960 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10659"><a href="https://goldenrod-pigeon-420491.hostingersite.com/achat-industriel/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Achat Industriel</span></span></a></li> 2961 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10656"><a href="https://goldenrod-pigeon-420491.hostingersite.com/logistique/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Logistique</span></span></a></li> 2962 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/export-international-transport/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Transport/Export International</span></span></a></li> 2963 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5677"><a href="https://goldenrod-pigeon-420491.hostingersite.com/supply-chain/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Supply Chain</span></span></a></li> 2964</ul></div></div> 2965</li> 2966<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8148 qodef-menu-item--narrow"><a href="#"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Secteurs d’activité</span></span></a>
2966<span class="qodef-menu-arrow"></span> 2967<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 2968 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5587"><a href="https://goldenrod-pigeon-420491.hostingersite.com/agroalimentaire/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Agroalimentaire</span></span></a></li> 2969 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5654"><a href="https://goldenrod-pigeon-420491.hostingersite.com/btp/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">BTP</span></span></a></li> 2970 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5653"><a href="https://goldenrod-pigeon-420491.hostingersite.com/minier/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Minier</span></span></a></li> 2971 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5652"><a href="https://goldenrod-pigeon-420491.hostingersite.com/petrolier/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Pétrolier</span></span></a></li> 2972 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/energie/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Ãnergie</span></span></a></li> 2973 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6317"><a href="https://goldenrod-pigeon-420491.hostingersite.com/automobile/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Automobile</span></span></a></li> 2974 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6316"><a href="https://goldenrod-pigeon-420491.hostingersite.com/aeronautique/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Aéronautique</span></span></a></li> 2975 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6318"><a href="https://goldenrod-pigeon-420491.hostingersite.com/ferroviaire/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Ferroviaire</span></span></a></li> 2976</ul></div></div> 2977</li> 2978<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10366"><a href="https://goldenrod-pigeon-420491.hostingersite.com/recrutement/"><span class="qodef-menu-item-inner"><span class="qodef-menu-item-text">Recrutement</span></span></a></li> 2979</ul> </nav> 2980 <div class="qodef-widget-holder"> 2981 <div id="stal_core_side_area_opener-4" class="widget widget_stal_core_side_area_opener qodef-sticky-right"> <a itemprop="url" class="qodef-side-area-opener qodef-side-area-opener--predefined" href="#"> 2982 <span class="qodef-lines"><span class="qodef-line qodef-line-1"></span><span class="qodef-line qodef-line-2"></span><span class="qodef-line qodef-line-3"></span><span class="qodef-line qodef-line-4"></span><span class="qodef-line qodef-line-5"></span></span> </a> 2983 </div> </div> 2984 2985 </div> 2986</div></header><header id="qodef-page-mobile-header"> 2987 <div id="qodef-page-mobile-header-inner"> 2988 <a itemprop="url" class="qodef-mobile-header-logo-link " href="https://goldenrod-pigeon-420491.hostingersite.com/" style="height:120px;" rel="home"> 2989 <img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--main" alt="logo main" /> <img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--dark" alt="logo dark" /><img width="512" height="512" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/cropped-Nouveau-logo-ATI-Export-1.webp" class="qodef-header-logo-image qodef--light" alt="logo light" /></a><a id="qodef-mobile-header-opener" href="#"> 2990 <span class="qodef-lines"> 2991 <span class="qodef-line qodef-line-1"></span> 2992 <span class="qodef-line qodef-line-2"></span> 2993 <span class="qodef-line qodef-line-3"></span> 2994 <span class="qodef-line qodef-line-4"></span> 2995 <span class="qodef-line qodef-line-5"></span> 2996 </span> 2997</a> <nav id="qodef-mobile-header-navigation" class="qodef-m" role="navigation" aria-label="Mobile Menu"> 2998 <div class="qodef-m-inner"><ul id="qodef-mobile-header-navigation-menu" class="qodef-content-grid"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-10362">
2998<a href="https://goldenrod-pigeon-420491.hostingersite.com/"><span class="qodef-menu-item-inner">Accueil</span></a></li> 2999<li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-5366 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/qui-sommes-nous/"><span class="qodef-menu-item-inner">Qui Sommes Nous</span></a><span class="qodef-menu-arrow"></span> 3000<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 3001 <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-10087 current_page_item menu-item-10668"><a href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/"><span class="qodef-menu-item-inner">Actualités</span></a></li> 3002</ul></div></div> 3003</li> 3004<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-5597 qodef-menu-item--narrow"><a href="https://goldenrod-pigeon-420491.hostingersite.com/nos-services/"><span class="qodef-menu-item-inner">Nos Services</span></a><span class="qodef-menu-arrow"></span> 3005<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 3006 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10657"><a href="https://goldenrod-pigeon-420491.hostingersite.com/sourcing/"><span class="qodef-menu-item-inner">Sourcing</span></a></li> 3007 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10659"><a href="https://goldenrod-pigeon-420491.hostingersite.com/achat-industriel/"><span class="qodef-menu-item-inner">Achat Industriel</span></a></li> 3008 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10656"><a href="https://goldenrod-pigeon-420491.hostingersite.com/logistique/"><span class="qodef-menu-item-inner">Logistique</span></a></li> 3009 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/export-international-transport/"><span class="qodef-menu-item-inner">Transport/Export International</span></a></li> 3010 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5677"><a href="https://goldenrod-pigeon-420491.hostingersite.com/supply-chain/"><span class="qodef-menu-item-inner">Supply Chain</span></a></li> 3011</ul></div></div> 3012</li> 3013<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8148 qodef-menu-item--narrow"><a href="#"><span class="qodef-menu-item-inner">Secteurs d’activité</span></a><span class="qodef-menu-arrow"></span> 3014<div class="qodef-drop-down-second"><div class="qodef-drop-down-second-inner"><ul class="sub-menu"> 3015 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5587"><a href="https://goldenrod-pigeon-420491.hostingersite.com/agroalimentaire/"><span class="qodef-menu-item-inner">Agroalimentaire</span></a></li> 3016 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5654"><a href="https://goldenrod-pigeon-420491.hostingersite.com/btp/"><span class="qodef-menu-item-inner">BTP</span></a></li> 3017 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5653"><a href="https://goldenrod-pigeon-420491.hostingersite.com/minier/"><span class="qodef-menu-item-inner">Minier</span></a></li> 3018 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5652"><a href="https://goldenrod-pigeon-420491.hostingersite.com/petrolier/"><span class="qodef-menu-item-inner">Pétrolier</span></a></li> 3019 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5655"><a href="https://goldenrod-pigeon-420491.hostingersite.com/energie/"><span class="qodef-menu-item-inner">Ãnergie</span></a></li> 3020 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6317"><a href="https://goldenrod-pigeon-420491.hostingersite.com/automobile/">
3020<span class="qodef-menu-item-inner">Automobile</span></a></li> 3021 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6316"><a href="https://goldenrod-pigeon-420491.hostingersite.com/aeronautique/"><span class="qodef-menu-item-inner">Aéronautique</span></a></li> 3022 <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-6318"><a href="https://goldenrod-pigeon-420491.hostingersite.com/ferroviaire/"><span class="qodef-menu-item-inner">Ferroviaire</span></a></li> 3023</ul></div></div> 3024</li> 3025<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10366"><a href="https://goldenrod-pigeon-420491.hostingersite.com/recrutement/"><span class="qodef-menu-item-inner">Recrutement</span></a></li> 3026</ul></div> </nav> 3027 </div> 3028 </header> <div id="qodef-page-outer"> 3029 <div class="qodef-page-title qodef-m qodef-title--standard qodef-alignment--left qodef-vertical-alignment--header-bottom"> 3030 <div class="qodef-m-inner"> 3031 <div class="qodef-m-content qodef-content-grid "> 3032 <h1 class="qodef-m-title entry-title"> 3033 Actualités </h1> 3034 </div> </div> 3035 </div> <div id="qodef-page-inner" class="qodef-content-grid"> 3036<style> 3037/* âââââââââââââââââââââââââââââââââââââââââââââââââââ 3038 ATI ACTUALITÃS â PAGE STYLES 3039 âââââââââââââââââââââââââââââââââââââââââââââââââââ */ 3040 3041/* Fix header logo alignment â measured: actualités pad=0px 40px, 3042 Nos Services pad=0px. Zero the sides to match. */ 3043body.page-template-ati-actualites-template #qodef-page-header-inner { 3044 padding: 0 !important; 3045} 3046 3047/* Hide theme's injected page title â scoped to this page */ 3048body.page-template-ati-actualites-template .qodef-page-title, 3049body.page-template-ati-actualites-template .qodef-title--standard, 3050body.page-template-ati-actualites-template #qodef-page-title { 3051 display: none !important; 3052} 3053 3054/* ââ ROOT CAUSE FIX ââââââââââââââââââââââââââââââââââ 3055 .qodef-content-grid is the ONLY element constraining 3056 this page. Measured: width 1100px, margin 0 82.33px, 3057 background #fff. The margin clips our content; the 3058 white background bleeds into the footer area. 3059 Scoped to this page only via body class. 3060 ââââââââââââââââââââââââââââââââââââââââââââââââââââ */ 3061body.page-template-ati-actualites-template .qodef-content-grid { 3062 width: 100% !important; 3063 max-width: 100% !important; 3064 margin: 0 !important; 3065 padding: 0 !important; 3066 background: transparent !important; 3067} 3068 3069/* The footer uses the same .qodef-content-grid class but needs 3070 its own constrained width. Restore it to match normal inner pages 3071 (measured: x:82px, width:1100px = max-width:1265px with 82.33px side margins). */ 3072body.page-template-ati-actualites-template #qodef-page-footer .qodef-content-grid { 3073 width: auto !important; 3074 max-width: 1265px !important; 3075 margin: 0 82.33px !important; 3076 padding: 20px 0 !important; 3077 background: transparent !important; 3078} 3079 3080/* Restore grid-inner inside footer â theme sets margin: 0 -15px for column gutters */ 3081body.page-template-ati-actualites-template #qodef-page-footer .qodef-grid-inner { 3082 width: auto !important; 3083 max-width: none !important; 3084 margin: 0 -15px !important; 3085 padding: 0 !important; 3086} 3087 3088/* Page wrapper */ 3089.ati-actu-page { 3090 background: #fff; 3091 color: #000; 3092 font-family: inherit; 3093 min-height: 100vh; 3094 width: 100%; 3095} 3096 3097/* ââ Page Header â full bleed dark band âââââââââââââââ */ 3098.ati-actu-header { 3099 padding: 140px 0 60px; 3100 background: #000 url('https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/07/person-is-holding-red-megaphone-is-standing-front-trees.jpg-1.jpeg') center/cover; 3101 border-bottom: 3px solid #fdec01; 3102 width: 100%; 3103} 3104 3105.ati-actu-header-inner { 3106 max-width: 1265px; 3107 margin: 0 auto; 3108 padding: 0 40px; 3109 display: flex;
3110 align-items: flex-end; 3111 justify-content: space-between; 3112 gap: 40px; 3113} 3114 3115.ati-actu-eyebrow { 3116 font-size: 11px; 3117 font-weight: 700; 3118 letter-spacing: 3px; 3119 text-transform: uppercase; 3120 color: #fdec01; 3121 margin-bottom: 14px; 3122} 3123 3124.ati-actu-title { 3125 font-size: clamp(42px, 5vw, 72px); 3126 font-weight: 700; 3127 text-transform: uppercase; 3128 line-height: 1; 3129 letter-spacing: -1px; 3130 color: #fff; 3131 margin: 0; 3132} 3133 3134/* Moved (Session 30) from inside .ati-actu-header-inner (black band) to 3135 between the ticker and the hero card (white page background) - restyled 3136 from white-on-black-with-shadow to centered dark text, no shadow needed. */ 3137.ati-actu-subtitle { 3138 color: rgba(0,0,0,0.6); 3139 font-size: 15px; 3140 line-height: 1.7; 3141 max-width: 640px; 3142 margin: 36px auto; 3143 padding: 0 40px; 3144 text-align: center; 3145} 3146 3147/* ââ Ticker strip ââââââââââââââââââââââââââââââââââ */ 3148.ati-actu-ticker { 3149 background: #fdec01; 3150 padding: 10px 0; 3151 overflow: hidden; 3152 white-space: nowrap; 3153 width: 100%; 3154} 3155 3156.ati-actu-ticker-track { 3157 display: inline-block; 3158 animation: atiTickerScroll 30s linear infinite; 3159} 3160 3161.ati-actu-ticker-track span { 3162 font-size: 11px; 3163 font-weight: 700; 3164 text-transform: uppercase; 3165 letter-spacing: 3px; 3166 color: #000; 3167 padding: 0 40px; 3168} 3169 3170.ati-actu-ticker-track span::before { 3171 content: 'â'; 3172 margin-right: 40px; 3173 color: #e1312d; 3174} 3175 3176@keyframes atiTickerScroll { 3177 from { transform: translateX(0); } 3178 to { transform: translateX(-50%); } 3179} 3180 3181/* ââ Hero card âââââââââââââââââââââââââââââââââââââ */ 3182.ati-actu-hero { 3183 max-width: 1265px; 3184 margin: 0 auto; 3185 padding: 60px 40px 0; 3186} 3187 3188.ati-actu-hero-card { 3189 position: relative; 3190 display: grid; 3191 grid-template-columns: 1fr 1fr; 3192 min-height: 480px; 3193 overflow: hidden; 3194 text-decoration: none; 3195 color: inherit; 3196 background: #fff; 3197 border: 1px solid rgba(0,0,0,0.08); 3198 transition: border-color 0.3s; 3199} 3200 3201.ati-actu-hero-card:hover { 3202 border-color: #fdec01; 3203} 3204 3205.ati-actu-hero-image { 3206 position: relative; 3207 overflow: hidden; 3208} 3209 3210.ati-actu-hero-image img { 3211 width: 100%; 3212 height: 100%; 3213 object-fit: cover; 3214 display: block; 3215 transition: transform 0.6s ease; 3216} 3217 3218.ati-actu-hero-card:hover .ati-actu-hero-image img { 3219 transform: scale(1.04); 3220} 3221 3222.ati-actu-hero-placeholder { 3223 width: 100%; 3224 height: 100%; 3225 background: linear-gradient(135deg, #111 0%, #1a1a1a 50%, #111 100%); 3226 display: flex;
3227 align-items: center; 3228 justify-content: center; 3229} 3230 3231.ati-actu-hero-placeholder::after { 3232 content: 'ATI'; 3233 font-size: 80px; 3234 font-weight: 700; 3235 color: rgba(253,236,1,0.08); 3236 letter-spacing: 10px; 3237} 3238 3239.ati-actu-hero-content { 3240 padding: 50px 50px 50px 60px; 3241 display: flex; 3242 flex-direction: column; 3243 justify-content: flex-end; 3244 background: #fff; 3245} 3246 3247.ati-actu-hero-badge { 3248 display: inline-flex; 3249 align-items: center; 3250 gap: 8px; 3251 margin-bottom: 24px; 3252} 3253 3254.ati-actu-badge-new { 3255 background: #e1312d; 3256 color: #fff; 3257 font-size: 9px; 3258 font-weight: 700; 3259 letter-spacing: 2px; 3260 text-transform: uppercase; 3261 padding: 4px 10px; 3262} 3263 3264.ati-actu-badge-cat { 3265 color: rgba(0,0,0,0.4); 3266 font-size: 11px; 3267 font-weight: 600; 3268 letter-spacing: 2px; 3269 text-transform: uppercase; 3270} 3271 3272.ati-actu-hero-heading { 3273 font-size: clamp(22px, 2.5vw, 34px); 3274 font-weight: 700; 3275 line-height: 1.25; 3276 text-transform: uppercase; 3277 color: #0a0a0a; 3278 margin: 0 0 20px; 3279} 3280 3281.ati-actu-hero-excerpt { 3282 color: rgba(0,0,0,0.5); 3283 font-size: 15px; 3284 line-height: 1.7; 3285 margin: 0 0 36px; 3286} 3287.ati-actu-hero-excerpt:empty { 3288 display: none; 3289 margin: 0; 3290} 3291 3292.ati-actu-hero-meta { 3293 display: flex;
3294 align-items: center; 3295 justify-content: space-between; 3296 border-top: 1px solid rgba(0,0,0,0.1); 3297 padding-top: 20px; 3298} 3299 3300.ati-actu-date { 3301 font-size: 11px; 3302 font-weight: 600; 3303 letter-spacing: 2px; 3304 text-transform: uppercase; 3305 color: rgba(0,0,0,0.4); 3306} 3307 3308.ati-actu-read-more { 3309 display: inline-flex; 3310 align-items: center; 3311 gap: 10px; 3312 font-size: 11px; 3313 font-weight: 700; 3314 letter-spacing: 2px; 3315 text-transform: uppercase; 3316 color: #0a0a0a; 3317 text-decoration: none; 3318 transition: gap 0.25s; 3319} 3320 3321.ati-actu-read-more::after { 3322 content: 'â'; 3323 transition: transform 0.25s; 3324} 3325 3326.ati-actu-hero-card:hover .ati-actu-read-more::after { 3327 transform: translateX(4px); 3328} 3329 3330/* ââ Section label âââââââââââââââââââââââââââââââââ */ 3331.ati-actu-section-label { 3332 max-width: 1265px; 3333 margin: 70px auto 0; 3334 padding: 0 40px 24px; 3335 border-bottom: 1px solid rgba(0,0,0,0.1); 3336 display: flex;
3337 align-items: center; 3338 gap: 16px; 3339} 3340 3341.ati-actu-section-label::before { 3342 content: ''; 3343 display: block; 3344 width: 30px; 3345 height: 2px; 3346 background: #fdec01; 3347} 3348 3349.ati-actu-section-label span { 3350 font-size: 11px; 3351 font-weight: 700; 3352 letter-spacing: 3px; 3353 text-transform: uppercase; 3354 color: rgba(0,0,0,0.35); 3355} 3356 3357/* ââ Grid ââââââââââââââââââââââââââââââââââââââââââ */ 3358.ati-actu-grid { 3359 max-width: 1265px; 3360 margin: 0 auto; 3361 padding: 40px 40px 80px; 3362 display: grid; 3363 grid-template-columns: repeat(3, 1fr); 3364 gap: 16px; 3365} 3366 3367/* ââ Card ââââââââââââââââââââââââââââââââââââââââââ */ 3368.ati-actu-card { 3369 display: flex; 3370 flex-direction: column; 3371 background: #fff; 3372 text-decoration: none; 3373 color: inherit; 3374 position: relative; 3375 overflow: hidden; 3376 border: 1px solid rgba(0,0,0,0.08); 3377 transition: border-color 0.25s; 3378} 3379 3380.ati-actu-card:hover { 3381 border-color: #fdec01; 3382} 3383 3384.ati-actu-card-image { 3385 position: relative; 3386 overflow: hidden; 3387 aspect-ratio: 16/9; 3388 background: #111; 3389} 3390 3391.ati-actu-card-image img { 3392 width: 100%; 3393 height: 100%; 3394 object-fit: cover; 3395 display: block; 3396 transition: transform 0.5s ease; 3397} 3398 3399.ati-actu-card:hover .ati-actu-card-image img { 3400 transform: scale(1.06); 3401} 3402 3403.ati-actu-card-placeholder { 3404 width: 100%; 3405 height: 100%; 3406 background: #111; 3407 display: flex;
3408 align-items: center; 3409 justify-content: center; 3410} 3411 3412.ati-actu-card-placeholder::after { 3413 content: 'ATI'; 3414 font-size: 36px; 3415 font-weight: 700; 3416 color: rgba(253,236,1,0.05); 3417 letter-spacing: 6px; 3418} 3419 3420/* Sibling of .ati-actu-card-image (not a child of it), so its negative 3421 top margin pulls it up to straddle the image/card seam WITHOUT needing 3422 the image container's overflow to be visible - that container must stay 3423 overflow:hidden to clip the hover-zoom transform on the <img>. */ 3424.ati-actu-card-cat { 3425 display: inline-block; 3426 position: relative; 3427 z-index: 2; 3428 background: #fdec01; 3429 font-size: 9px; 3430 font-weight: 700; 3431 letter-spacing: 2px; 3432 text-transform: uppercase; 3433 color: #0a0a0a; 3434 padding: 5px 10px; 3435 margin: -14px 0 14px 20px; 3436} 3437 3438.ati-actu-card-body { 3439 padding: 0 28px 28px; 3440 flex: 1; 3441 display: flex; 3442 flex-direction: column; 3443} 3444 3445.ati-actu-card-title { 3446 font-size: 16px; 3447 font-weight: 700; 3448 text-transform: uppercase; 3449 line-height: 1.35; 3450 color: #0a0a0a; 3451 margin: 0 0 14px; 3452 flex: 1; 3453} 3454 3455.ati-actu-card-excerpt { 3456 font-size: 13px; 3457 line-height: 1.65; 3458 color: rgba(0,0,0,0.5); 3459 margin: 0 0 24px; 3460 display: -webkit-box; 3461 -webkit-line-clamp: 3; 3462 -webkit-box-orient: vertical; 3463 overflow: hidden; 3464} 3465.ati-actu-card-excerpt:empty { 3466 display: none; 3467 margin: 0; 3468} 3469 3470.ati-actu-card-footer { 3471 display: flex;
3472 align-items: center; 3473 justify-content: space-between; 3474 padding-top: 16px; 3475 border-top: 1px solid rgba(0,0,0,0.1); 3476} 3477 3478/* ââ No posts ââââââââââââââââââââââââââââââââââââââ */ 3479.ati-actu-empty { 3480 max-width: 1265px; 3481 margin: 80px auto; 3482 padding: 0 40px; 3483 text-align: center; 3484} 3485 3486.ati-actu-empty h3 { 3487 font-size: 24px; 3488 font-weight: 700; 3489 text-transform: uppercase; 3490 color: rgba(0,0,0,0.2); 3491 margin-bottom: 12px; 3492} 3493 3494.ati-actu-empty p { 3495 color: rgba(0,0,0,0.3); 3496 font-size: 15px; 3497} 3498 3499/* ââ Pagination ââââââââââââââââââââââââââââââââââââ */ 3500.ati-actu-pagination { 3501 max-width: 1265px; 3502 margin: 0 auto 80px; 3503 padding: 0 40px; 3504 display: flex; 3505 align-items: center; 3506 justify-content: center; 3507 gap: 4px; 3508} 3509 3510.ati-actu-pagination .page-numbers { 3511 display: inline-flex; 3512 align-items: center; 3513 justify-content: center; 3514 width: 44px; 3515 height: 44px; 3516 font-size: 12px; 3517 font-weight: 700; 3518 letter-spacing: 1px; 3519 color: rgba(0,0,0,0.4); 3520 border: 1px solid rgba(0,0,0,0.15); 3521 text-decoration: none; 3522 transition: all 0.2s; 3523} 3524 3525.ati-actu-pagination .page-numbers:hover, 3526.ati-actu-pagination .page-numbers.current { 3527 background: #000; 3528 border-color: #000; 3529 color: #fdec01; 3530} 3531 3532.ati-actu-pagination .page-numbers.dots { 3533 border: none; 3534 color: rgba(0,0,0,0.2); 3535} 3536 3537/* ââ Responsive ââââââââââââââââââââââââââââââââââââ */ 3538@media (max-width: 1024px) { 3539 .ati-actu-hero-card { 3540 grid-template-columns: 1fr; 3541 } 3542 .ati-actu-hero-image { 3543 height: 280px; 3544 } 3545 .ati-actu-grid { 3546 grid-template-columns: repeat(2, 1fr); 3547 } 3548 .ati-actu-header-inner { 3549 flex-direction: column; 3550 align-items: flex-start; 3551 } 3552} 3553 3554@media (max-width: 768px) { 3555 .ati-actu-header { 3556 padding: 120px 0 40px; 3557 } 3558 .ati-actu-header-inner, 3559 .ati-actu-hero, 3560 .ati-actu-section-label, 3561 .ati-actu-grid { 3562 padding-left: 20px; 3563 padding-right: 20px; 3564 } 3565 .ati-actu-hero-content { 3566 padding: 30px 24px; 3567 } 3568 .ati-actu-grid { 3569 grid-template-columns: 1fr; 3570 } 3571 .ati-actu-subtitle { 3572 padding: 0 20px; 3573 } 3574} 3575</style> 3576 3577<div class="ati-actu-page"> 3578 3579 <!-- ââ Page Header âââââââââââââââââââââââââââââââ --> 3580 <div class="ati-actu-header"> 3581 <div class="ati-actu-header-inner"> 3582 <div> 3583 <h1 class="ati-actu-title">Actualités</h1> 3584 </div> 3585 </div> 3586 </div> 3587 3588 <!-- ââ Ticker ââââââââââââââââââââââââââââââââââââ --> 3589 <div class="ati-actu-ticker"> 3590 <div class="ati-actu-ticker-track"> 3591 <span>Actualités ATI Export</span> 3592 <span>Nouveaux Partenariats</span> 3593 <span>Offres & Promotions</span> 3594 <span>Nouveaux Produits</span> 3595 <span>Secteurs</span> 3596 <span>Nouvelles Solutions</span> 3597 <span>Actualités ATI Export</span> 3598 <span>Nouveaux Partenariats</span> 3599 <span>Offres & Promotions</span> 3600 <span>Nouveaux Produits</span> 3601 <span>Secteurs</span> 3602 <span>Nouvelles Solutions</span> 3603 </div> 3604 </div> 3605 3606 <!-- ââ Subtitle (moved here from the header band, Session 30) â --> 3607 <p class="ati-actu-subtitle"> 3608 Suivez les dernières nouvelles d'ATI Export : promotions, offres spéciales et actualités de nos marchés. 3609 </p> 3610 3611 3612 <!-- ââ Hero Card âââââââââââââââââââââââââââââ --> 3613 <div class="ati-actu-hero">
3614 <a href="https://goldenrod-pigeon-420491.hostingersite.com/nouveau-partenaire/" class="ati-actu-hero-card"> 3615 <div class="ati-actu-hero-image"> 3616 <img src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/06/collaboration-suppliers-manufacturers-ensure-smooth-operations-communication-1024x1024.jpg" alt="Nouveau Partenaire"> 3617 </div> 3618 <div class="ati-actu-hero-content"> 3619 <div class="ati-actu-hero-badge"> 3620 <span class="ati-actu-badge-new">à la une</span> 3621 <span class="ati-actu-badge-cat">Partenaires</span> 3622 </div> 3623 <h2 class="ati-actu-hero-heading">Nouveau Partenaire</h2> 3624 <p class="ati-actu-hero-excerpt"></p> 3625 <div class="ati-actu-hero-meta"> 3626 <span class="ati-actu-date"> 3627 09 Juil 2026 </span> 3628 <span class="ati-actu-read-more">Lire la suite</span> 3629 </div> 3630 </div> 3631 </a> 3632 </div> 3633 3634 <!-- ââ Grid ââââââââââââââââââââââââââââââââââ --> 3635 <div class="ati-actu-section-label"> 3636 <span>Toutes les actualités</span> 3637 </div> 3638 3639 <div class="ati-actu-grid"> 3640 <a href="https://goldenrod-pigeon-420491.hostingersite.com/nouveau-produit/" class="ati-actu-card"> 3641 <div class="ati-actu-card-image"> 3642 <img src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/07/retail-warehouse-full-shelves-with-goods-cartonslogistics-transportation-blurred-background-768x768.jpg" alt="Nouveau produit"> 3643 </div> 3644 <span class="ati-actu-card-cat">Produits</span> 3645 <div class="ati-actu-card-body"> 3646 <h3 class="ati-actu-card-title">Nouveau produit</h3> 3647 <p class="ati-actu-card-excerpt"></p> 3648 <div class="ati-actu-card-footer"> 3649 <span class="ati-actu-date">09 Juil 2026</span> 3650 <span class="ati-actu-read-more">Lire â</span> 3651 </div> 3652 </div> 3653 </a> 3654 <a href="https://goldenrod-pigeon-420491.hostingersite.com/news-try-2/" class="ati-actu-card"> 3655 <div class="ati-actu-card-image"> 3656 <img src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/06/vast-warehouse-interior-with-high-shelves-stocked-with-cardboard-boxes-pallets-768x768.jpg" alt="Offre"> 3657 </div> 3658 <span class="ati-actu-card-cat">Offres et Promotions</span> 3659 <div class="ati-actu-card-body"> 3660 <h3 class="ati-actu-card-title">Offre</h3> 3661 <p class="ati-actu-card-excerpt"></p> 3662 <div class="ati-actu-card-footer"> 3663 <span class="ati-actu-date">09 Juil 2026</span> 3664 <span class="ati-actu-read-more">Lire â</span> 3665 </div> 3666 </div> 3667 </a> 3668 <a href="https://goldenrod-pigeon-420491.hostingersite.com/news-try/" class="ati-actu-card"> 3669 <div class="ati-actu-card-image"> 3670 <img src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/06/biopharmaceutical-production-manufacturing-process-biopharmaceuticals-biotechnology-768x329.jpg" alt="Nouvelles"> 3671 </div> 3672 <span class="ati-actu-card-cat">Actualités</span> 3673 <div class="ati-actu-card-body"> 3674 <h3 class="ati-actu-card-title">Nouvelles</h3> 3675 <p class="ati-actu-card-excerpt"></p> 3676 <div class="ati-actu-card-footer">
3677 <span class="ati-actu-date">09 Juil 2026</span> 3678 <span class="ati-actu-read-more">Lire â</span> 3679 </div> 3680 </div> 3681 </a> 3682 </div> 3683 3684 <!-- ââ Pagination ââââââââââââââââââââââââââââ --> 3685 3686 3687</div><!-- .ati-actu-page --> 3688 3689 </div><!-- close #qodef-page-inner div from header.php --> 3690 </div><!-- close #qodef-page-outer div from header.php --> 3691 <footer id="qodef-page-footer"> 3692 <div id="qodef-page-footer-top-area"> 3693 <div id="qodef-page-footer-top-area-inner" class="qodef-content-grid"> 3694 <div class="qodef-grid qodef-layout--columns qodef-responsive--custom qodef-col-num--4 qodef-col-num--1024--2 qodef-col-num--768--2 qodef-col-num--680--1 qodef-col-num--480--1"> 3695 <div class="qodef-grid-inner clear"> 3696 <div class="qodef-grid-item"> 3697 <div id="media_image-2" class="widget widget_media_image" data-area="footer_top_area_column_1"><a href="https://stal.qodeinteractive.com/wp-content/uploads/2020/01/logo-footer.jpg"><img width="947" height="944" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export.webp" class="image wp-image-5467 attachment-full size-full" alt="" style="max-width: 100%; height: auto;" decoding="async" srcset="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export.webp 947w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-300x300.webp 300w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-150x150.webp 150w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-768x766.webp 768w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-82x82.webp 82w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-600x598.webp 600w, https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/05/Nouveau-logo-ATI-Export-100x100.webp 100w" sizes="(max-width: 947px) 100v
3697w, 947px" /></a></div><div id="stal_core_separator-2" class="widget widget_stal_core_separator" data-area="footer_top_area_column_1"><div class="qodef-shortcode qodef-m qodef-separator clear"> 3698 <div class="qodef-m-line" style="border-color: #c9c9c9;margin-top: 10px"></div> 3699</div></div><div id="text-10" class="widget widget_text" data-area="footer_top_area_column_1"> <div class="textwidget"><p>Bienvenue chez ATI Export, votre partenaire de confiance pour accompagner votre développement à lâinternational.</p> 3700</div> 3701 </div> </div> 3702 <div class="qodef-grid-item"> 3703 <div id="block-2" class="widget widget_block" data-area="footer_top_area_column_2"><h3 style="color: #fdec01; margin-bottom: 15px; font-size: 14px; letter-spacing: 2px;">NOS SECTEURS</h3> 3704<ul style="list-style: none; padding: 0; margin: 0;"> 3705 <li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/agroalimentaire/" style="color: #ffffff; text-decoration: none;">Agroalimentaire</a></li> 3706 <li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/btp/" style="color: #ffffff; text-decoration: none;">BTP</a></li> 3707 <li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/minier/" style="color: #ffffff; text-decoration: none;">Minier</a></li> 3708 <li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/petrolier/" style="color: #ffffff; text-decoration: none;">Pétrolier</a></li> 3709<li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/energie/" style="color: #ffffff; text-decoration: none;">Ãnergie</a></li> 3710<li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/automobile/" style="color: #ffffff; text-decoration: none;">Automobile</a></li> 3711<li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/aeronautique/" style="color: #ffffff; text-decoration: none;">Aéronautique</a></li> 3712<li style="margin-bottom: 8px; padding-left: 10px;"><a href="https://goldenrod-pigeon-420491.hostingersite.com/ferroviaire/" style="color: #ffffff; text-decoration: none;">Ferroviaire</a></li> 3713 3714 3715</ul></div> </div> 3716 <div class="qodef-grid-item"> 3717 <div id="nav_menu-2" class="widget widget_nav_menu" data-area="footer_top_area_column_3"><h5 class="qodef-widget-title">Menu</h5><div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"><li id="menu-item-10361" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-10361"><a href="https://goldenrod-pigeon-420491.hostingersite.com/">Accueil</a></li> 3718<li id="menu-item-5525" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5525"><a href="https://goldenrod-pigeon-420491.hostingersite.com/qui-sommes-nous/">Qui Sommes Nous</a></li> 3719<li id="menu-item-8176" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8176"><a href="https://goldenrod-pigeon-420491.hostingersite.com/nos-services/">Nos Services</a></li> 3720<li id="menu-item-10142" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10142"><a href="https://goldenrod-pigeon-420491.hostingersite.com/recrutement/">Recrutement</a></li> 3721<li id="menu-item-10143" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-10087 current_page_item menu-item-10143"><a href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/" aria-current="page">Actualités</a></li> 3722<li id="menu-item-5526" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5526"><a href="https://goldenrod-pigeon-420491.hostingersite.com/contact-us/">Demande de Devis</a></li> 3723</ul></div></div> </div> 3724 <div class="qodef-grid-item"> 3725 <div id="custom_html-2" class="widget_text widget widget_custom_html" data-area="footer_top_area_column_4"><h5 class="qodef-widget-title">Contact</h5><div class="textwidget custom-html-widget"><!-- 3726 [FOOTER-CONTACT-WIDGET] Session 36 3727 ============================================================================ 3728 PASTE TARGET: wp-admin -> Appearance -> Widgets -> "Footer Top Area Column 4" 3729 -> the Custom HTML widget titled "Contact" (id: custom_html-2) 3730 Paste this as the widget's CONTENT (the title field stays "Contact"). 3731 3732 WHY THIS FILE EXISTS 3733 This widget is a *Custom HTML* block holding the pasted, already-rendered
3734 output of three Stal "icon list item" widgets. That is why the WordPress 3735 interface shows no Link field to edit - the hrefs are hardcoded in this raw 3736 markup, not stored as widget settings. 3737 3738 WHAT WAS WRONG (all three links were Stal theme DEMO leftovers - the visible 3739 text had been updated to ATI's real details, the hrefs never were): 3740 1. Address -> https://www.google.com/maps/place/Uniqlo+Soho/@40.719... 3741 (a Uniqlo store in SoHo, New York) 3742 2. Phone -> tel:123124567 (fake placeholder number) 3743 3. Email -> mailto:[email protected] (the theme vendor's address) 3744 3745 DO NOT CHANGE the three wrapper ids (stal_core_icon_list_item-2/3/4). 3746 Additional-CSS.css [FOOTER-CONTACT] targets them by id to force the white 3747 text/link colour. Renaming or removing them silently breaks that rule. 3748 3749 ALSO NOTE: `N°71` is written as an HTML entity on purpose. The live page 3750 currently serves that character as an invalid byte (renders as a replacement 3751 glyph in raw fetches), so the entity sidesteps any editor encoding issue. 3752 3753 UPDATE (same session): the address link was swapped again, from a generic 3754 Maps search-query URL to the user's own copied link to the real "ATI Export" 3755 place pin (https://www.google.com/maps/place/ATI+Export/@46.40...). Prefer 3756 this over regenerating a search URL if it ever needs replacing again - it's 3757 the actual verified business listing, not a derived query. 3758 3759 STILL OUTSTANDING (separate widget, not fixed by this file): 3760 The side-area Custom HTML widget (id: custom_html-3, area "Side Area") holds 3761 TWO more copies of the same Uniqlo maps link, both using a "+" icon 3762 (ion-ios-add) instead of a map pin, and both duplicated. See session-log.md. 3763 ============================================================================ 3764--> 3765<div id="stal_core_icon_list_item-2" class="widget widget_stal_core_icon_list_item" data-area="footer_top_area_column_3"><div class="qodef-icon-list-item qodef-icon--icon-pack qodef-alignment--top" style="margin-bottom: 23px"> 3766 <p class="qodef-e-title" style="color: #ffffff;line-height: 1.625em"> 3767 <a itemprop="url" href="https://www.google.com/maps/place/ATI+Export/@46.4069922,4.8188175,13.25z/data=!4m10!1m2!2m1!1s+N%C2%B071+RN6,+F-71260+La+Salle!3m6!1s0x47f3133de650df2b:0x3b04a0e9c352e5e4!8m2!3d46.4045938!4d4.8749021!15sChtOwrA3MSBSTjYsIEYtNzEyNjAgTGEgU2FsbGWSARVpbXBvcnRfZXhwb3J0X2NvbXBhbnngAQA!16s%2Fg%2F11bxb9s8cc?entry=ttu&g_ep=EgoyMDI2MDcyMi4wIKXMDSoASAFQAw%3D%3D" target="_blank"> 3768 <span class="qodef-e-title-inner"> 3769 <span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--normal" style="top: 5px;"> <span class="qodef-icon-ionicons ion-ios-pin qodef-icon qodef-e" style="color: #fdec01;font-size: 25px;"></span> </span> <span class="qodef-e-title-text">N°71 RN6, F-71260 La Salle<br/></span> 3770 </span> 3771 </a> 3772 </p> 3773</div></div> 3774<div id="stal_core_icon_list_item-3" class="widget widget_stal_core_icon_list_item" data-area="footer_top_area_column_3"><div class="qodef-icon-list-item qodef-icon--icon-pack" style="margin-bottom: 23px"> 3775 <p class="qodef-e-title" style="color: #ffffff"> 3776 <a itemprop="url" href="tel:+33385389161" target="_self"> 3777 <span class="qodef-e-title-inner"> 3778 <span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--normal"> <span class="qodef-icon-ionicons ion-ios-call qodef-icon qodef-e" style="color: #fdec01;font-size: 25px"></span> </span> <span class="qodef-e-title-text">+33 (0)3 85 38 91 61 </span> 3779 </span> 3780 </a> 3781 </p> 3782</div></div> 3783<div id="stal_core_icon_list_item-4" class="widget widget_stal_core_icon_list_item" data-area="footer_top_area_column_3"><div class="qodef-icon-list-item qodef-icon--icon-pack" style="margin-bottom: 22px"> 3784 <p class="qodef-e-title" style="color: #ffffff"> 3785 <a itemprop="url" href="mailto:[email protected]" target="_self"> 3786 <span class="qodef-e-title-inner"> 3787 <span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--normal">
3787 <span class="qodef-icon-ionicons ion-ios-chatboxes qodef-icon qodef-e" style="color: #fdec01;font-size: 25px"></span> </span> <span class="qodef-e-title-text"> [email protected]</span> 3788 </span> 3789 </a> 3790 </p> 3791</div></div> 3792</div></div> </div> 3793 </div> 3794 </div> 3795 </div> 3796 </div> 3797 <div id="qodef-page-footer-bottom-area"> 3798 <div id="qodef-page-footer-bottom-area-inner" class="qodef-content-grid"> 3799 <div class="qodef-grid qodef-layout--columns qodef-responsive--custom qodef-col-num--2 qodef-col-num--768--1 qodef-col-num--680--1 qodef-col-num--480--1"> 3800 <div class="qodef-grid-inner clear"> 3801 <div class="qodef-grid-item"> 3802 <div id="text-12" class="widget widget_text" data-area="footer_bottom_area_column_1"> <div class="textwidget"><p>© 2026 ATI Export, Tous Droits Réservés. <a href="https://goldenrod-pigeon-420491.hostingersite.com/mentions-legales/">Mentions Légales</a></p> 3803</div> 3804 </div> </div> 3805 <div class="qodef-grid-item"> 3806 <div id="stal_core_icon-11" class="widget widget_stal_core_icon" data-area="footer_bottom_area_column_2"><span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" data-hover-color="#fdec01" data-hover-background-color="#000000" data-hover-border-color="#ffffff" style="margin: 0 10px 0px 0;width: 40px;height: 40px;line-height: 40px;background-color: #fdec01;border-color: #ee0d08"> 3807 <a itemprop="url" href="https://wa.me/33787075726" target="_blank"> 3808 <span class="qodef-icon-ionicons ion-logo-whatsapp qodef-icon qodef-e" style="color: #000000;font-size: 20px" ></span> </a> 3809 </span></div><div id="stal_core_icon-3" class="widget widget_stal_core_icon" data-area="footer_bottom_area_column_2"><span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" data-hover-color="#fdec01" data-hover-background-color="#000000" data-hover-border-color="#ffffff" style="margin: 0 10px 0px 0;width: 40px;height: 40px;line-height: 40px;background-color: #fdec01;border-color: #ee0d08"> 3810 <a itemprop="url" href="https://web.facebook.com/profile.php?id=100036868286863#" target="_blank"> 3811 <span class="qodef-icon-ionicons ion-logo-facebook qodef-icon qodef-e" style="color: #000000;font-size: 20px" ></span> </a> 3812 </span></div><div id="stal_core_icon-4" class="widget widget_stal_core_icon" data-area="footer_bottom_area_column_2"><span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" data-hover-color="#fdec01" data-hover-background-color="#000000" data-hover-border-color="#ffffff" style="margin: 0 0px 0px 0;width: 40px;height: 40px;line-height: 40px;background-color: #fdec01;border-color: #ee0d08"> 3813 <a itemprop="url" href="https://www.linkedin.com/company/ati-export/" target="_blank"> 3814 <span class="qodef-icon-ionicons ion-logo-linkedin qodef-icon qodef-e" style="color: #000000;font-size: 20px" ></span> </a> 3815 </span></div> </div> 3816 </div> 3817 </div> 3818 </div> 3819 </div> 3820</footer><a id="qodef-back-to-top" href="#"> 3821 <span class="qodef-back-to-top-icon"> 3822 <span class="qodef-icon-elegant-icons arrow_carrot-up" ></span> </span> 3823</a> <div id="qodef-side-area" > 3824 <a id="qodef-side-area-close" class="qodef-side-area-close--predefined" href="javascript:void(0)"> 3825 <span class="qodef-lines"><span class="qodef-line qodef-line-1"></span><span class="qodef-line qodef-line-2"></span><span class="qodef-line qodef-line-3"></span><span class="qodef-line qodef-line-4"></span><span class="qodef-line qodef-line-5"></span></span> </a> 3826 <div id="qodef-side-area-inner"> 3827 <div id="text-15" class="widget widget_text" data-area="side-area"><h3 class="qodef-widget-title">Notre localisation</h3> <div class="textwidget"><p><span class="qodef-e-title-text">N°71 RN6, F-71260 La Salle</span></p> 3828</div> 3829 </div><div id="media_image-3" class="widget widget_media_image" data-area="side-area"><a href="https://stal.qodeinteractive.com/"><img class="image " src="https://stal.qodeinteractive.com/wp-content/uploads/2020/02/side-area-img-1.png" alt="m" width="401" height="139" decoding="async" /></a></div><div id="stal_core_separator-14" class="widget widget_stal_core_separator" data-area="side-area"><div class="qodef-shortcode qodef-m qodef-separator clear"> 3830 <div class="qodef-m-line" style="border-color: rgba(255,255,255,0);border-style: solid;margin-top: 20px"></div> 3831</div></div><div id="custom_html-3" class="widget_text widget widget_custom_html" data-area="side-area"><div class="textwidget custom-html-widget"><div class="qodef-e-content qodef-grid qodef-layout--template "> 3832 <div class="qodef-grid-inner clear"> 3833 <div class="qodef-grid-item qodef-col--6"><div class="qodef-icon-list-item qodef-icon--icon-pack qodef-alignment--top" style="margin-bottom: 22px;"> 3834 <p class="qodef-e-title" style="line-height: 1.625em"> 3835 <a itemprop="url" href="https://www.google.com/maps/place/Uniqlo+Soho/@40.7190772,-74.001693,16z/data=!4m13!1m7!3m6!1s0x89c24fa5d33f083b:0xc80b8f06e177fe62!2sNew+York,+NY,+USA!3b1!8m2!3d40.7127753!4d-74.0059728!3m4!1s0x89c2598edb6242d3:0x4ae291a9ff31e800!8m2!3d40.7234983!4d-73.9982012" target="_blank"> 3836 <span class="qodef-e-title-inner"> 3837 <span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" style="width: 26px;
3837height: 26px;line-height: 26px; top: 5px;"> <span class="qodef-icon-ionicons ion-ios-add qodef-icon qodef-e" style=""></span> </span> <span class="qodef-e-title-text">N°71 RN6, F-71260 La Salle</span> 3838 </span> 3839 </a> 3840 </p> 3841</div> 3842 <div class="qodef-icon-list-item qodef-icon--icon-pack qodef-alignment--top"> 3843 <p class="qodef-e-title" style="line-height: 1.625em"> 3844 <a itemprop="url" href="https://www.google.com/maps/place/Uniqlo+Soho/@40.7190772,-74.001693,16z/data=!4m13!1m7!3m6!1s0x89c24fa5d33f083b:0xc80b8f06e177fe62!2sNew+York,+NY,+USA!3b1!8m2!3d40.7127753!4d-74.0059728!3m4!1s0x89c2598edb6242d3:0x4ae291a9ff31e800!8m2!3d40.7234983!4d-73.9982012" target="_blank"> 3845 <span class="qodef-e-title-inner"> 3846 <span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" style="width: 26px;height: 26px;line-height: 26px; top: 5px;"> <span class="qodef-icon-ionicons ion-ios-add qodef-icon qodef-e" style=""></span> </span> <span class="qodef-e-title-text">N°71 RN6, F-71260 La Salle</span> 3847 </span> 3848 </a> 3849 </p> 3850</div> 3851 </div> 3852 <div class="qodef-grid-item qodef-col--6 "> 3853 3854 3855 3856 </div> 3857 </div> 3858 </div> 3859</div></div> </div> 3860 <div class="qodef-side-area-bottom"> 3861 <div id="stal_core_icon-9" class="widget widget_stal_core_icon" data-area="side-area-bottom"><span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" data-hover-background-color="#eab700" data-hover-border-color="#ffffff" style="margin: 0 10px 20px 0;width: 40px;height: 40px;line-height: 40px;border-color: #eab700"> 3862 <a itemprop="url" href="https://www.facebook.com/QodeInteractive/" target="_blank"> 3863 <span class="qodef-icon-ionicons ion-logo-facebook qodef-icon qodef-e" style="color: #ffffff;font-size: 20px" ></span> </a> 3864 </span></div><div id="stal_core_icon-10" class="widget widget_stal_core_icon" data-area="side-area-bottom"><span class="qodef-shortcode qodef-m qodef-icon-holder qodef-size--default qodef-layout--square" data-hover-background-color="#eab700" data-hover-border-color="#ffffff" style="margin: 0 0px 20px 0;width: 40px;height: 40px;line-height: 40px;border-color: #c60400"> 3865 <a itemprop="url" href="https://www.linkedin.com/company/ati-export/?originalSubdomain=fr" target="_blank"> 3866 <span class="qodef-icon-ionicons ion-logo-linkedin qodef-icon qodef-e" style="color: #ffffff;font-size: 20px" ></span> </a> 3867 </span></div><div id="block-9" class="widget widget_block" data-area="side-area-bottom"> 3868<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"> 3869<p></p> 3870</blockquote> 3871</div> </div> 3872 </div> 3873 </div><!-- close #qodef-page-wrapper div from header.php --> 3874 <template id="tp-language" data-tp-language="fr_FR"></template>
3874<script type="speculationrules"> 3875{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/stal/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 3876</script>
3876 3877<!-- Custom Facebook Feed JS -->
3878<script data-optimized="1" type="text/javascript" src="data:text/javascript;base64,dmFyIGNmZmFqYXh1cmw9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAiO3ZhciBjZmZsaW5raGFzaHRhZ3M9InRydWUi" defer></script>
3878 3879 <div id="ati-popup-overlay"> 3880 <div id="ati-popup"> 3881 <button id="ati-popup-close" aria-label="Fermer">â</button> 3882 3883 <!-- Left: image --> 3884 <div id="ati-popup-image"> 3885 <img src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/uploads/2026/07/ati-logoooossss.png" alt="ATI Export Actualités" /> 3886 </div> 3887 3888 <!-- Right: content --> 3889 <div id="ati-popup-content"> 3890 <div id="ati-popup-eyebrow">Restez informé</div> 3891 <h2 id="ati-popup-title">Actualités<br><span>ATI Export</span></h2> 3892 <p id="ati-popup-desc">Promotions, offres spéciales, nouveaux partenaires â recevez les dernières nouvelles directement dans votre boîte mail.</p> 3893 3894 <form id="ati-popup-form" action="https://goldenrod-pigeon-420491.hostingersite.com/contact-us/" method="get" onsubmit="return atiPopupSubmit(event)"> 3895 <div id="ati-popup-input-row"> 3896 <input type="email" id="ati-popup-email" placeholder="Votre adresse e-mail" required autocomplete="email" /> 3897 <button type="submit" id="ati-popup-submit">S'inscrire â</button> 3898 </div> 3899 3900 </form> 3901 3902 3903 3904 <a href="https://goldenrod-pigeon-420491.hostingersite.com/actualites/" id="ati-popup-actu-btn"> 3905 Voir toutes les actualités â 3906 </a> 3907 </div> 3908 </div> 3909 </div> 3910 3911 <style>#ati-popup-overlay{position:fixed;inset:0;background:rgb(0 0 0 / .75);z-index:99999;display:flex;align-items:center;justify-content:center;padding:20px;box-sizing:border-box;animation:atiPopupFadeIn 0.35s ease}@keyframes atiPopupFadeIn{from{opacity:0}to{opacity:1}}#ati-popup{position:relative;display:flex;width:100%;max-width:520px;min-height:260px;background:#0a0a0a;overflow:hidden;animation:atiPopupSlideUp 0.4s ease}@keyframes atiPopupSlideUp{from{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}#ati-popup-close{position:absolute;top:12px;right:12px;z-index:10;background:rgb(0 0 0 / .5);border:1px solid rgb(255 255 255 / .15);color:#fff;width:28px;height:28px;border-radius:50%;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background 0.2s,border-color 0.2s;line-height:1}#ati-popup-close:hover{background:#fdec01;border-color:#fdec01;color:#000}#ati-popup-image{flex:0 0 42%;position:relative;overflow:hidden}#ati-popup-image img{width:100%;height:100%;object-fit:cover;display:block}#ati-popup-image::after{content:'';position:absolute;inset:0;background:linear-gradient(to right,transparent 60%,#0a0a0a 100%)}#ati-popup-content{flex:1;padding:32px 28px 28px 24px;display:flex;flex-direction:column;justify-content:center}#ati-popup-eyebrow{font-size:9px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;color:#fdec01;margin-bottom:10px}#ati-popup-title{font-size:clamp(19px, 2.6vw, 27px);font-weight:700;text-transform:uppercase;line-height:1.1;color:#fff;margin:0 0 12px;letter-spacing:-.5px}#ati-popup-title span{color:#fdec01}#ati-popup-desc{font-size:12px;line-height:1.6;color:rgb(255 255 255 / .5);margin:0 0 18px}#ati-popup-input-row{display:flex;gap:0;margin-bottom:8px;align-items:stretch}#ati-popup-email{flex:1;background:rgb(255 255 255 / .07)!important;border:1px solid rgb(255 255 255 / .15)!important;border-right:none!important;color:#fff!important;padding:0 14px!important;height:42px!important;font-size:12px!important;outline:none!important;transition:border-color 0.2s!important;box-sizing:border-box!important;border-radius:0!important;font-family:inherit!important;width:auto!important}#ati-popup-email::placeholder{color:rgb(255 255 255 / .3)}#ati-popup-email:focus{border-color:#fdec01!important}#ati-popup-submit{background:#fdec01!important;color:#000!important;border:none!important;padding:0 16px!important;height:42px!important;font-size:10px!important;font-weight:700!important;letter-spacing:1px!important;text-transform:uppercase!important;cursor:pointer!important;white-space:nowrap!important;transition:background 0.2s,color 0.2s!important;font-family:inherit!important;border-radius:0!important;display:inline-flex!important;align-items:center!important}#ati-popup-submit:hover{background:#000!important;color:#fff!important}#ati-popup-privacy{font-size:11px;color:rgb(255 255 255 / .25);margin:0 0 28px}#ati-popup-divider{height:1px;background:rgb(255 255 255 / .08);margin-bottom:24px}#ati-popup-actu-btn{display:inline-flex;align-items:center;gap:8px;font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:rgb(255 255 255 / .5);text-decoration:none;transition:color 0.2s;border:1px solid rgb(255 255 255 / .12);padding:9px 16px;align-self:flex-start}#ati-popup-actu-btn:hover{color:#fdec01;border-color:#fdec01}@media (max-width:640px){#ati-popup{flex-direction:column;max-width:100%;min-height:unset}#ati-popup-image{flex:0 0 200px;height:200px}#ati-popup-image::after{background:linear-gradient(to bottom,transparent 60%,#0a0a0a 100%)}#ati-popup-content{padding:24px 20px 26px}#ati-popup-input-row{flex-direction:column}#ati-popup-email{border-right:1px solid rgb(255 255 255 / .15)!important;border-bottom:none!important;height:42px!important}#ati-popup-submit{height:42px!important;padding:0 16px!important}}</style> 3912 3913
3913<script data-optimized="1" src="data:text/javascript;base64,KGZ1bmN0aW9uKCl7aWYoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYXRpX3BvcHVwX3NlZW4nKSl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0aS1wb3B1cC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheT0nbm9uZSc7cmV0dXJufQpzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdhdGlfcG9wdXBfc2VlbicsJzEnKTt2YXIgb3ZlcmxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRpLXBvcHVwLW92ZXJsYXknKTt2YXIgY2xvc2VCdG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0aS1wb3B1cC1jbG9zZScpO2Z1bmN0aW9uIGNsb3NlUG9wdXAoKXtvdmVybGF5LnN0eWxlLm9wYWNpdHk9JzAnO292ZXJsYXkuc3R5bGUudHJhbnNpdGlvbj0nb3BhY2l0eSAwLjI1cyBlYXNlJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7b3ZlcmxheS5zdHlsZS5kaXNwbGF5PSdub25lJ30sMjUwKX0KY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGNsb3NlUG9wdXApO292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09b3ZlcmxheSljbG9zZVBvcHVwKCk7fSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7aWYoZS5rZXk9PT0nRXNjYXBlJyljbG9zZVBvcHVwKCk7fSl9KSgpO2Z1bmN0aW9uIGF0aVBvcHVwU3VibWl0KGUpe2UucHJldmVudERlZmF1bHQoKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRpLXBvcHVwLWZvcm0nKS5pbm5lckhUTUw9JzxwIHN0eWxlPSJjb2xvcjojZmRlYzAxO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46MDsiPuKckyBNZXJjaSAhIFZvdXMgcmVjZXZyZXogbm9zIGFjdHVhbGl0w6lzIHByb2NoYWluZW1lbnQuPC9wPid9" defer></script>
3913 3914
3914<script data-optimized="1" src="data:text/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGNhdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0Jyk7aWYoIWNhdClyZXR1cm47dmFyIGFsbG93ZWQ9WzEsMTksMjAsMjEsMjIsMjMsMjQsMjUsMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTddO0FycmF5LmZyb20oY2F0Lm9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24ob3B0KXtpZihvcHQudmFsdWU9PT0nLTEnKXJldHVybjtpZihhbGxvd2VkLmluZGV4T2YocGFyc2VJbnQob3B0LnZhbHVlKSk9PT0tMSlvcHQucmVtb3ZlKCk7fSk7aWYod2luZG93LmpRdWVyeSYmalF1ZXJ5KGNhdCkuZGF0YSgnc2VsZWN0MicpKXtqUXVlcnkoY2F0KS50cmlnZ2VyKCdjaGFuZ2UnKX19KSgp" defer></script>
3914 3915 <!-- YouTube Feeds JS -->
3916<script data-optimized="1" type="text/javascript"> 3917 3918</script>
3918 3919<!-- Instagram Feed JS -->
3920<script data-optimized="1" type="text/javascript" src="data:text/javascript;base64,dmFyIHNiaWFqYXh1cmw9Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAi" defer></script>
3920 3921
3921<script data-optimized="1" src="data:text/javascript;base64,Y29uc3QgbGF6eWxvYWRSdW5PYnNlcnZlcj0oKT0+e2NvbnN0IGxhenlsb2FkQmFja2dyb3VuZHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLmUtY29uLmUtcGFyZW50Om5vdCguZS1sYXp5bG9hZGVkKWApO2NvbnN0IGxhenlsb2FkQmFja2dyb3VuZE9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcyk9PntlbnRyaWVzLmZvckVhY2goKGVudHJ5KT0+e2lmKGVudHJ5LmlzSW50ZXJzZWN0aW5nKXtsZXQgbGF6eWxvYWRCYWNrZ3JvdW5kPWVudHJ5LnRhcmdldDtpZihsYXp5bG9hZEJhY2tncm91bmQpe2xhenlsb2FkQmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKCdlLWxhenlsb2FkZWQnKX0KbGF6eWxvYWRCYWNrZ3JvdW5kT2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCl9fSl9LHtyb290TWFyZ2luOicyMDBweCAwcHggMjAwcHggMHB4J30pO2xhenlsb2FkQmFja2dyb3VuZHMuZm9yRWFjaCgobGF6eWxvYWRCYWNrZ3JvdW5kKT0+e2xhenlsb2FkQmFja2dyb3VuZE9ic2VydmVyLm9ic2VydmUobGF6eWxvYWRCYWNrZ3JvdW5kKX0pfTtjb25zdCBldmVudHM9WydET01Db250ZW50TG9hZGVkJywnZWxlbWVudG9yL2xhenlsb2FkL29ic2VydmUnLF07ZXZlbnRzLmZvckVhY2goKGV2ZW50KT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsbGF6eWxvYWRSdW5PYnNlcnZlcil9KQ==" defer></script>
3921 3922
3922<script data-optimized="1" type='text/javascript' src="data:text/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGM9ZG9jdW1lbnQuYm9keS5jbGFzc05hbWU7Yz1jLnJlcGxhY2UoL3dvb2NvbW1lcmNlLW5vLWpzLywnd29vY29tbWVyY2UtanMnKTtkb2N1bWVudC5ib2R5LmNsYXNzTmFtZT1jfSkoKQ==" defer></script>
3922 3923 <link data-optimized="1" rel='stylesheet' id='wc-blocks-style-css' href='https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/css/67f5815f6359bbc77764c9e1690cc881.css?ver=a7827' type='text/css' media='all' />
3924<script data-optimized="1" type="text/javascript" id="cffscripts-js-extra" src="data:text/javascript;base64,dmFyIGNmZkVsZW1lbnRvckRhdGE9eyJmZWVkcyI6W10sImZlZWRfdXJsIjoiaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1hZG1pbi9hZG1pbi5waHA/cGFnZT1jZmYtZmVlZC1idWlsZGVyIiwiaXNfcHJvX2FjdGl2ZSI6IiJ9" defer></script>
vendor: 1 bytes, line 3924
3924
3925<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/051df0f40e41d2f06d37b61c2dfae08b.js?ver=4fde3" id="cffscripts-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3925
3925
3926<script data-optimized="1" type="text/javascript" id="ctf_scripts-js-extra" src="data:text/javascript;base64,dmFyIGN0Zj17ImFqYXhfdXJsIjoiaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocCIsImkxOG4iOnsibmV3VHdlZXRzTG9hZGVkIjoiJXMgbmV3IHR3ZWV0cyBsb2FkZWQiLCJub01vcmVUd2VldHMiOiJDXHUyMDE5ZXN0IHRvdXRcdTAwYTAhIFBsdXMgZGUgdHdlZXRzIFx1MDBlMCBjaGFyZ2VyIn19O3ZhciBjdGZFbGVtZW50b3JEYXRhPXsiZmVlZHMiOltdLCJmZWVkX3VybCI6Imh0dHBzOi8vZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb20vd3AtYWRtaW4vYWRtaW4ucGhwP3BhZ2U9Y3RmLWZlZWQtYnVpbGRlciIsImlzX3Byb19hY3RpdmUiOiIifTt2YXIgY3RmPXsiYWpheF91cmwiOiJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWFkbWluL2FkbWluLWFqYXgucGhwIiwiaTE4biI6eyJuZXdUd2VldHNMb2FkZWQiOiIlcyBuZXcgdHdlZXRzIGxvYWRlZCIsIm5vTW9yZVR3ZWV0cyI6IkNcdTIwMTllc3QgdG91dFx1MDBhMCEgUGx1cyBkZSB0d2VldHMgXHUwMGUwIGNoYXJnZXIifX0=" defer></script>
vendor: 1 bytes, line 3926
3926
3927<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/9b770cac456f0181854c2d3506bf9d11.js?ver=efe5d" id="ctf_scripts-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3927
3927
3928<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/e506f614d992421780d835da41818521.js?ver=87b56" id="wp-hooks-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3928
3928
3929<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/0f348c9b267f56c943c1d89e58e2b30a.js?ver=1a9f0" id="wp-i18n-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3929
3929
3930<script data-optimized="1" type="text/javascript" id="wp-i18n-js-after" src="data:text/javascript;base64,d3AuaTE4bi5zZXRMb2NhbGVEYXRhKHsndGV4dCBkaXJlY3Rpb25cdTAwMDRsdHInOlsnbHRyJ119KQ==" defer></script>
vendor: 1 bytes, line 3930
3930
3931<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/b8329814fecdb7425e3e7191263873cc.js?ver=6ab82" id="swv-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3931
3931
3932<script data-optimized="1" type="text/javascript" id="contact-form-7-js-translations" src="data:text/javascript;base64,KGZ1bmN0aW9uKGRvbWFpbix0cmFuc2xhdGlvbnMpe3ZhciBsb2NhbGVEYXRhPXRyYW5zbGF0aW9ucy5sb2NhbGVfZGF0YVtkb21haW5dfHx0cmFuc2xhdGlvbnMubG9jYWxlX2RhdGEubWVzc2FnZXM7bG9jYWxlRGF0YVsiIl0uZG9tYWluPWRvbWFpbjt3cC5pMThuLnNldExvY2FsZURhdGEobG9jYWxlRGF0YSxkb21haW4pfSkoImNvbnRhY3QtZm9ybS03Iix7InRyYW5zbGF0aW9uLXJldmlzaW9uLWRhdGUiOiIyMDI2LTA3LTI3IDE1OjM3OjI3KzAwMDAiLCJnZW5lcmF0b3IiOiJHbG90UHJlc3NcLzQuMC4zIiwiZG9tYWluIjoibWVzc2FnZXMiLCJsb2NhbGVfZGF0YSI6eyJtZXNzYWdlcyI6eyIiOnsiZG9tYWluIjoibWVzc2FnZXMiLCJwbHVyYWwtZm9ybXMiOiJucGx1cmFscz0yOyBwbHVyYWw9biA+IDE7IiwibGFuZyI6ImZyIn0sIlRoaXMgY29udGFjdCBmb3JtIGlzIHBsYWNlZCBpbiB0aGUgd3JvbmcgcGxhY2UuIjpbIkNlIGZvcm11bGFpcmUgZGUgY29udGFjdCBlc3QgcGxhY1x1MDBlOSBkYW5zIHVuIG1hdXZhaXMgZW5kcm9pdC4iXSwiRXJyb3I6IjpbIkVycmV1clx1MDBhMDoiXX19LCJjb21tZW50Ijp7InJlZmVyZW5jZSI6ImluY2x1ZGVzXC9qc1wvaW5kZXguanMifX0p" defer></script>
vendor: 1 bytes, line 3932
3932
3933<script data-optimized="1" type="text/javascript" id="contact-form-7-js-before" src="data:text/javascript;base64,dmFyIHdwY2Y3PXsiYXBpIjp7InJvb3QiOiJodHRwczpcL1wvZ29sZGVucm9kLXBpZ2Vvbi00MjA0OTEuaG9zdGluZ2Vyc2l0ZS5jb21cL3dwLWpzb25cLyIsIm5hbWVzcGFjZSI6ImNvbnRhY3QtZm9ybS03XC92MSJ9LCJjYWNoZWQiOjF9" defer></script>
vendor: 1 bytes, line 3933
3933
3934<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/334390d3fac1509b412acfb5d677d46a.js?ver=1d7d1" id="contact-form-7-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3934
3934
3935<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/a16f8f39956c4e6f6f3dcaa7fb510b0d.js?ver=10b0d" id="hostinger-reach-embed-js" defer="defer" data-wp-strategy="defer"></script>
vendor: 1 bytes, line 3935
3935
3936<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/a83f9e4a8a200a18224c8547dd64d09f.js?ver=a7877" id="jquery-ui-core-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3936
3936
3937<script data-optimized="1" type="text/javascript" id="qi-addons-for-elementor-script-js-extra" src="data:text/javascript;base64,dmFyIHFvZGVmUWlBZGRvbnNHbG9iYWw9eyJ2YXJzIjp7ImFkbWluQmFySGVpZ2h0IjowLCJpY29uQXJyb3dMZWZ0IjoiXHUwMDNDc3ZnICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDM0LjIgMzIuM1wiIHhtbDpzcGFjZT1cInByZXNlcnZlXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6IDI7XCJcdTAwM0VcdTAwM0NsaW5lIHgxPVwiMC41XCIgeTE9XCIxNlwiIHgyPVwiMzMuNVwiIHkyPVwiMTZcIi9cdTAwM0VcdTAwM0NsaW5lIHgxPVwiMC4zXCIgeTE9XCIxNi41XCIgeDI9XCIxNi4yXCIgeTI9XCIwLjdcIi9cdTAwM0VcdTAwM0NsaW5lIHgxPVwiMFwiIHkxPVwiMTUuNFwiIHgyPVwiMTYuMlwiIHkyPVwiMzEuNlwiL1x1MDAzRVx1MDAzQy9zdmdcdTAwM0UiLCJpY29uQXJyb3dSaWdodCI6Ilx1MDAzQ3N2ZyAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHg9XCIwcHhcIiB5PVwiMHB4XCIgdmlld0JveD1cIjAgMCAzNC4yIDMyLjNcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOiAyO1wiXHUwMDNFXHUwMDNDbGluZSB4MT1cIjBcIiB5MT1cIjE2XCIgeDI9XCIzM1wiIHkyPVwiMTZcIi9cdTAwM0VcdTAwM0NsaW5lIHgxPVwiMTcuM1wiIHkxPVwiMC43XCIgeDI9XCIzMy4yXCIgeTI9XCIxNi41XCIvXHUwMDNFXHUwMDNDbGluZSB4MT1cIjE3LjNcIiB5MT1cIjMxLjZcIiB4Mj1cIjMzLjVcIiB5Mj1cIjE1LjRcIi9cdTAwM0VcdTAwM0Mvc3ZnXHUwMDNFIiwiaWNvbkNsb3NlIjoiXHUwMDNDc3ZnICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDkuMSA5LjFcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiXHUwMDNFXHUwMDNDZ1x1MDAzRVx1MDAzQ3BhdGggZD1cIk04LjUsMEw5LDAuNkw1LjEsNC41TDksOC41TDguNSw5TDQuNSw1LjFMMC42LDlMMCw4LjVMNCw0LjVMMCwwLjZMMC42LDBMNC41LDRMOC41LDB6XCIvXHUwMDNFXHUwMDNDL2dcdTAwM0VcdTAwM0Mvc3ZnXHUwMDNFIn19" defer></script>
vendor: 1 bytes, line 3937
3937
3938<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/1a10c4d1ba1264e690a885229bdb0d68.js?ver=82695" id="qi-addons-for-elementor-script-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3938
3938
3939<script type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/plugins/stal-core/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.min.js?ver=6.9.9" id="perfect-scrollbar-js"></script>
vendor: 1 bytes, line 3939
3939
3940<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/7cac80ce3b69d2c25630f8ed7d9deb62.js?ver=016a4" id="hoverIntent-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3940
3940
3941<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/3b94744ea11e5f351209a8652c9e214c.js?ver=55655" id="jquery-easing-1.3-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3941
3941
3942<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/afc67563c1575b9ef61ccea905511f57.js?ver=7ad5a" id="modernizr-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3942
3942
3943<script data-optimized="1" type="text/javascript" id="stal-main-js-js-extra" src="data:text/javascript;base64,dmFyIHFvZGVmR2xvYmFsPXsidmFycyI6eyJhZG1pbkJhckhlaWdodCI6MCwicW9kZWZTdGlja3lIZWFkZXJTY3JvbGxBbW91bnQiOjAsInRvcEFyZWFIZWlnaHQiOjAsInJlc3RVcmwiOiJodHRwczovL2dvbGRlbnJvZC1waWdlb24tNDIwNDkxLmhvc3RpbmdlcnNpdGUuY29tL3dwLWpzb24vIiwicGFnaW5hdGlvblJlc3RSb3V0ZSI6InN0YWwvdjEvZ2V0LXBvc3RzIiwicGFnaW5hdGlvbk5vbmNlIjoiOTM0YTRhZTdiOCIsImhlYWRlckhlaWdodCI6ODYsIm1vYmlsZUhlYWRlckhlaWdodCI6NzB9fQ==" defer></script>
vendor: 1 bytes, line 3943
3943
3944<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/834532dda78009f1234520afe02326d8.js?ver=311f2" id="stal-main-js-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3944
3944
3945<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/2d690960420402743b8668c5982acb68.js?ver=0648b" id="stal-core-script-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3945
3945
3946<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/7a17bd6d3c3eba4e00ae83e6bdbcae32.js?ver=a628a" id="waitforimages-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3946
3946
3947<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/d0b8233ba2fdc8f74897d863defd86bc.js?ver=48578" id="appear-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3947
3947
3948<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/b1b22a05750635e65f17d0e33c7f4b71.js?ver=da4e9" id="swiper-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3948
3948
3949<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/91e860846bbf24595857286569f5e57f.js?ver=6d123" id="magnific-popup-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3949
3949
3950<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/10812ff7ec0244010cb7bc6bb068160b.js?ver=96693" id="sourcebuster-js-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3950
3950
3951<script data-optimized="1" type="text/javascript" id="wc-order-attribution-js-extra" src="data:text/javascript;base64,dmFyIHdjX29yZGVyX2F0dHJpYnV0aW9uPXsicGFyYW1zIjp7ImxpZmV0aW1lIjoxLjBlLTUsInNlc3Npb24iOjMwLCJiYXNlNjQiOiExLCJhamF4dXJsIjoiaHR0cHM6Ly9nb2xkZW5yb2QtcGlnZW9uLTQyMDQ5MS5ob3N0aW5nZXJzaXRlLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocCIsInByZWZpeCI6IndjX29yZGVyX2F0dHJpYnV0aW9uXyIsImFsbG93VHJhY2tpbmciOiEwfSwiZmllbGRzIjp7InNvdXJjZV90eXBlIjoiY3VycmVudC50eXAiLCJyZWZlcnJlciI6ImN1cnJlbnRfYWRkLnJmIiwidXRtX2NhbXBhaWduIjoiY3VycmVudC5jbXAiLCJ1dG1fc291cmNlIjoiY3VycmVudC5zcmMiLCJ1dG1fbWVkaXVtIjoiY3VycmVudC5tZG0iLCJ1dG1fY29udGVudCI6ImN1cnJlbnQuY250IiwidXRtX2lkIjoiY3VycmVudC5pZCIsInV0bV90ZXJtIjoiY3VycmVudC50cm0iLCJ1dG1fc291cmNlX3BsYXRmb3JtIjoiY3VycmVudC5wbHQiLCJ1dG1fY3JlYXRpdmVfZm9ybWF0IjoiY3VycmVudC5mbXQiLCJ1dG1fbWFya2V0aW5nX3RhY3RpYyI6ImN1cnJlbnQudGN0Iiwic2Vzc2lvbl9lbnRyeSI6ImN1cnJlbnRfYWRkLmVwIiwic2Vzc2lvbl9zdGFydF90aW1lIjoiY3VycmVudF9hZGQuZmQiLCJzZXNzaW9uX3BhZ2VzIjoic2Vzc2lvbi5wZ3MiLCJzZXNzaW9uX2NvdW50IjoidWRhdGEudnN0IiwidXNlcl9hZ2VudCI6InVkYXRhLnVhZyJ9fQ==" defer></script>
vendor: 1 bytes, line 3951
3951
3952<script data-optimized="1" type="text/javascript" src="https://goldenrod-pigeon-420491.hostingersite.com/wp-content/litespeed/js/10fc19a608d53d7e7d7fd9b6dd7af6ee.js?ver=30f90" id="wc-order-attribution-js" defer data-deferred="1"></script>
vendor: 1 bytes, line 3952
3952
3953<script id="wp-emoji-settings" type="application/json"> 3954{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://goldenrod-pigeon-420491.hostingersite.com/wp-includes/js/wp-emoji-release.min.js?ver=6.9.9"}} 3955</script>
vendor: 1 bytes, line 3955
3955
3956<script type="module"> 3957/* <![CDATA[ */ 3958/*! This file is auto-generated */ 3959var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 3960//# sourceURL=https://goldenrod-pigeon-420491.hostingersite.com/wp-includes/js/wp-emoji-loader.min.js 3961/* ]]> */ 3962</script>
3962 3963</body> 3964</html> 3965 3966<!-- Page cached by LiteSpeed Cache 7.9.1 on 2026-10-03 04:25:26 -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.