PageSourceSearch

https://www.uttop.fr/en/index.html

html uttop.fr collected 2026-09-28 06:43:49 UTC 110,647 bytes, 3,803 lines download raw bytes

1
2<!DOCTYPE html>
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=9" /><meta content="Ametys CMS Open source (http://www.ametys.org)" name="generator" /><link href="/skins/uttop/resources/img/favicon.ico" rel="shortcut icon" /><link href="/skins/uttop/resources/img/favicon.gif" type="image/gif" rel="icon" /><meta content="IE=9" http-equiv="X-UA-Compatible" /><title>Coming to ENIT - UTTOP</title><meta charset="utf-8" /><meta content="width=device-width, initial-scale=1.0" name="viewport" /><meta content="Ametys CMS (http://www.ametys.org)" name="author" /><meta content="Ametys CMS (http://www.ametys.org)" name="generator" /><meta content="Ametys v4" name="copyright" /><meta content="en" name="language" /><meta content="15 days" name="revisit-after" /><meta content="UTTOP in figures" name="DC.title" /><meta content="2026-08-19" name="DC.date" /><meta content="Text" name="DC.type" /><meta content="text/html" name="DC.format" /><meta content="defaultWebContent://9e7bb6b7-78ba-4dc5-b4e2-e37f9c454960" name="DC.identifier" /><meta content="en" name="DC.language" /><meta content="en" name="DC.coverage" /><meta content="Welcome to UTTOP" name="DC.title" /><meta content="2026-09-08" name="DC.date" /><meta content="Text" name="DC.type" /><meta content="text/html" name="DC.format" /><meta content="defaultWebContent://5373c37c-c158-484f-a2f3-9d8b9baf5878" name="DC.identifier" /><meta content="en" name="DC.language" /><meta content="en" name="DC.coverage" /><meta content="International events" name="DC.title" /><meta content="2026-08-19" name="DC.date" /><meta content="Text" name="DC.type" /><meta content="text/html" name="DC.format" /><meta content="defaultWebContent://c568c1d4-3fbf-4926-a355-77002b7e9512" name="DC.identifier" /><meta content="en" name="DC.language" /><meta content="en" name="DC.coverage" /><meta content="ENIT" name="DC.contributor" /><!----><!--[if lt IE 9]><link rel="stylesheet" href="/skins/uttop/resources/css/ie.css" type="text/css" media="all" /><![endif]--><!--[if IE 9]><link rel="stylesheet" href="/skins/uttop/resources/css/ie9.css/" type="text/css" media="all" /><![endif]--><link href="/_plugins/web/uttop/en/filter/events/rss.xml" title="News RSS feed for site Ametys, CMS Java Open Source" type="application/rss+xml" rel="alternate" /><link href="/_plugins/web/uttop/en/filter/org.ametys.web.article.RSS/rss.xml" title="Articles RSS feed for site Ametys, CMS Java Open Source" type="application/rss+xml" rel="alternate" /><noscript><div><img alt="" style="border:0" src="https://telemetrie.uttop.fr/piwik.php?idsite=4&amp;rec=1" /></div></noscript><link href="/plugins/cms/dublincore/content.rdf?contentId=defaultWebContent://9e7bb6b7-78ba-4dc5-b4e2-e37f9c454960" rel="meta" /><link href="/plugins/cms/dublincore/content.rdf?contentId=defaultWebContent://5373c37c-c158-484f-a2f3-9d8b9baf5878" rel="meta" /><link href="/plugins/cms/dublincore/content.rdf?contentId=defaultWebContent://c568c1d4-3fbf-4926-a355-77002b7e9512" rel="meta" /><link href="/" title="See the RSS feed for these contents" type="application/rss+xml" rel="alternate" /><link href="/plugins/cms/dublincore/content.rdf?contentId=defaultWebContent://ee2c0486-60be-43a1-861a-7da599783d9d" rel="meta" /><link media="screen" data-donotminimize="true" type="text/css" href="/skins/uttop/resources/css/jquery/jquery-ui-1.9.1.css" rel="stylesheet" /><link type="text/css" rel="stylesheet" href="/_plugins/web/resources-minimized/MjAwMjg1MzAwOQ.css" media="screen" /><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,700" /><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:700,400" /><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Slab:400,700,300,100" /><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Pacifico" /><link type="text/css" rel="stylesheet" href="/_plugins/web/resources-minimized/LTg0MDQxNjExMw.css" /><link data-donotminimize="true" media="all" type="text/css" href="/skins/uttop/resources/css/custom.css" rel="stylesheet" /><link type="text/css" rel="stylesheet" href="/_plugins/web/resources-minimized/MTI5NzUyMTE3Ng.css" media="print" /><link type="text/css" rel="stylesheet" href="/_plugins/web/resources-minimized/LTE1NjkwODkyMTU.css" /><link type="text/css" rel="stylesheet" href="/_plugins/web/resources-minimized/LTEzNDk1Mzc1MzE.css" media="print,handheld,screen" />
3<script type="text/javascript" src="/_plugins/web/resources-minimized/LTk2NDU1MzQzOQ.js"></script>
3<script type="text/javascript"><!--
4
5            $ = $j = jQuery.noConflict();
6        
7// --></script>
7<script type="text/javascript" src="/_plugins/web/resources-minimized/MTI1MjY1OTk3Ng.js"></script>
7<script type="text/javascript"><!--
8
9                $j(document).ready(function() {
10                    $j().piroBox_ext({
11                        piro_speed: 600,
12                        bg_alpha: 0.5,
13                        piro_scroll: true,
14                        prev_label: 'Previous',
15                        next_label: 'Next',
16                        close_label: 'Close'
17                    });
18                });
19	        
20// --></script>
20<script type="text/javascript" src="/_plugins/web/resources-minimized/Mjc0OTExNzI5.js"></script>
20<script type="text/javascript"><!--
21
22            mejs.i18n.language('en');
23        
24// --></script>
24<script type="text/javascript"><!--
25
26            ametysUser = null;
27            
28            var _ametysUserCallbacks = [];
29            var _ametysUserRunning = false;
30            
31            var _fillUserInputs = function(id, field, callback)
32            {
33                if (this[field])
34                {
35                    var input = document.getElementById(id);
36                    if (!input.value)
37                    {
38                        input.value = this[field];
39                        if (typeof callback == "function")
40                        {
41                           callback(id, input, this[field]);
42                        }
43                    }
44                }
45            }
46            
47            
48            
49            function getAmetysUser(callback)
50            {
51                if (ametysUser && typeof(callback) == "function")
52                {
53                    callback(ametysUser);
54                }
55                else
56                {
57                    if (typeof(callback) == "function")
58                    {
59                        _ametysUserCallbacks.push(callback);
60                    }
61                    
62                    if (!_ametysUserRunning)
63                    {
64                        _ametysUserRunning = true;
65                        
66                        $j.ajax({
67                            url: "/_plugins/cms/current-user",
68                            dataType: "json",
69                            error: function(result, status, error) {
70                                console.log(error);
71                                ametysUser = null;
72                                _ametysUserRunning = false;
73                            },
74                            success: function(user) {
75                                ametysUser = user;
76                                
77                                if (ametysUser)
78                                {
79                                    ametysUser.fill = _fillUserInputs;
80                                }
81                                
82                                for (var i=0; i < _ametysUserCallbacks.length; i++)
83                                {
84                                    try 
85                                    {
86                                        _ametysUserCallbacks[i](ametysUser);
87                                    } 
88                                    catch(e) 
89                                    {
90                                        console.error("Failed to invoked callback function " + _ametysUserCallbacks[i].name + ":", e);
91                                    }
92                                }
93                                
94                                _ametysUserRunning = false;
95                            }
96                        });
97                    }
98                }
99            }
100        
101// --></script>
101<script type="text/javascript"><!--
102
103           ametysCookieConsentListener = [];
104            
105           
106                function ametysCallCookieConsentListener(accept)
107                {
108                    for (var i = 0; i < ametysCookieConsentListener.length; i++)
109                    {
110                       ametysCookieConsentListener[i].apply(window, [accept]);
111                    }
112                }
113
114                
115                    var ametysCookieExpireDay = 390;
116                    
117                    function ametysRefuseCookieConsent()  
118                    {
119                        $j.cookie('ametysHasConsent', false, {expires: ametysCookieExpireDay, path: '' || '/'});
120                        
121                        ametysCallCookieConsentListener(false);
122                        ametysHideInformCookieConsent();
123                    }
124            
125                    function ametysAcceptCookieConsent()
126                    {
127                        $j.cookie('ametysHasConsent', true, {expires: ametysCookieExpireDay, path: '' || '/'});
128                        
129                        
130                        ametysHideInformCookieConsent();
131                    }
132            
133                    function ametysHideInformCookieConsent() 
134                    {
135                        $j("#cookie-banner").hide();
136                    }
137                    
138                
139// --></script>
139<script type="text/javascript" src="/_plugins/web/resources-minimized/MTA5ODA3MDE2Mg.js"></script>
139<script type="text/javascript"><!--
140
141            AmetysFront.CONTEXT_PATH = '';
142            AmetysFront.ABSOLUTE_CONTEXT_PATH = 'https://www.uttop.fr';
143            AmetysFront.URI_PREFIX = '';
144            AmetysFront.ABSOLUTE_URI_PREFIX = 'https://www.uttop.fr';
145            AmetysFront.MAX_UPLOAD_SIZE = 10485760 - 1000; // 1000 for request overhead
146                
147            AmetysFront.setAppParameter('siteName', 'uttop');
148            AmetysFront.setAppParameter('sitemapLanguage', 'en');
149            AmetysFront.setAppParameter('locale', 'en');
150        
151// --></script>
151<script type="text/javascript"><!--
152
153					var resourcesPath = "/skins/uttop/resources/";
154				
155// --></script>
155<script type="text/javascript" src="/_plugins/web/resources-minimized/NzI2NzU5NjI.js"></script>
155<script type="text/javascript"><!--
156
157   					_artStyleUrlCached = "https://www.uttop.fr/skins/uttop/resources/";
158   					contextPath = "https://www.uttop.fr"; 
159   				
160// --></script>
160<script type="text/javascript" src="/_plugins/web/resources-minimized/LTIwNTQ2Njc5OQ.js"></script>
160<script type="text/javascript"><!--
161
162			      var _paq = _paq || [];
163			      
164			      ametysCookieConsentListener.push(function(accept) {
165                    if (accept)
166                    {
167                        _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
168                        _paq.push(['setConsentGiven']);
169	                  (function() {
170	                    var u="https://telemetrie.uttop.fr/";
171	                    _paq.push(["setTrackerUrl", u+"piwik.php"]);
172	                    
173	                    var searchTracking = false;
174	                    
175	                        var searchKeyword = "";
176	                        if (searchKeyword != '')
177	                        {
178	                            // Internal search tracking on a search result page
179	                            _paq.push(["trackSiteSearch", searchKeyword, false, false]);
180	                            searchTracking = true;
181	                        }
182	                    
183
184	                    if (!searchTracking)
185	                    {
186	                        _paq.push(["trackPageView"]);
187	                    }
188                        
189	                    _paq.push(["enableLinkTracking"]);
190	                    _paq.push(["setSiteId", "4"]);
191	                    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
192	                    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
193	                  })();
194	                    }
195	                    else
196	                    {
197	                        _paq.push(['forgetConsentGiven']);
198	                    }
199	                });
200			
201// --></script>
201</head><body class="kopa-home-parallax index"><div class="art-page-wai-links" id="art-page-wai-links"><a href="#content">Go to content</a><a href="#search">Go to search</a><a href="#menu">Go to menu</a></div><header class="kopa-page-header parallax" id="parallax-header"><div id="myHeader" class="kopa-header-bottom "><div class="wrapper clearfix"><div class="logo-box pull-left"><a href="/en/index.html"><img alt="UTTOP" src="/skins/uttop/resources/img/logo-UTTOP.png" /></a></div><div class="lang_links desktop"><ul><li class="lang-item fr"><a title="Voir la page en fran&ccedil;ais" href="/fr/index.html">FR</a></li><li class="lang-item current"><a title="See this page in english" href="/en/index.html">EN</a></li></ul></div><nav class="main-nav pull-right"><ul class="main-menu clearfix"><li class="lang-links"><a href="#">Language</a><ul class="submenu"><li class="lang-item fr"><a title="Voir la page en fran&ccedil;ais" href="/fr/index.html">FR</a></li><li class="lang-item current"><a title="See this page in english" href="/en/index.html">EN</a></li></ul></li><li class=""><a href="/en/uttop-1.html" class="sf-with-ul">UTTOP<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/uttop-1/uttop.html">UTTOP</a></li><li><a href="/en/uttop-1/creation-of-uttop.html">Creation of UTTOP</a></li><li><a href="/en/uttop-1/our-programs.html">Our programs</a></li><li><a href="/en/uttop-1/campus-life.html">Campus</a></li><li><a href="/en/uttop-1/go-to-uttop.html">Go to UTTOP </a></li></ul></li><li class=""><a href="/en/enit.html">ENIT<span class=""><!--empty--></span></a></li><li class=""><a href="/en/iut-of-tarbes.html">IUT of Tarbes <span class=""><!--empty--></span></a></li><li class=""><a href="/en/international.html" class="sf-with-ul">INTERNATIONAL<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/international/international-events.html">International events</a></li><li><a href="/en/international/call-for-project-proposals.html">Call for project proposals</a></li></ul></li><li class=""><a href="/en/research.html">Research<span class=""><!--empty--></span></a></li><li class=""><a href="/en/corporate-space.html">Corporate space<span class=""><!--empty--></span></a></li><li class="last"><a href="/en/location-information.html" class="sf-with-ul">Campus life<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/location-information/leisure-and-students-activities.html">Leisure and student activities</a></li><li><a href="/en/location-information/living-in-tarbes.html">Living in Tarbes</a></li></ul></li><li> | <a class="search-button" href="/en/moteur-de-recherche.html"><img alt="Search..." src="/skins/uttop/resources/img/search-icon.png" /></a></li></ul></nav><nav class="main-nav-mobile clearfix"><a class="pull"><span class="fa fa-align-justify"><!--empty--></span></a><ul class="main-menu-mobile clearfix"><li class="lang-links"><a href="#">Language</a><ul class="submenu"><li class="lang-item fr"><a title="Voir la page en fran&ccedil;ais" href="/fr/index.html">FR</a></li><li class="lang-item current"><a title="See this page in english" href="/en/index.html">EN</a></li></ul></li><li class=""><a href="/en/uttop-1.html" class="sf-with-ul">UTTOP<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/uttop-1/uttop.html">UTTOP</a></li><li><a href="/en/uttop-1/creation-of-uttop.html">Creation of UTTOP</a></li><li><a href="/en/uttop-1/our-programs.html">Our programs</a></li><li><a href="/en/uttop-1/campus-life.html">Campus</a></li><li><a href="/en/uttop-1/go-to-uttop.html">Go to UTTOP </a></li></ul></li><li class=""><a href="/en/enit.html">ENIT<span class=""><!--empty--></span></a></li><li class=""><a href="/en/iut-of-tarbes.html">IUT of Tarbes <span class=""><!--empty--></span></a></li><li class=""><a href="/en/international.html" class="sf-with-ul">INTERNATIONAL<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/international/international-events.html">International events</a></li><li><a href="/en/international/call-for-project-proposals.html">Call for project proposals</a></li></ul></li><li class=""><a href="/en/research.html">Research<span class=""><!--empty--></span></a></li><li class=""><a href="/en/corporate-space.html">Corporate space<span class=""><!--empty--></span></a></li><li class="last"><a href="/en/location-information.html" class="sf-with-ul">Campus life<span class=""><!--empty--></span></a><ul class="sub-menu"><li><a href="/en/location-information/leisure-and-students-activities.html">Leisure and student activities</a></li><li><a href="/en/location-information/living-in-tarbes.html">Living in Tarbes</a></li></ul></li><li> | <a class="search-button" href="/en/moteur-de-recherche.html"><img alt="Search..." src="/skins/uttop/resources/img/search-icon.png" /></a></li></ul></nav></div></div><div class="wrapper"><div class="search-box col-7"><h1>UNIVERSITY OF TECHNOLOGY<br />TARBES OCCITANIE PYR&Eacute;N&Eacute;ES</h1><form method="get" class="search-form clearfix" action="/en/moteur-de-recherche.html"><input class="search-text" name="textfield" value="Search..." onFocus="if (this.value == this.defaultValue)                                                    this.value = &#039;&#039;;" onBlur="if (this.value == &#039;&#039;)                                        this.value = this.defaultValue;" type="text" /><button class="search-submit" type="submit"><span class="fa fa-search"></span></button><input name="submit-form" type="hidden" /></form><div class="directaccess"><ul><li><a class="btn" href="/en/uttop-1/campus-life.html"><span>Campus</span></a></li><li><a class="btn" href="/en/uttop-1/our-programs.html"><span>Our programs</span></a></li><li><a class="btn" href="/en/iut-of-tarbes.html"><span>IUT of Tarbes </span></a></li><li><a class="btn" href="/en/enit.html"><span>ENIT</span></a></li><li><a class="btn" href="/en/international.html"><span>INTERNATIONAL</span></a></li></ul></div></div></div></header><div id="main-content"><a name="content"></a><section class="kopa-area"><div class="kopa-parallax widget"><div data-ametys-zone="default" id="ametys-cms-zone-default"><div data-ametys-zone-level="1" id="ametys-cms-zone-default-item-N10049" class="first "><div class="ametys-cms-content article view-home"><div style="background-image:url(&#039;&#039;)" class="parallax clearfix parallax-1"><div class="kopa-bg"><!--empty--></div><div class="wrapper"><div class="widget kopa_widget_text"><h1 class="widget-title">UTTOP in figures</h1><p><section id="uttop-key" aria-label="UTTOP in figures">
202  <div class="uttop-key__container">
203
204    <div class="uttop-key__header">
205      <h2 class="uttop-key__title">UTTOP in figures</h2>
206
207      <p class="uttop-key__lead">
208        A people-focused university of technology, firmly rooted in its
209        region and closely connected to the professional world.
210      </p>
211    </div>
212
213    <ul class="uttop-key__grid">
214
215      <li class="uttop-key__item" style="--k-color:#ff99d6">
216        <span class="uttop-key__icon" aria-hidden="true">
217          <svg viewBox="0 0 48 48" focusable="false">
218            <circle cx="24" cy="15" r="7"/>
219            <path d="M10 39c0-7.2 6.3-12 14-12s14 4.8 14 12"/>
220          </svg>
221        </span>
222
223        <span class="uttop-key__body">
224          <span class="uttop-key__num" data-target="2800">0</span>
225          <span class="uttop-key__label">Students</span>
226        </span>
227      </li>
228
229      <li class="uttop-key__item" style="--k-color:#129a7e">
230        <span class="uttop-key__icon" aria-hidden="true">
231          <svg viewBox="0 0 48 48" focusable="false">
232            <circle cx="17" cy="14" r="6"/>
233            <path d="M6 38c0-6.4 5-10.5 11-10.5S28 31.6 28 38"/>
234            <path d="M32 9.5a6 6 0 0 1 0 11.4"/>
235            <path d="M35 28.4c4 1.5 6.4 4.9 6.4 9.6"/>
236          </svg>
237        </span>
238
239        <span class="uttop-key__body">
240          <span class="uttop-key__num" data-target="360">0</span>
241          <span class="uttop-key__label">Staff members</span>
242        </span>
243      </li>
244
245      <li class="uttop-key__item" style="--k-color:#d4b81f">
246        <span class="uttop-key__icon" aria-hidden="true">
247          <svg viewBox="0 0 48 48" focusable="false">
248            <path d="M24 9L5 18l19 9 19-9z"/>
249            <path d="M13 22.5V33c0 3.3 4.9 6 11 6s11-2.7 11-6V22.5"/>
250            <path d="M40 19v10"/>
251          </svg>
252        </span>
253
254        <span class="uttop-key__body">
255          <span class="uttop-key__num" data-target="750">0</span>
256          <span class="uttop-key__label">Graduates each year</span>
257        </span>
258      </li>
259
260      <li class="uttop-key__item" style="--k-color:#586ddd">
261        <span class="uttop-key__icon" aria-hidden="true">
262          <svg viewBox="0 0 48 48" focusable="false">
263            <rect x="6" y="15" width="36" height="25" rx="3"/>
264            <path d="M18 15v-4a3 3 0 0 1 3-3h6a3 3 0 0 1 3 3v4"/>
265            <path d="M6 25h36"/>
266            <path d="M21 25v3h6v-3"/>
267          </svg>
268        </span>
269
270        <span class="uttop-key__body">
271          <span class="uttop-key__num" data-target="3000">0</span>
272          <span class="uttop-key__label">Corporate partners</span>
273        </span>
274      </li>
275
276    </ul>
277
278  </div>
279</section>
280
281<style>
282:root {
283  --uttop-key-white: #ffffff;
284  --uttop-key-deep: #003a58;
285  --uttop-key-text: #16283a;
286  --uttop-key-line: #e3e9ef;
287}
288
289/* =====================================================
290   CMS WRAPPER
291===================================================== */
292
293.widget.kopa_widget_text.uttop-key-widget {
294  position: relative !important;
295  z-index: 2 !important;
296
297  margin: 0 !important;
298  padding: 0 !important;
299
300  border: 0 !important;
301  outline: 0 !important;
302
303  background: var(--uttop-key-white) !important;
304  background-color: var(--uttop-key-white) !important;
305  background-image: none !important;
306
307  box-shadow: none !important;
308  text-align: left !important;
309}
310
311.widget.kopa_widget_text.uttop-key-widget > .widget-title,
312.widget.kopa_widget_text.uttop-key-widget > p {
313  display: none !important;
314
315  width: 0 !important;
316  height: 0 !important;
317
318  margin: 0 !important;
319  padding: 0 !important;
320}
321
322#uttop-key,
323#uttop-key *,
324#uttop-key *::before,
325#uttop-key *::after {
326  box-sizing: border-box !important;
327}
328
329/* =====================================================
330   FULL-WIDTH SECTION
331===================================================== */
332
333#uttop-key {
334  position: relative !important;
335  z-index: 2 !important;
336
337  display: block !important;
338
339  width: 100vw !important;
340  max-width: none !important;
341
342  margin: 0 calc(50% - 50vw) !important;
343  padding: 100px 0 108px !important;
344
345  border: 0 !important;
346  outline: 0 !important;
347
348  color: var(--uttop-key-text) !important;
349
350  background: var(--uttop-key-white) !important;
351  background-color: var(--uttop-key-white) !important;
352  background-image: none !important;
353
354  box-shadow: none !important;
355  overflow: hidden !important;
356
357  text-align: left !important;
358}
359
360/* =====================================================
361   CONTAINER
362===================================================== */
363
364#uttop-key .uttop-key__container {
365  position: relative !important;
366  z-index: 1 !important;
367
368  width: calc(100% - 48px) !important;
369  max-width: 1340px !important;
370
371  margin: 0 auto !important;
372  padding: 0 !important;
373
374  border: 0 !important;
375  background: transparent !important;
376
377  text-align: left !important;
378}
379
380/* =====================================================
381   HEADER
382===================================================== */
383
384#uttop-key .uttop-key__header {
385  max-width: 780px !important;
386
387  margin: 0 0 64px !important;
388  padding: 0 !important;
389
390  border: 0 !important;
391  background: transparent !important;
392
393  text-align: left !important;
394}
395
396#uttop-key .uttop-key__title {
397  position: relative !important;
398
399  display: block !important;
400
401  margin: 0 0 22px !important;
402  padding: 0 !important;
403
404  border: 0 !important;
405  background: none !important;
406
407  color: var(--uttop-key-deep) !important;
408
409  font-family: inherit !important;
410  font-size: clamp(2.2rem, 3.4vw, 3rem) !important;
411  font-weight: 700 !important;
412  line-height: 1.14 !important;
413  letter-spacing: -0.015em !important;
414
415  text-align: left !important;
416  text-indent: 0 !important;
417  text-transform: none !important;
418}
419
420#uttop-key .uttop-key__title::before {
421  position: absolute !important;
422  top: -24px !important;
423  left: 0 !important;
424
425  display: block !important;
426
427  width: 58px !important;
428  height: 5px !important;
429
430  border-radius: 100px !important;
431
432  background: linear-gradient(
433    90deg,
434    #129a7e 0%,
435    #45db96 100%
436  ) !important;
437
438  content: "" !important;
439}
440
441#uttop-key .uttop-key__title::after {
442  display: none !important;
443  content: none !important;
444}
445
446#uttop-key .uttop-key__lead {
447  display: block !important;
448
449  margin: 0 !important;
450  padding: 0 !important;
451
452  color: #4a5c6e !important;
453
454  font-size: 1.24rem !important;
455  line-height: 1.7 !important;
456
457  text-align: left !important;
458  text-indent: 0 !important;
459}
460
461/* =====================================================
462   GRID
463   Internal lines are created by the right and bottom
464   borders of each item.
465===================================================== */
466
467#uttop-key .uttop-key__grid {
468  display: grid !important;
469  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
470  gap: 0 !important;
471
472  margin: 0 !important;
473  padding: 0 !important;
474
475  list-style: none !important;
476
477  border-top: 1px solid var(--uttop-key-line) !important;
478  border-left: 1px solid var(--uttop-key-line) !important;
479
480  background: transparent !important;
481  text-align: left !important;
482}
483
484/* =====================================================
485   ITEM — icon on the left, text on the right
486===================================================== */
487
488#uttop-key .uttop-key__item {
489  position: relative !important;
490
491  display: flex !important;
492  align-items: center !important;
493  gap: 30px !important;
494
495  min-width: 0 !important;
496  margin: 0 !important;
497  padding: 46px 40px !important;
498
499  border-right: 1px solid var(--uttop-key-line) !important;
500  border-bottom: 1px solid var(--uttop-key-line) !important;
501
502  background: var(--uttop-key-white) !important;
503  text-align: left !important;
504
505  opacity: 0 !important;
506  transform: translateY(22px) !important;
507
508  transition:
509    opacity 0.7s ease,
510    transform 0.7s cubic-bezier(0.22, 1, 0.36, 1),
511    background-color 0.35s ease !important;
512}
513
514#uttop-key .uttop-key__item.is-visible {
515  opacity: 1 !important;
516  transform: translateY(0) !important;
517}
518
519/* Subtle colour overlay on hover */
520#uttop-key .uttop-key__item::before {
521  position: absolute !important;
522  inset: 0 !important;
523  z-index: 0 !important;
524
525  background: var(--k-color) !important;
526  opacity: 0 !important;
527
528  transition: opacity 0.35s ease !important;
529
530  content: "" !important;
531  pointer-events: none !important;
532}
533
534#uttop-key .uttop-key__item:hover::before {
535  opacity: 0.06 !important;
536}
537
538/* Animated colour bar at the bottom */
539#uttop-key .uttop-key__item::after {
540  position: absolute !important;
541  bottom: -1px !important;
542  left: 0 !important;
543  z-index: 1 !important;
544
545  width: 100% !important;
546  height: 3px !important;
547
548  background: var(--k-color) !important;
549
550  transform: scaleX(0) !important;
551  transform-origin: left center !important;
552
553  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
554
555  content: "" !important;
556}
557
558#uttop-key .uttop-key__item:hover::after {
559  transform: scaleX(1) !important;
560}
561
562/* =====================================================
563   ICON
564===================================================== */
565
566#uttop-key .uttop-key__icon {
567  position: relative !important;
568  z-index: 1 !important;
569
570  flex: 0 0 auto !important;
571
572  display: flex !important;
573  align-items: center !important;
574  justify-content: center !important;
575
576  width: 76px !important;
577  height: 76px !important;
578
579  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
580}
581
582#uttop-key .uttop-key__item:hover .uttop-key__icon {
583  transform: scale(1.08) !important;
584}
585
586#uttop-key .uttop-key__icon svg {
587  display: block !important;
588
589  width: 100% !important;
590  height: 100% !important;
591
592  fill: none !important;
593  stroke: var(--k-color) !important;
594  stroke-width: 2 !important;
595  stroke-linecap: round !important;
596  stroke-linejoin: round !important;
597}
598
599#uttop-key .uttop-key__icon svg * {
600  fill: none !important;
601  stroke: inherit !important;
602  vector-effect: non-scaling-stroke !important;
603}
604
605/* =====================================================
606   TEXT BLOCK
607===================================================== */
608
609#uttop-key .uttop-key__body {
610  position: relative !important;
611  z-index: 1 !important;
612
613  display: block !important;
614  min-width: 0 !important;
615}
616
617#uttop-key .uttop-key__num {
618  display: block !important;
619
620  margin: 0 0 6px !important;
621  padding: 0 !important;
622
623  color: var(--k-color) !important;
624
625  font-size: clamp(2.9rem, 4.6vw, 3.9rem) !important;
626  font-weight: 800 !important;
627  line-height: 0.95 !important;
628  letter-spacing: -0.035em !important;
629
630  font-variant-numeric: tabular-nums !important;
631}
632
633#uttop-key .uttop-key__label {
634  display: block !important;
635
636  margin: 0 !important;
637
638  color: var(--uttop-key-deep) !important;
639
640  font-size: 1.18rem !important;
641  font-weight: 700 !important;
642  line-height: 1.28 !important;
643  letter-spacing: 0.005em !important;
644
645  text-align: left !important;
646  text-transform: uppercase !important;
647}
648
649/* =====================================================
650   RESPONSIVE
651===================================================== */
652
653@media (max-width: 1100px) {
654  #uttop-key .uttop-key__item {
655    gap: 24px !important;
656    padding: 38px 30px !important;
657  }
658
659  #uttop-key .uttop-key__icon {
660    width: 64px !important;
661    height: 64px !important;
662  }
663}
664
665@media (max-width: 900px) {
666  #uttop-key {
667    padding: 74px 0 80px !important;
668  }
669
670  #uttop-key .uttop-key__header {
671    margin-bottom: 48px !important;
672  }
673
674  #uttop-key .uttop-key__label {
675    font-size: 1.06rem !important;
676  }
677}
678
679@media (max-width: 620px) {
680  #uttop-key {
681    padding: 54px 0 60px !important;
682  }
683
684  #uttop-key .uttop-key__container {
685    width: calc(100% - 28px) !important;
686  }
687
688  #uttop-key .uttop-key__lead {
689    font-size: 1.08rem !important;
690  }
691
692  #uttop-key .uttop-key__grid {
693    grid-template-columns: 1fr !important;
694  }
695
696  #uttop-key .uttop-key__item {
697    gap: 20px !important;
698    padding: 30px 22px !important;
699  }
700
701  #uttop-key .uttop-key__icon {
702    width: 54px !important;
703    height: 54px !important;
704  }
705
706  #uttop-key .uttop-key__num {
707    font-size: clamp(2.4rem, 11vw, 3.2rem) !important;
708  }
709
710  #uttop-key .uttop-key__label {
711    font-size: 1rem !important;
712  }
713}
714
715@media (prefers-reduced-motion: reduce) {
716  #uttop-key .uttop-key__item,
717  #uttop-key .uttop-key__item::before,
718  #uttop-key .uttop-key__item::after,
719  #uttop-key .uttop-key__icon {
720    opacity: 1 !important;
721    transform: none !important;
722    transition: none !important;
723  }
724
725  #uttop-key .uttop-key__item::before {
726    opacity: 0 !important;
727  }
728
729  #uttop-key .uttop-key__item::after {
730    transform: scaleX(0) !important;
731  }
732}
733</style>
734
735<script>
736(function () {
737  "use strict";
738
739  var section = document.getElementById("uttop-key");
740
741  if (!section) {
742    return;
743  }
744
745  /* ===================================================
746     CMS WRAPPER
747  =================================================== */
748
749  var widget = section.closest(".widget.kopa_widget_text");
750
751  if (widget) {
752    widget.classList.add("uttop-key-widget");
753  }
754
755  /* ===================================================
756     FORCE LEFT ALIGNMENT FOR THE HEADER
757  =================================================== */
758
759  var header = section.querySelector(".uttop-key__header");
760
761  if (header) {
762    header.style.setProperty("text-align", "left", "important");
763
764    Array.prototype.forEach.call(
765      header.querySelectorAll("*"),
766      function (node) {
767        node.style.setProperty("text-align", "left", "important");
768        node.style.setProperty("margin-left", "0", "important");
769        node.style.setProperty("text-indent", "0", "important");
770      }
771    );
772  }
773
774  /* ===================================================
775     ANIMATED COUNTERS
776  =================================================== */
777
778  function formatNumber(value) {
779    return new Intl.NumberFormat("en-GB").format(value);
780  }
781
782  function easeOutCubic(progress) {
783    return 1 - Math.pow(1 - progress, 3);
784  }
785
786  function animateCounter(element) {
787    var target =
788      parseInt(element.getAttribute("data-target"), 10) || 0;
789
790    var duration = 1600;
791    var start = null;
792
793    function step(timestamp) {
794      if (start === null) {
795        start = timestamp;
796      }
797
798      var progress = Math.min(
799        (timestamp - start) / duration,
800        1
801      );
802
803      element.textContent = formatNumber(
804        Math.round(target * easeOutCubic(progress))
805      );
806
807      if (progress < 1) {
808        window.requestAnimationFrame(step);
809      }
810    }
811
812    window.requestAnimationFrame(step);
813  }
814
815  function fillInstantly(element) {
816    var target =
817      parseInt(element.getAttribute("data-target"), 10) || 0;
818
819    element.textContent = formatNumber(target);
820  }
821
822  /* ===================================================
823     SCROLL REVEAL
824  =================================================== */
825
826  var items = section.querySelectorAll(".uttop-key__item");
827
828  var reduceMotion =
829    window.matchMedia &&
830    window.matchMedia(
831      "(prefers-reduced-motion: reduce)"
832    ).matches;
833
834  function activate(item, delay) {
835    window.setTimeout(function () {
836      item.classList.add("is-visible");
837    }, delay);
838
839    var number = item.querySelector(".uttop-key__num");
840
841    if (!number || number.getAttribute("data-done")) {
842      return;
843    }
844
845    number.setAttribute("data-done", "1");
846
847    if (reduceMotion) {
848      fillInstantly(number);
849      return;
850    }
851
852    window.setTimeout(function () {
853      animateCounter(number);
854    }, delay);
855  }
856
857  function revealAll() {
858    Array.prototype.forEach.call(
859      items,
860      function (item, index) {
861        activate(item, index * 130);
862      }
863    );
864  }
865
866  if (!("IntersectionObserver" in window)) {
867    revealAll();
868    return;
869  }
870
871  var observer = new IntersectionObserver(
872    function (entries) {
873      entries.forEach(function (entry) {
874        if (!entry.isIntersecting) {
875          return;
876        }
877
878        var index = Array.prototype.indexOf.call(
879          items,
880          entry.target
881        );
882
883        activate(entry.target, index * 130);
884        observer.unobserve(entry.target);
885      });
886    },
887    {
888      threshold: 0.35,
889      rootMargin: "0px 0px -80px 0px"
890    }
891  );
892
893  Array.prototype.forEach.call(items, function (item) {
894    observer.observe(item);
895  });
896})();
897</script>
897</p></div></div></div></div></div><div data-ametys-zone-level="1" id="ametys-cms-zone-default-item-N10144" class="even "><div class="ametys-cms-content article view-home"><div style="background-image:url(&#039;&#039;)" class="parallax clearfix parallax-1"><div class="kopa-bg"><!--empty--></div><div class="wrapper"><div class="widget kopa_widget_text"><h1 class="widget-title">Welcome to UTTOP</h1><p><section id="uttop-hero" aria-label="Welcome to UTTOP">
898  <div class="uttop-hero__inner">
899
900    <div class="uttop-hero__head">
901      <p class="uttop-hero__kicker">
902        <span aria-hidden="true"></span>Tarbes · Occitanie · Pyrenees
903      </p>
904
905      <h1 class="uttop-hero__title">
906        Study in France<br><span>at the heart of the Pyrenees</span>
907      </h1>
908
909      <p class="uttop-hero__lead">
910        University of Technology Tarbes Occitanie Pyrenees
911      </p>
912    </div>
913
914    <form
915      class="uttop-hero__search"
916      method="get"
917      action="/en/search-engine.html"
918      role="search"
919    >
920      <label class="uttop-hero__sr" for="uttop-q">
921        Search the website
922      </label>
923
924      <div class="uttop-hero__field">
925        <svg class="uttop-hero__ico" viewBox="0 0 24 24" aria-hidden="true">
926          <circle cx="11" cy="11" r="7"></circle>
927          <path d="M16.5 16.5 21 21"></path>
928        </svg>
929
930        <input
931          id="uttop-q"
932          class="uttop-hero__input"
933          type="search"
934          name="textfield"
935          autocomplete="off"
936          placeholder="Programs, research, news…"
937        >
938
939        <button class="uttop-hero__go" type="submit">
940          <span>Search</span>
941
942          <svg viewBox="0 0 24 24" aria-hidden="true">
943            <path d="M5 12h13"></path>
944            <path d="M12 5l7 7-7 7"></path>
945          </svg>
946        </button>
947      </div>
948
949      <input type="hidden" name="submit-form" value="">
950    </form>
951
952    <nav class="uttop-hero__quick" aria-label="Quick links">
953      <ul>
954        <li>
955          <a href="https://www.uttop.fr/en/uttop-1/campus-life.html">
956            Campus
957          </a>
958        </li>
959
960        <li>
961          <a href="https://www.uttop.fr/en/uttop-1/our-programs.html">
962            Our programs
963          </a>
964        </li>
965
966        <li>
967          <a href="https://www.uttop.fr/en/international.html">
968            International
969          </a>
970        </li>
971      </ul>
972    </nav>
973
974    <div class="uttop-hero__schools">
975      <a
976        class="uttop-hero__school"
977        href="https://www.enit.fr/en/index.html"
978        target="_blank"
979        rel="noopener noreferrer"
980      >
981        <span class="uttop-hero__school-tag">
982          Engineering school
983        </span>
984
985        <span class="uttop-hero__school-name">
986          ENIT
987        </span>
988
989        <span class="uttop-hero__school-go">
990          Discover ENIT →
991        </span>
992      </a>
993
994      <a
995        class="uttop-hero__school"
996        href="https://www.iut-tarbes.fr/"
997        target="_blank"
998        rel="noopener noreferrer"
999      >
1000        <span class="uttop-hero__school-tag">
1001          University Institute of Technology
1002        </span>
1003
1004        <span class="uttop-hero__school-name">
1005          IUT of Tarbes
1006        </span>
1007
1008        <span class="uttop-hero__school-go">
1009          Discover the IUT →
1010        </span>
1011      </a>
1012    </div>
1013
1014  </div>
1015</section>
1016
1017<style>
1018/* ============================================================
1019   UTTOP HERO — full height, spacious and vertically centred
1020   Colours: blue #005078 / green #129a7e / mint #45db96
1021            yellow #f5d836 / pink #ff99d6 / indigo #586ddd
1022============================================================ */
1023
1024/* --- 1. Overlay across the entire header --- */
1025
1026.kopa-page-header.parallax {
1027  position: relative;
1028}
1029
1030.kopa-page-header.parallax::before {
1031  content: "";
1032  position: absolute;
1033  inset: 0;
1034  z-index: 0;
1035  pointer-events: none;
1036
1037  background:
1038    linear-gradient(
1039      180deg,
1040      rgba(0, 80, 120, 0.32) 0%,
1041      rgba(0, 80, 120, 0.38) 35%,
1042      rgba(0, 80, 120, 0.48) 100%
1043    ),
1044    linear-gradient(
1045      100deg,
1046      rgba(0, 50, 80, 0.28) 0%,
1047      rgba(0, 50, 80, 0.06) 65%,
1048      rgba(0, 50, 80, 0) 100%
1049    );
1050}
1051
1052.kopa-page-header.parallax > *:not(#myHeader) {
1053  position: relative;
1054  z-index: 1;
1055}
1056
1057.kopa-page-header.parallax > #myHeader {
1058  z-index: 20;
1059}
1060
1061/* --- 2. Full-height, vertically centred hero --- */
1062
1063#uttop-hero {
1064  --uh-navy: #005078;
1065  --uh-green: #129a7e;
1066  --uh-mint: #45db96;
1067  --uh-yellow: #f5d836;
1068  --uh-pink: #ff99d6;
1069  --uh-indigo: #586ddd;
1070  --uh-max: 1340px;
1071
1072  position: relative;
1073  box-sizing: border-box;
1074
1075  width: 100%;
1076  min-height: calc(100vh - 96px);
1077
1078  display: flex;
1079  align-items: center;
1080
1081  padding: 70px 40px 86px;
1082
1083  color: #fff;
1084  background: none;
1085
1086  font-family: inherit;
1087}
1088
1089#uttop-hero *,
1090#uttop-hero *::before,
1091#uttop-hero *::after {
1092  box-sizing: border-box;
1093}
1094
1095.uttop-hero__inner {
1096  width: 100%;
1097  max-width: var(--uh-max);
1098
1099  margin: 0 auto;
1100}
1101
1102/* --- Heading section --- */
1103
1104.uttop-hero__head {
1105  max-width: 860px;
1106}
1107
1108.uttop-hero__kicker {
1109  display: flex;
1110  align-items: center;
1111  gap: 13px;
1112
1113  margin: 0 0 22px !important;
1114  padding: 0 !important;
1115
1116  color: var(--uh-mint);
1117
1118  font-size: 0.92rem;
1119  font-weight: 700;
1120  line-height: 1.2 !important;
1121  letter-spacing: 0.18em;
1122  text-transform: uppercase;
1123}
1124
1125.uttop-hero__kicker span {
1126  width: 36px;
1127  height: 2px;
1128  flex: 0 0 36px;
1129
1130  background: var(--uh-mint);
1131}
1132
1133.uttop-hero__title {
1134  margin: 0 0 30px !important;
1135  padding: 0 !important;
1136
1137  color: #fff;
1138
1139  font-size: clamp(2.6rem, 5.6vw, 4.2rem);
1140  font-weight: 800;
1141  line-height: 1.12 !important;
1142  letter-spacing: -0.015em;
1143
1144  text-shadow: 0 2px 18px rgba(0, 20, 35, 0.5);
1145}
1146
1147.uttop-hero__title span {
1148  color: var(--uh-mint);
1149}
1150
1151.uttop-hero__lead {
1152  max-width: 660px;
1153
1154  margin: 0 !important;
1155  padding: 0 !important;
1156
1157  color: rgba(255, 255, 255, 0.93);
1158
1159  font-size: clamp(1.15rem, 1.7vw, 1.4rem);
1160  line-height: 1.7;
1161
1162  text-shadow: 0 1px 12px rgba(0, 20, 35, 0.5);
1163}
1164
1165/* --- Search --- */
1166
1167.uttop-hero__search {
1168  max-width: 700px;
1169  margin: 48px 0 0;
1170}
1171
1172.uttop-hero__sr {
1173  position: absolute !important;
1174
1175  width: 1px;
1176  height: 1px;
1177
1178  overflow: hidden;
1179
1180  clip: rect(0 0 0 0);
1181  white-space: nowrap;
1182}
1183
1184.uttop-hero__field {
1185  display: flex;
1186  align-items: center;
1187  gap: 12px;
1188
1189  padding: 8px 8px 8px 24px;
1190
1191  background: rgba(255, 255, 255, 0.96);
1192  border-radius: 100px;
1193
1194  box-shadow: 0 14px 38px rgba(0, 20, 35, 0.32);
1195}
1196
1197.uttop-hero__ico {
1198  flex: 0 0 23px;
1199
1200  width: 23px;
1201  height: 23px;
1202
1203  fill: none;
1204  stroke: #7a879a;
1205  stroke-width: 2;
1206  stroke-linecap: round;
1207}
1208
1209.uttop-hero__input {
1210  flex: 1 1 auto;
1211
1212  min-width: 0;
1213  padding: 15px 4px;
1214
1215  border: 0;
1216  color: var(--uh-navy);
1217  background: none;
1218
1219  font-family: inherit;
1220  font-size: 1.12rem;
1221}
1222
1223.uttop-hero__input::placeholder {
1224  color: #93a0b0;
1225}
1226
1227.uttop-hero__input:focus {
1228  outline: none;
1229}
1230
1231.uttop-hero__go {
1232  display: inline-flex;
1233  align-items: center;
1234  gap: 9px;
1235  flex: 0 0 auto;
1236
1237  padding: 15px 30px;
1238
1239  border: 0;
1240  border-radius: 100px;
1241
1242  color: #fff;
1243  background: var(--uh-indigo);
1244
1245  font-family: inherit;
1246  font-size: 1.05rem;
1247  font-weight: 700;
1248
1249  cursor: pointer;
1250
1251  transition:
1252    background 0.2s,
1253    transform 0.2s;
1254}
1255
1256.uttop-hero__go svg {
1257  width: 19px;
1258  height: 19px;
1259
1260  fill: none;
1261  stroke: #fff;
1262  stroke-width: 2.2;
1263  stroke-linecap: round;
1264  stroke-linejoin: round;
1265}
1266
1267.uttop-hero__go:hover {
1268  background: #4657b8;
1269  transform: translateX(2px);
1270}
1271
1272.uttop-hero__field:focus-within {
1273  box-shadow:
1274    0 0 0 3px rgba(88, 109, 221, 0.45),
1275    0 14px 38px rgba(0, 20, 35, 0.32);
1276}
1277
1278/* --- Quick links --- */
1279
1280.uttop-hero__quick {
1281  margin: 36px 0 0;
1282}
1283
1284.uttop-hero__quick ul {
1285  display: flex;
1286  flex-wrap: wrap;
1287  gap: 13px;
1288
1289  margin: 0;
1290  padding: 0;
1291
1292  list-style: none;
1293}
1294
1295.uttop-hero__quick a {
1296  display: inline-block;
1297
1298  padding: 12px 26px;
1299
1300  border: 1px solid rgba(255, 255, 255, 0.36);
1301  border-radius: 100px;
1302
1303  color: #fff !important;
1304  background: rgba(255, 255, 255, 0.12);
1305
1306  font-size: 1.03rem;
1307  font-weight: 600;
1308  text-decoration: none !important;
1309
1310  backdrop-filter: blur(3px);
1311
1312  transition:
1313    background 0.2s,
1314    border-color 0.2s,
1315    transform 0.2s;
1316}
1317
1318.uttop-hero__quick a:hover {
1319  border-color: var(--uh-green);
1320  background: var(--uh-green);
1321
1322  transform: translateY(-2px);
1323}
1324
1325/* --- ENIT and IUT cards --- */
1326
1327.uttop-hero__schools {
1328  display: grid;
1329  grid-template-columns: repeat(auto-fit, minmax(310px, 1fr));
1330  gap: 24px;
1331
1332  max-width: 880px;
1333  margin: 56px 0 0;
1334}
1335
1336.uttop-hero__school {
1337  display: block;
1338
1339  padding: 32px;
1340
1341  border: 1px solid rgba(255, 255, 255, 0.24);
1342  border-radius: 16px;
1343
1344  background: rgba(0, 50, 80, 0.42);
1345
1346  text-decoration: none !important;
1347
1348  backdrop-filter: blur(8px);
1349
1350  transition:
1351    background 0.25s,
1352    border-color 0.25s,
1353    transform 0.25s;
1354}
1355
1356.uttop-hero__school-tag {
1357  display: block;
1358
1359  margin-bottom: 8px;
1360
1361  color: var(--uh-mint);
1362
1363  font-size: 0.84rem;
1364  font-weight: 700;
1365  letter-spacing: 0.1em;
1366  text-transform: uppercase;
1367}
1368
1369.uttop-hero__school-name {
1370  display: block;
1371
1372  margin-bottom: 14px;
1373
1374  color: #fff;
1375
1376  font-size: 1.75rem;
1377  font-weight: 800;
1378}
1379
1380.uttop-hero__school-go {
1381  display: block;
1382
1383  color: rgba(255, 255, 255, 0.88);
1384
1385  font-size: 1.02rem;
1386  font-weight: 600;
1387}
1388
1389.uttop-hero__school:hover {
1390  border-color: var(--uh-green);
1391  background: rgba(0, 80, 120, 0.62);
1392
1393  transform: translateY(-3px);
1394}
1395
1396/* ============================================================
1397   DISABLE PREVIOUS HEADER CONTENT
1398============================================================ */
1399
1400.kopa-page-header > .wrapper > .search-box,
1401.kopa-page-header #divine-wrap-row-3.profil-nav {
1402  display: none !important;
1403}
1404
1405.kopa-page-header > .wrapper:not(.clearfix):empty {
1406  display: none !important;
1407}
1408
1409.kopa-page-header.parallax {
1410  padding-bottom: 0 !important;
1411}
1412
1413.uttop-hero-host,
1414.uttop-hero-host > .parallax,
1415.uttop-hero-host > .parallax > .wrapper,
1416.uttop-hero-host .widget.kopa_widget_text {
1417  width: auto !important;
1418  max-width: none !important;
1419  min-height: 0 !important;
1420
1421  margin: 0 !important;
1422  padding: 0 !important;
1423
1424  border: 0 !important;
1425  background: none !important;
1426}
1427
1428.uttop-hero-host .widget-title,
1429.uttop-hero-host > .parallax > .kopa-bg {
1430  display: none !important;
1431}
1432
1433.uttop-hero-host .widget.kopa_widget_text > p:empty {
1434  display: none !important;
1435}
1436
1437/* --- Responsive layout --- */
1438
1439@media (max-width: 1024px) {
1440  #uttop-hero {
1441    min-height: auto;
1442    padding: 60px 28px 74px;
1443  }
1444
1445  .uttop-hero__title {
1446    font-size: clamp(2.4rem, 5.4vw, 3.4rem);
1447  }
1448}
1449
1450@media (max-width: 768px) {
1451  #uttop-hero {
1452    padding: 48px 20px 60px;
1453  }
1454
1455  .uttop-hero__kicker {
1456    font-size: 0.84rem;
1457  }
1458
1459  .uttop-hero__title {
1460    font-size: clamp(2.1rem, 7vw, 2.8rem);
1461  }
1462
1463  .uttop-hero__lead {
1464    font-size: 1.1rem;
1465  }
1466
1467  .uttop-hero__search {
1468    margin-top: 38px;
1469  }
1470
1471  .uttop-hero__quick {
1472    margin-top: 30px;
1473  }
1474
1475  .uttop-hero__quick a {
1476    padding: 11px 22px;
1477    font-size: 0.96rem;
1478  }
1479
1480  .uttop-hero__schools {
1481    grid-template-columns: 1fr;
1482    gap: 16px;
1483
1484    margin-top: 42px;
1485  }
1486
1487  .uttop-hero__school {
1488    padding: 26px 24px;
1489  }
1490
1491  .uttop-hero__school-name {
1492    font-size: 1.5rem;
1493  }
1494
1495  .uttop-hero__field {
1496    flex-wrap: wrap;
1497    gap: 8px;
1498
1499    padding: 12px;
1500
1501    border-radius: 18px;
1502  }
1503
1504  .uttop-hero__input {
1505    flex: 1 1 100%;
1506
1507    padding: 10px 6px;
1508
1509    font-size: 1.05rem;
1510  }
1511
1512  .uttop-hero__go {
1513    flex: 1 1 100%;
1514    justify-content: center;
1515  }
1516
1517  .uttop-hero__ico {
1518    display: none;
1519  }
1520}
1521
1522/*
1523 * Wide but short screens: spacing is reduced
1524 * without reducing text readability.
1525 */
1526@media (max-height: 860px) and (min-width: 1025px) {
1527  #uttop-hero {
1528    min-height: auto;
1529    padding: 56px 40px 68px;
1530  }
1531
1532  .uttop-hero__title {
1533    font-size: clamp(2.4rem, 4.6vw, 3.5rem);
1534  }
1535
1536  .uttop-hero__search {
1537    margin-top: 36px;
1538  }
1539
1540  .uttop-hero__quick {
1541    margin-top: 28px;
1542  }
1543
1544  .uttop-hero__schools {
1545    margin-top: 40px;
1546  }
1547
1548  .uttop-hero__school {
1549    padding: 26px 28px;
1550  }
1551}
1552
1553@media (prefers-reduced-motion: reduce) {
1554  #uttop-hero *,
1555  .kopa-page-header.parallax * {
1556    transition: none !important;
1557  }
1558}
1559</style>
1560
1561<script>
1562(function () {
1563  "use strict";
1564
1565  var hero = document.getElementById("uttop-hero");
1566
1567  if (!hero || hero.dataset.uhReady === "1") {
1568    return;
1569  }
1570
1571  hero.dataset.uhReady = "1";
1572
1573  var host = hero.closest(".ametys-cms-content");
1574
1575  if (host) {
1576    host.classList.add("uttop-hero-host");
1577  }
1578
1579  var header = document.getElementById("parallax-header");
1580  var sticky = document.getElementById("myHeader");
1581
1582  if (
1583    header &&
1584    sticky &&
1585    sticky.parentNode === header
1586  ) {
1587    sticky.insertAdjacentElement("afterend", hero);
1588  }
1589
1590  if (host) {
1591    var shell = host.querySelector(
1592      ".widget.kopa_widget_text"
1593    );
1594
1595    if (
1596      shell &&
1597      !shell.querySelector("#uttop-hero")
1598    ) {
1599      if (
1600        shell.textContent.replace(/\s/g, "") === ""
1601      ) {
1602        host.style.display = "none";
1603      }
1604    }
1605  }
1606}());
1607</script>
1607</p></div></div></div></div></div><div data-ametys-zone-level="1" id="ametys-cms-zone-default-item-N1023F" class="last"><div class="ametys-cms-content article view-home"><div style="background-image:url(&#039;&#039;)" class="parallax clearfix parallax-1"><div class="kopa-bg"><!--empty--></div><div class="wrapper"><div class="widget kopa_widget_text"><h1 class="widget-title">International events</h1><p><section id="uttop-news" aria-label="UTTOP international events">
1608  <div class="uttop-news__container">
1609
1610    <div class="uttop-news__header">
1611      <!-- The widget's official title will be moved here -->
1612
1613      <a
1614        class="uttop-news__all"
1615        href="https://www.uttop.fr/en/international/international-events.html"
1616      >
1617        All international events →
1618      </a>
1619    </div>
1620
1621    <div id="uttop-news-result">
1622      <div class="uttop-news__message">
1623        Loading international events…
1624      </div>
1625    </div>
1626
1627  </div>
1628</section>
1629
1630<style>
1631:root {
1632  --uttop-news-blue: #073b66;
1633  --uttop-news-green: #129a7e;
1634  --uttop-news-white: #ffffff;
1635  --uttop-news-overlap: 26px;
1636}
1637
1638/* =====================================================
1639   CMS WRAPPER
1640===================================================== */
1641
1642.widget.kopa_widget_text.uttop-news-widget {
1643  position: relative !important;
1644  z-index: 2 !important;
1645
1646  margin: 0 !important;
1647  padding: 0 !important;
1648
1649  border: 0 !important;
1650  outline: 0 !important;
1651
1652  background: var(--uttop-news-blue) !important;
1653  background-color: var(--uttop-news-blue) !important;
1654  background-image: none !important;
1655
1656  box-shadow: none !important;
1657}
1658
1659.widget.kopa_widget_text.uttop-news-widget > p {
1660  display: none !important;
1661
1662  width: 0 !important;
1663  height: 0 !important;
1664
1665  margin: 0 !important;
1666  padding: 0 !important;
1667}
1668
1669/* =====================================================
1670   LOCAL RESET
1671===================================================== */
1672
1673#uttop-news,
1674#uttop-news *,
1675#uttop-news *::before,
1676#uttop-news *::after {
1677  box-sizing: border-box !important;
1678}
1679
1680/* =====================================================
1681   FULL-WIDTH BLUE SECTION
1682===================================================== */
1683
1684#uttop-news {
1685  position: relative !important;
1686  z-index: 2 !important;
1687
1688  display: block !important;
1689
1690  width: 100vw !important;
1691  max-width: none !important;
1692
1693  margin: 0 calc(50% - 50vw) !important;
1694  padding: 34px 0 40px !important;
1695
1696  border: 0 !important;
1697  outline: 0 !important;
1698
1699  color: var(--uttop-news-white) !important;
1700
1701  background: var(--uttop-news-blue) !important;
1702  background-color: var(--uttop-news-blue) !important;
1703  background-image: none !important;
1704
1705  box-shadow: none !important;
1706  overflow: visible !important;
1707}
1708
1709/* Only covers the residual strip above the section */
1710#uttop-news::before {
1711  position: absolute !important;
1712  z-index: -1 !important;
1713
1714  top: calc(-1 * var(--uttop-news-overlap)) !important;
1715  right: 0 !important;
1716  left: 0 !important;
1717
1718  display: block !important;
1719
1720  width: 100% !important;
1721  height: var(--uttop-news-overlap) !important;
1722
1723  margin: 0 !important;
1724  padding: 0 !important;
1725
1726  border: 0 !important;
1727
1728  background: var(--uttop-news-blue) !important;
1729  background-color: var(--uttop-news-blue) !important;
1730  background-image: none !important;
1731
1732  content: "" !important;
1733  pointer-events: none !important;
1734}
1735
1736#uttop-news::after {
1737  display: none !important;
1738  content: none !important;
1739}
1740
1741/* =====================================================
1742   CONTAINER
1743===================================================== */
1744
1745#uttop-news .uttop-news__container {
1746  position: relative !important;
1747  z-index: 1 !important;
1748
1749  width: calc(100% - 40px) !important;
1750  max-width: 1120px !important;
1751
1752  margin: 0 auto !important;
1753  padding: 0 !important;
1754
1755  border: 0 !important;
1756  background: transparent !important;
1757}
1758
1759/* =====================================================
1760   HEADER
1761===================================================== */
1762
1763.uttop-news__header {
1764  display: flex !important;
1765  align-items: center !important;
1766  justify-content: space-between !important;
1767  gap: 20px !important;
1768
1769  margin: 0 0 22px !important;
1770  padding: 0 !important;
1771
1772  border: 0 !important;
1773  background: transparent !important;
1774}
1775
1776#uttop-news .widget-title {
1777  position: static !important;
1778
1779  display: block !important;
1780
1781  width: auto !important;
1782
1783  margin: 0 !important;
1784  padding: 0 !important;
1785
1786  border: 0 !important;
1787
1788  color: var(--uttop-news-white) !important;
1789  background: transparent !important;
1790
1791  font-family: inherit !important;
1792  font-size: 25px !important;
1793  font-weight: 800 !important;
1794  line-height: 1.25 !important;
1795  text-transform: none !important;
1796
1797  box-shadow: none !important;
1798}
1799
1800#uttop-news .widget-title::before {
1801  position: relative !important;
1802  top: -0.28em !important;
1803
1804  display: inline-block !important;
1805
1806  width: 9px !important;
1807  height: 9px !important;
1808
1809  margin-right: 12px !important;
1810
1811  border-radius: 50% !important;
1812  background: var(--uttop-news-green) !important;
1813
1814  vertical-align: baseline !important;
1815
1816  content: "" !important;
1817}
1818
1819#uttop-news .widget-title::after {
1820  display: none !important;
1821  content: none !important;
1822}
1823
1824/* =====================================================
1825   ALL EVENTS BUTTON
1826===================================================== */
1827
1828.uttop-news__all {
1829  flex: 0 0 auto !important;
1830
1831  display: inline-block !important;
1832
1833  padding: 9px 15px !important;
1834
1835  border: 1px solid rgba(255, 255, 255, 0.65) !important;
1836  border-radius: 30px !important;
1837
1838  color: var(--uttop-news-white) !important;
1839  background: var(--uttop-news-blue) !important;
1840
1841  font-size: 11px !important;
1842  font-weight: 700 !important;
1843  line-height: 1.2 !important;
1844  text-decoration: none !important;
1845
1846  transition:
1847    color 0.2s ease,
1848    background-color 0.2s ease !important;
1849}
1850
1851.uttop-news__all:hover,
1852.uttop-news__all:focus {
1853  color: var(--uttop-news-blue) !important;
1854  background: var(--uttop-news-white) !important;
1855}
1856
1857/* =====================================================
1858   GRID
1859===================================================== */
1860
1861#uttop-news-result {
1862  display: grid !important;
1863  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
1864  gap: 16px !important;
1865
1866  width: 100% !important;
1867  min-height: 80px !important;
1868
1869  margin: 0 !important;
1870  padding: 0 !important;
1871
1872  background: transparent !important;
1873}
1874
1875/* =====================================================
1876   CARDS
1877===================================================== */
1878
1879.uttop-news__card {
1880  display: flex !important;
1881  flex-direction: column !important;
1882
1883  min-width: 0 !important;
1884
1885  margin: 0 !important;
1886  padding: 0 !important;
1887
1888  overflow: hidden !important;
1889
1890  border: 1px solid rgba(255, 255, 255, 0.24) !important;
1891  border-radius: 10px !important;
1892
1893  background: var(--uttop-news-blue) !important;
1894  background-color: var(--uttop-news-blue) !important;
1895  background-image: none !important;
1896
1897  box-shadow: 0 5px 14px rgba(0, 20, 45, 0.18) !important;
1898
1899  transition:
1900    transform 0.2s ease,
1901    box-shadow 0.2s ease !important;
1902}
1903
1904.uttop-news__card:hover {
1905  transform: translateY(-3px) !important;
1906  box-shadow: 0 9px 19px rgba(0, 20, 45, 0.24) !important;
1907}
1908
1909/* =====================================================
1910   IMAGES
1911===================================================== */
1912
1913.uttop-news__image-link {
1914  display: block !important;
1915
1916  width: 100% !important;
1917  aspect-ratio: 16 / 9 !important;
1918
1919  margin: 0 !important;
1920  padding: 0 !important;
1921
1922  overflow: hidden !important;
1923
1924  color: inherit !important;
1925  background: var(--uttop-news-blue) !important;
1926  text-decoration: none !important;
1927}
1928
1929.uttop-news__image-zone {
1930  display: flex !important;
1931  align-items: center !important;
1932  justify-content: center !important;
1933
1934  width: 100% !important;
1935  height: 100% !important;
1936
1937  overflow: hidden !important;
1938
1939  background: var(--uttop-news-blue) !important;
1940}
1941
1942.uttop-news__image {
1943  display: block !important;
1944
1945  width: 100% !important;
1946  height: 100% !important;
1947
1948  margin: 0 !important;
1949  padding: 0 !important;
1950
1951  border: 0 !important;
1952
1953  object-fit: cover !important;
1954  object-position: center 20% !important;
1955
1956  transition: transform 0.3s ease !important;
1957}
1958
1959.uttop-news__card:hover .uttop-news__image {
1960  transform: scale(1.035) !important;
1961}
1962
1963.uttop-news__image-zone--empty::before {
1964  color: rgba(255, 255, 255, 0.2) !important;
1965
1966  font-size: 25px !important;
1967  font-weight: 900 !important;
1968  letter-spacing: 4px !important;
1969
1970  content: "UTTOP" !important;
1971}
1972
1973/* =====================================================
1974   CARD CONTENT
1975===================================================== */
1976
1977.uttop-news__content {
1978  display: flex !important;
1979  flex: 1 1 auto !important;
1980  flex-direction: column !important;
1981
1982  min-height: 115px !important;
1983  padding: 14px !important;
1984
1985  background: var(--uttop-news-blue) !important;
1986  background-color: var(--uttop-news-blue) !important;
1987  background-image: none !important;
1988}
1989
1990.uttop-news__title {
1991  display: -webkit-box !important;
1992
1993  margin: 0 0 12px !important;
1994  padding: 0 !important;
1995
1996  overflow: hidden !important;
1997
1998  color: var(--uttop-news-white) !important;
1999
2000  font-size: 14px !important;
2001  font-weight: 800 !important;
2002  line-height: 1.35 !important;
2003
2004  -webkit-box-orient: vertical !important;
2005  -webkit-line-clamp: 3 !important;
2006}
2007
2008.uttop-news__title a {
2009  color: inherit !important;
2010  text-decoration: none !important;
2011}
2012
2013.uttop-news__read {
2014  display: inline-block !important;
2015
2016  margin-top: auto !important;
2017
2018  color: var(--uttop-news-white) !important;
2019
2020  font-size: 10px !important;
2021  font-weight: 800 !important;
2022  text-decoration: none !important;
2023}
2024
2025.uttop-news__read:hover,
2026.uttop-news__title a:hover {
2027  text-decoration: underline !important;
2028}
2029
2030/* =====================================================
2031   LOADING / ERROR MESSAGE
2032===================================================== */
2033
2034.uttop-news__message {
2035  grid-column: 1 / -1 !important;
2036
2037  padding: 24px 18px !important;
2038
2039  border: 1px solid rgba(255, 255, 255, 0.28) !important;
2040  border-radius: 10px !important;
2041
2042  color: var(--uttop-news-white) !important;
2043  background: var(--uttop-news-blue) !important;
2044
2045  text-align: center !important;
2046}
2047
2048.uttop-news__message a {
2049  display: inline-block !important;
2050
2051  margin-top: 10px !important;
2052
2053  color: var(--uttop-news-white) !important;
2054  font-weight: 800 !important;
2055}
2056
2057/* =====================================================
2058   RESPONSIVE
2059===================================================== */
2060
2061@media (max-width: 850px) {
2062  #uttop-news-result {
2063    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
2064  }
2065}
2066
2067@media (max-width: 560px) {
2068  #uttop-news {
2069    padding: 30px 0 34px !important;
2070  }
2071
2072  #uttop-news .uttop-news__container {
2073    width: calc(100% - 24px) !important;
2074  }
2075
2076  .uttop-news__header {
2077    display: block !important;
2078  }
2079
2080  .uttop-news__all {
2081    margin-top: 14px !important;
2082  }
2083
2084  #uttop-news-result {
2085    grid-template-columns: 1fr !important;
2086  }
2087}
2088</style>
2089
2090<script>
2091(function () {
2092  "use strict";
2093
2094  var section = document.getElementById("uttop-news");
2095  var result = document.getElementById("uttop-news-result");
2096
2097  if (!section || !result) {
2098    return;
2099  }
2100
2101  /* ===================================================
2102     CONFIGURATION
2103  =================================================== */
2104
2105  var NEWS_PAGE_URL =
2106    "https://www.uttop.fr/en/international/international-events.html";
2107
2108  var NEWS_DIRECTORY_URL =
2109    "https://www.uttop.fr/en/international/international-events/";
2110
2111  var ARTICLE_LIMIT = 6;
2112
2113  /*
2114   * New cache key to invalidate the previous
2115   * incorrectly ordered version.
2116   */
2117  var CACHE_KEY =
2118    "uttop-international-events-prod-v3";
2119
2120  var CACHE_DURATION = 15 * 60 * 1000;
2121
2122  /* ===================================================
2123     OFFICIAL WIDGET TITLE
2124  =================================================== */
2125
2126  var widget = section.closest(
2127    ".widget.kopa_widget_text"
2128  );
2129
2130  var header = section.querySelector(
2131    ".uttop-news__header"
2132  );
2133
2134  if (widget) {
2135    widget.classList.add("uttop-news-widget");
2136
2137    var children = widget.children;
2138    var officialTitle = null;
2139    var childIndex;
2140
2141    for (
2142      childIndex = 0;
2143      childIndex < children.length;
2144      childIndex += 1
2145    ) {
2146      if (
2147        children[childIndex].classList.contains(
2148          "widget-title"
2149        )
2150      ) {
2151        officialTitle = children[childIndex];
2152        break;
2153      }
2154    }
2155
2156    if (officialTitle && header) {
2157      officialTitle.textContent =
2158        "Latest international events";
2159
2160      header.insertBefore(
2161        officialTitle,
2162        header.firstChild
2163      );
2164    }
2165  }
2166
2167  /* ===================================================
2168     UTILITIES
2169  =================================================== */
2170
2171  function clean(value) {
2172    return String(value || "")
2173      .replace(/<[^>]*>/g, " ")
2174      .replace(/&nbsp;|&#160;/gi, " ")
2175      .replace(/&/gi, "&")
2176      .replace(/"/gi, '"')
2177      .replace(/'|'/gi, "'")
2178      .replace(/\u00a0/g, " ")
2179      .replace(/\s+/g, " ")
2180      .trim();
2181  }
2182
2183  function absoluteUrl(value, baseUrl) {
2184    if (!value) {
2185      return "";
2186    }
2187
2188    try {
2189      return new URL(value, baseUrl).href;
2190    } catch (error) {
2191      return "";
2192    }
2193  }
2194
2195  function normalizeArticleUrl(value) {
2196    var url = absoluteUrl(
2197      value,
2198      NEWS_PAGE_URL
2199    );
2200
2201    if (!url) {
2202      return "";
2203    }
2204
2205    url = url.split("#")[0].split("?")[0];
2206
2207    url = url.replace(
2208      /^http:\/\//i,
2209      "https://"
2210    );
2211
2212    url = url.replace(
2213      /^https:\/\/uttop\.fr\//i,
2214      "https://www.uttop.fr/"
2215    );
2216
2217    if (
2218      url === NEWS_PAGE_URL ||
2219      url.indexOf(NEWS_DIRECTORY_URL) !== 0 ||
2220      !/\.html$/i.test(url)
2221    ) {
2222      return "";
2223    }
2224
2225    return url;
2226  }
2227
2228  function getMetaContent(page, selectors) {
2229    var element = page.querySelector(selectors);
2230
2231    if (!element) {
2232      return "";
2233    }
2234
2235    return clean(
2236      element.getAttribute("content") ||
2237      element.getAttribute("datetime") ||
2238      element.textContent
2239    );
2240  }
2241
2242  /* ===================================================
2243     DATE EXTRACTION
2244     Used for sorting only — never displayed.
2245  =================================================== */
2246
2247  var MONTHS = {
2248    january: 0,
2249    february: 1,
2250    march: 2,
2251    april: 3,
2252    may: 4,
2253    june: 5,
2254    july: 6,
2255    august: 7,
2256    september: 8,
2257    october: 9,
2258    november: 10,
2259    december: 11
2260  };
2261
2262  function createTimestamp(year, month, day) {
2263    var date = new Date(
2264      Number(year),
2265      Number(month),
2266      Number(day)
2267    );
2268
2269    return isNaN(date.getTime())
2270      ? 0
2271      : date.getTime();
2272  }
2273
2274  function parseEnglishDate(value) {
2275    var text = clean(value).toLowerCase();
2276    var match;
2277    var nativeTimestamp;
2278
2279    if (!text) {
2280      return 0;
2281    }
2282
2283    /*
2284     * ISO:
2285     * 2026-08-19
2286     * 2026/08/19
2287     */
2288    match = text.match(
2289      /\b(\d{4})[-\/](\d{1,2})[-\/](\d{1,2})\b/
2290    );
2291
2292    if (match) {
2293      return createTimestamp(
2294        match[1],
2295        Number(match[2]) - 1,
2296        match[3]
2297      );
2298    }
2299
2300    /*
2301     * February 16, 2026
2302     * February 16th, 2026
2303     */
2304    match = text.match(
2305      /\b(january|february|march|april|may|june|july|august|september|october|november|december)\s+(\d{1,2})(?:st|nd|rd|th)?\s*,?\s*(\d{4})\b/i
2306    );
2307
2308    if (match) {
2309      return createTimestamp(
2310        match[3],
2311        MONTHS[match[1].toLowerCase()],
2312        match[2]
2313      );
2314    }
2315
2316    /*
2317     * 16 February 2026
2318     * 16th February 2026
2319     */
2320    match = text.match(
2321      /\b(\d{1,2})(?:st|nd|rd|th)?\s+(january|february|march|april|may|june|july|august|september|october|november|december)\s+(\d{4})\b/i
2322    );
2323
2324    if (match) {
2325      return createTimestamp(
2326        match[3],
2327        MONTHS[match[2].toLowerCase()],
2328        match[1]
2329      );
2330    }
2331
2332    nativeTimestamp = Date.parse(text);
2333
2334    return isNaN(nativeTimestamp)
2335      ? 0
2336      : nativeTimestamp;
2337  }
2338
2339  function findDateInJsonLd(page) {
2340    var scripts = page.querySelectorAll(
2341      'script[type="application/ld+json"]'
2342    );
2343
2344    for (
2345      var index = 0;
2346      index < scripts.length;
2347      index += 1
2348    ) {
2349      try {
2350        var parsed = JSON.parse(
2351          scripts[index].textContent
2352        );
2353
2354        var queue = Array.isArray(parsed)
2355          ? parsed.slice()
2356          : [parsed];
2357
2358        for (
2359          var itemIndex = 0;
2360          itemIndex < queue.length;
2361          itemIndex += 1
2362        ) {
2363          var item = queue[itemIndex];
2364
2365          if (!item || typeof item !== "object") {
2366            continue;
2367          }
2368
2369          if (Array.isArray(item["@graph"])) {
2370            queue = queue.concat(item["@graph"]);
2371          }
2372
2373          /*
2374           * Publication dates are preferred because
2375           * the aim is to display the latest articles.
2376           */
2377          if (item.datePublished) {
2378            return clean(item.datePublished);
2379          }
2380
2381          if (item.dateCreated) {
2382            return clean(item.dateCreated);
2383          }
2384
2385          if (item.dateModified) {
2386            return clean(item.dateModified);
2387          }
2388
2389          if (item.startDate) {
2390            return clean(item.startDate);
2391          }
2392        }
2393      } catch (error) {
2394        /* Invalid JSON-LD: continue searching */
2395      }
2396    }
2397
2398    return "";
2399  }
2400
2401  function getArticleTimestamp(page) {
2402    /*
2403     * Publication metadata takes priority.
2404     */
2405    var rawDate = getMetaContent(
2406      page,
2407      'meta[property="article:published_time"],' +
2408      'meta[name="datePublished"],' +
2409      'meta[name="publication_date"],' +
2410      'meta[name="DC.date"],' +
2411      'meta[name="dcterms.date"],' +
2412      'meta[name="date"]'
2413    );
2414
2415    if (!rawDate) {
2416      rawDate = findDateInJsonLd(page);
2417    }
2418
2419    /*
2420     * Then try visible publication-date elements.
2421     */
2422    if (!rawDate) {
2423      var publicationElement = page.querySelector(
2424        ".publication-date," +
2425        ".content-date," +
2426        ".news-date," +
2427        ".article-date," +
2428        ".published-date," +
2429        "time[datetime]"
2430      );
2431
2432      if (publicationElement) {
2433        rawDate = clean(
2434          publicationElement.getAttribute(
2435            "datetime"
2436          ) ||
2437          publicationElement.textContent
2438        );
2439      }
2440    }
2441
2442    /*
2443     * Event date as a final structured fallback.
2444     */
2445    if (!rawDate) {
2446      rawDate = getMetaContent(
2447        page,
2448        'meta[property="event:start_time"],' +
2449        'meta[name="startDate"]'
2450      );
2451    }
2452
2453    /*
2454     * Final fallback: search inside the article.
2455     */
2456    if (!rawDate) {
2457      var content =
2458        page.querySelector(
2459          "main," +
2460          "#main-content," +
2461          "article," +
2462          ".ametys-cms-content"
2463        ) || page.body;
2464
2465      if (content) {
2466        var text = clean(content.textContent);
2467
2468        var dateMatch = text.match(
2469          /(?:january|february|march|april|may|june|july|august|september|october|november|december)\s+\d{1,2}(?:st|nd|rd|th)?\s*,?\s*\d{4}/i
2470        );
2471
2472        if (!dateMatch) {
2473          dateMatch = text.match(
2474            /\d{1,2}(?:st|nd|rd|th)?\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\s+\d{4}/i
2475          );
2476        }
2477
2478        if (dateMatch) {
2479          rawDate = dateMatch[0];
2480        }
2481      }
2482    }
2483
2484    return parseEnglishDate(rawDate);
2485  }
2486
2487  /* ===================================================
2488     ARTICLE URL EXTRACTION
2489  =================================================== */
2490
2491  function extractArticleUrls(html) {
2492    var parser = new DOMParser();
2493
2494    var page = parser.parseFromString(
2495      html,
2496      "text/html"
2497    );
2498
2499    var links = page.querySelectorAll("a[href]");
2500    var urls = [];
2501    var seen = {};
2502
2503    Array.prototype.forEach.call(
2504      links,
2505      function (link) {
2506        var url = normalizeArticleUrl(
2507          link.getAttribute("href")
2508        );
2509
2510        if (!url || seen[url]) {
2511          return;
2512        }
2513
2514        seen[url] = true;
2515
2516        urls.push({
2517          url: url,
2518          sourceIndex: urls.length
2519        });
2520      }
2521    );
2522
2523    return urls;
2524  }
2525
2526  /* ===================================================
2527     ARTICLE TITLE
2528  =================================================== */
2529
2530  function getArticleTitle(page) {
2531    var title = getMetaContent(
2532      page,
2533      'meta[property="og:title"],' +
2534      'meta[name="twitter:title"],' +
2535      'meta[name="DC.title"]'
2536    );
2537
2538    if (!title) {
2539      var heading = page.querySelector(
2540        "main h1," +
2541        "#main-content h1," +
2542        "article h1," +
2543        ".ametys-cms-content h1," +
2544        ".content-title," +
2545        "h1"
2546      );
2547
2548      title = heading
2549        ? clean(heading.textContent)
2550        : "";
2551    }
2552
2553    if (!title) {
2554      title = clean(page.title).replace(
2555        /\s*[|\-–—]\s*UTTOP.*$/i,
2556        ""
2557      );
2558    }
2559
2560    return title;
2561  }
2562
2563  /* ===================================================
2564     ARTICLE IMAGE
2565  =================================================== */
2566
2567  function getArticleImage(page, articleUrl) {
2568    var image = getMetaContent(
2569      page,
2570      'meta[property="og:image"],' +
2571      'meta[name="twitter:image"],' +
2572      'meta[name="twitter:image:src"]'
2573    );
2574
2575    if (image) {
2576      return absoluteUrl(image, articleUrl);
2577    }
2578
2579    var content =
2580      page.querySelector(
2581        "main," +
2582        "#main-content," +
2583        "article," +
2584        ".ametys-cms-content"
2585      ) || page.body;
2586
2587    if (!content) {
2588      return "";
2589    }
2590
2591    var images = content.querySelectorAll("img");
2592
2593    for (
2594      var index = 0;
2595      index < images.length;
2596      index += 1
2597    ) {
2598      var source =
2599        images[index].getAttribute("data-src") ||
2600        images[index].getAttribute("data-original") ||
2601        images[index].getAttribute("data-lazy-src") ||
2602        images[index].getAttribute("src") ||
2603        "";
2604
2605      source = absoluteUrl(
2606        source,
2607        articleUrl
2608      );
2609
2610      if (
2611        source &&
2612        !/logo|favicon|sprite|icon|pixel|loader|avatar/i.test(
2613          source
2614        )
2615      ) {
2616        return source;
2617      }
2618    }
2619
2620    return "";
2621  }
2622
2623  /* ===================================================
2624     LOAD ONE ARTICLE
2625  =================================================== */
2626
2627  function loadArticle(item) {
2628    return fetch(item.url, {
2629      credentials: "same-origin",
2630      cache: "default"
2631    })
2632      .then(function (response) {
2633        if (!response.ok) {
2634          throw new Error(
2635            "Article HTTP " + response.status
2636          );
2637        }
2638
2639        return response.text();
2640      })
2641      .then(function (html) {
2642        var parser = new DOMParser();
2643
2644        var page = parser.parseFromString(
2645          html,
2646          "text/html"
2647        );
2648
2649        return {
2650          href: item.url,
2651          title: getArticleTitle(page),
2652          image: getArticleImage(
2653            page,
2654            item.url
2655          ),
2656
2657          /*
2658           * Internal sorting value only.
2659           * It will not be displayed.
2660           */
2661          timestamp: getArticleTimestamp(page),
2662
2663          sourceIndex: item.sourceIndex
2664        };
2665      })
2666      .catch(function (error) {
2667        console.warn(
2668          "Unable to load event:",
2669          item.url,
2670          error
2671        );
2672
2673        return null;
2674      });
2675  }
2676
2677  /* ===================================================
2678     SORTING — NEWEST FIRST
2679  =================================================== */
2680
2681  function sortLatestArticles(articles) {
2682    return articles.sort(
2683      function (articleA, articleB) {
2684        if (
2685          articleA.timestamp &&
2686          articleB.timestamp
2687        ) {
2688          return (
2689            articleB.timestamp -
2690            articleA.timestamp
2691          );
2692        }
2693
2694        if (
2695          articleA.timestamp &&
2696          !articleB.timestamp
2697        ) {
2698          return -1;
2699        }
2700
2701        if (
2702          !articleA.timestamp &&
2703          articleB.timestamp
2704        ) {
2705          return 1;
2706        }
2707
2708        /*
2709         * Preserve the CMS order when neither
2710         * article contains a usable date.
2711         */
2712        return (
2713          articleA.sourceIndex -
2714          articleB.sourceIndex
2715        );
2716      }
2717    );
2718  }
2719
2720  /* ===================================================
2721     CREATE A CARD
2722  =================================================== */
2723
2724  function createCard(article) {
2725    var card = document.createElement("article");
2726    card.className = "uttop-news__card";
2727
2728    var imageLink = document.createElement("a");
2729    imageLink.className =
2730      "uttop-news__image-link";
2731    imageLink.href = article.href;
2732
2733    var imageZone = document.createElement("div");
2734    imageZone.className =
2735      "uttop-news__image-zone";
2736
2737    if (article.image) {
2738      var image = document.createElement("img");
2739
2740      image.className = "uttop-news__image";
2741      image.src = article.image;
2742      image.alt = article.title;
2743      image.loading = "lazy";
2744      image.decoding = "async";
2745
2746      image.onerror = function () {
2747        image.remove();
2748
2749        imageZone.classList.add(
2750          "uttop-news__image-zone--empty"
2751        );
2752      };
2753
2754      imageZone.appendChild(image);
2755    } else {
2756      imageZone.classList.add(
2757        "uttop-news__image-zone--empty"
2758      );
2759    }
2760
2761    imageLink.appendChild(imageZone);
2762
2763    var content = document.createElement("div");
2764    content.className = "uttop-news__content";
2765
2766    var title = document.createElement("h3");
2767    title.className = "uttop-news__title";
2768
2769    var titleLink = document.createElement("a");
2770    titleLink.href = article.href;
2771    titleLink.textContent = article.title;
2772
2773    title.appendChild(titleLink);
2774
2775    var read = document.createElement("a");
2776    read.className = "uttop-news__read";
2777    read.href = article.href;
2778    read.textContent = "View event →";
2779
2780    content.appendChild(title);
2781    content.appendChild(read);
2782
2783    card.appendChild(imageLink);
2784    card.appendChild(content);
2785
2786    return card;
2787  }
2788
2789  function displayArticles(articles) {
2790    result.innerHTML = "";
2791
2792    articles.forEach(function (article) {
2793      result.appendChild(
2794        createCard(article)
2795      );
2796    });
2797  }
2798
2799  /* ===================================================
2800     SESSION CACHE
2801  =================================================== */
2802
2803  function getCachedArticles() {
2804    try {
2805      var cached = JSON.parse(
2806        sessionStorage.getItem(CACHE_KEY)
2807      );
2808
2809      if (
2810        !cached ||
2811        !cached.date ||
2812        !Array.isArray(cached.articles)
2813      ) {
2814        return null;
2815      }
2816
2817      if (
2818        Date.now() - cached.date >
2819        CACHE_DURATION
2820      ) {
2821        sessionStorage.removeItem(CACHE_KEY);
2822        return null;
2823      }
2824
2825      return cached.articles;
2826    } catch (error) {
2827      return null;
2828    }
2829  }
2830
2831  function saveCachedArticles(articles) {
2832    try {
2833      sessionStorage.setItem(
2834        CACHE_KEY,
2835        JSON.stringify({
2836          date: Date.now(),
2837          articles: articles
2838        })
2839      );
2840    } catch (error) {
2841      /* Cache unavailable: no impact */
2842    }
2843  }
2844
2845  /* ===================================================
2846     INITIALISATION
2847  =================================================== */
2848
2849  var cachedArticles = getCachedArticles();
2850
2851  if (
2852    cachedArticles &&
2853    cachedArticles.length
2854  ) {
2855    cachedArticles =
2856      sortLatestArticles(cachedArticles)
2857        .slice(0, ARTICLE_LIMIT);
2858
2859    displayArticles(cachedArticles);
2860    return;
2861  }
2862
2863  fetch(NEWS_PAGE_URL, {
2864    credentials: "same-origin",
2865    cache: "no-store"
2866  })
2867    .then(function (response) {
2868      if (!response.ok) {
2869        throw new Error(
2870          "International events page HTTP " +
2871          response.status
2872        );
2873      }
2874
2875      return response.text();
2876    })
2877    .then(function (html) {
2878      var urls = extractArticleUrls(html);
2879
2880      if (!urls.length) {
2881        throw new Error(
2882          "No event links found"
2883        );
2884      }
2885
2886      return Promise.all(
2887        urls.map(loadArticle)
2888      );
2889    })
2890    .then(function (articles) {
2891      articles = articles.filter(
2892        function (article) {
2893          return (
2894            article &&
2895            article.href &&
2896            article.title
2897          );
2898        }
2899      );
2900
2901      articles = sortLatestArticles(articles)
2902        .slice(0, ARTICLE_LIMIT);
2903
2904      if (!articles.length) {
2905        throw new Error(
2906          "No usable international events found"
2907        );
2908      }
2909
2910      saveCachedArticles(articles);
2911      displayArticles(articles);
2912    })
2913    .catch(function (error) {
2914      console.error(
2915        "International events:",
2916        error
2917      );
2918
2919      result.innerHTML =
2920        '<div class="uttop-news__message">' +
2921          "Unable to load international events.<br>" +
2922          '<a href="' + NEWS_PAGE_URL + '">' +
2923            "View all international events →" +
2924          "</a>" +
2925        "</div>";
2926    });
2927})();
2928</script>
2928</p></div></div></div></div></div></div></div><div class="wrapper"><div class="area-inner home-central-part"><div><div data-ametys-zone="agenda" id="ametys-cms-zone-agenda"><div data-ametys-zone-level="2" id="ametys-cms-zone-agenda-item-N1039C" class="first "></div><div data-ametys-zone-level="2" id="ametys-cms-zone-agenda-item-N103CE" class="even last"><div class="ametys-cms-content article view-main wrapper"><h2 class="art-postheader"><span class="content-title summary">Explore UTTOP</span></h2><p><section id="uttop-links" aria-label="Explore UTTOP">
2929  <div class="uttop-links__container">
2930
2931    <h2 class="uttop-links__title">
2932      <span>Explore UTTOP</span>
2933    </h2>
2934
2935    <div id="uttop-links-grid" class="uttop-links__grid"></div>
2936
2937  </div>
2938</section>
2939
2940<style>
2941/* =====================================================
2942   VARIABLES
2943===================================================== */
2944
2945#uttop-links {
2946  --ul-blue: #005078;
2947  --ul-blue-deep: #003a58;
2948  --ul-green: #129a7e;
2949  --ul-white: #ffffff;
2950  --ul-grey: #f5f7f9;
2951  --ul-border: #e3e9ef;
2952  --ul-text: #16283a;
2953  --ul-overlap: 40px;
2954}
2955
2956/* =====================================================
2957   CENTRAL AREA RESET
2958===================================================== */
2959
2960.uttop-home-clean,
2961.uttop-home-clean > .area-inner.home-central-part {
2962  background: #ffffff !important;
2963  background-color: #ffffff !important;
2964  background-image: none !important;
2965
2966  border: 0 !important;
2967  box-shadow: none !important;
2968}
2969
2970.uttop-home-clean .alaune-title,
2971.uttop-home-clean .zone-alaune,
2972.uttop-home-clean [data-ametys-zone="alaune"] {
2973  display: none !important;
2974}
2975
2976.uttop-home-clean .indispensables-title,
2977.uttop-home-clean .indispensables_list {
2978  display: none !important;
2979}
2980
2981/* =====================================================
2982   HOST ARTICLE RESET
2983===================================================== */
2984
2985.uttop-links-host {
2986  width: auto !important;
2987  max-width: none !important;
2988
2989  margin: 0 !important;
2990  padding: 0 !important;
2991
2992  border: 0 !important;
2993  background: transparent !important;
2994  box-shadow: none !important;
2995}
2996
2997.uttop-links-host > .art-postheader,
2998.uttop-links-host > h2.art-postheader {
2999  display: none !important;
3000}
3001
3002.uttop-links-host > p:empty,
3003.uttop-links-host > .content-richtext-end {
3004  display: none !important;
3005  margin: 0 !important;
3006}
3007
3008.uttop-links-zoneitem {
3009  width: auto !important;
3010  max-width: none !important;
3011
3012  margin: 0 !important;
3013  padding: 0 !important;
3014
3015  border: 0 !important;
3016  background: none !important;
3017}
3018
3019/* =====================================================
3020   LOCAL RESET
3021===================================================== */
3022
3023#uttop-links,
3024#uttop-links *,
3025#uttop-links *::before,
3026#uttop-links *::after {
3027  box-sizing: border-box !important;
3028}
3029
3030/* =====================================================
3031   FULL-WIDTH WHITE SECTION
3032===================================================== */
3033
3034#uttop-links {
3035  position: relative !important;
3036  z-index: 2 !important;
3037
3038  display: block !important;
3039
3040  --ul-pull-left: 0px;
3041  --ul-pull-right: 0px;
3042
3043  width: auto !important;
3044  max-width: none !important;
3045
3046  margin-top: 0 !important;
3047  margin-right: var(--ul-pull-right) !important;
3048  margin-bottom: 0 !important;
3049  margin-left: var(--ul-pull-left) !important;
3050
3051  padding: 96px 0 100px !important;
3052
3053  overflow: visible !important;
3054
3055  border: 0 !important;
3056  outline: 0 !important;
3057
3058  color: var(--ul-text) !important;
3059
3060  background: var(--ul-white) !important;
3061  background-color: var(--ul-white) !important;
3062  background-image: none !important;
3063
3064  box-shadow: none !important;
3065  font-family: inherit !important;
3066}
3067
3068/* Covers any residual strip above the section */
3069#uttop-links::before {
3070  position: absolute !important;
3071  top: calc(-1 * var(--ul-overlap)) !important;
3072  right: 0 !important;
3073  left: 0 !important;
3074  z-index: -1 !important;
3075
3076  display: block !important;
3077
3078  width: 100% !important;
3079  height: var(--ul-overlap) !important;
3080
3081  margin: 0 !important;
3082  padding: 0 !important;
3083
3084  border: 0 !important;
3085
3086  background: var(--ul-white) !important;
3087  background-color: var(--ul-white) !important;
3088  background-image: none !important;
3089
3090  content: "" !important;
3091  pointer-events: none !important;
3092}
3093
3094/* =====================================================
3095   CONTAINER
3096===================================================== */
3097
3098#uttop-links .uttop-links__container {
3099  position: relative !important;
3100  z-index: 1 !important;
3101
3102  width: 100% !important;
3103  max-width: 1340px !important;
3104
3105  margin: 0 auto !important;
3106  padding: 0 40px !important;
3107
3108  background: transparent !important;
3109}
3110
3111/* =====================================================
3112   TITLE
3113===================================================== */
3114
3115#uttop-links .uttop-links__title {
3116  display: flex !important;
3117  align-items: center !important;
3118  gap: 18px !important;
3119
3120  margin: 0 0 50px !important;
3121  padding: 0 !important;
3122
3123  border: 0 !important;
3124
3125  color: var(--ul-blue-deep) !important;
3126  background: none !important;
3127
3128  font-size: clamp(2.1rem, 3.2vw, 2.85rem) !important;
3129  font-weight: 700 !important;
3130  line-height: 1.15 !important;
3131  letter-spacing: -0.01em !important;
3132
3133  text-align: left !important;
3134  text-transform: none !important;
3135}
3136
3137#uttop-links .uttop-links__title::before {
3138  flex: 0 0 auto !important;
3139
3140  width: 15px !important;
3141  height: 15px !important;
3142
3143  border-radius: 50% !important;
3144  background: var(--ul-green) !important;
3145
3146  content: "" !important;
3147}
3148
3149#uttop-links .uttop-links__title::after {
3150  content: none !important;
3151}
3152
3153/* =====================================================
3154   GRID
3155===================================================== */
3156
3157#uttop-links .uttop-links__grid {
3158  display: grid !important;
3159  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
3160  gap: 30px !important;
3161
3162  margin: 0 !important;
3163  padding: 0 !important;
3164
3165  list-style: none !important;
3166}
3167
3168/* =====================================================
3169   CARD
3170===================================================== */
3171
3172#uttop-links .uttop-links__card {
3173  position: relative !important;
3174
3175  display: flex !important;
3176  flex-direction: column !important;
3177  align-items: center !important;
3178  justify-content: center !important;
3179  gap: 24px !important;
3180
3181  min-height: 245px !important;
3182  padding: 42px 26px !important;
3183
3184  overflow: hidden !important;
3185
3186  border: 1px solid var(--ul-border) !important;
3187  border-radius: 18px !important;
3188
3189  color: var(--ul-blue-deep) !important;
3190  background: var(--ul-grey) !important;
3191
3192  text-align: center !important;
3193  text-decoration: none !important;
3194
3195  transition:
3196    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
3197    box-shadow 0.3s ease,
3198    background-color 0.3s ease,
3199    border-color 0.3s ease !important;
3200}
3201
3202#uttop-links .uttop-links__card::after {
3203  position: absolute !important;
3204  bottom: 0 !important;
3205  left: 0 !important;
3206
3207  width: 100% !important;
3208  height: 5px !important;
3209
3210  background: var(--ul-green) !important;
3211
3212  transform: scaleX(0) !important;
3213  transform-origin: left center !important;
3214
3215  transition:
3216    transform 0.34s cubic-bezier(0.22, 1, 0.36, 1) !important;
3217
3218  content: "" !important;
3219}
3220
3221#uttop-links .uttop-links__card:hover,
3222#uttop-links .uttop-links__card:focus-visible {
3223  border-color: #cdd8e3 !important;
3224
3225  background: var(--ul-white) !important;
3226
3227  box-shadow: 0 18px 38px rgba(0, 80, 120, 0.15) !important;
3228
3229  transform: translateY(-8px) !important;
3230}
3231
3232#uttop-links .uttop-links__card:hover::after,
3233#uttop-links .uttop-links__card:focus-visible::after {
3234  transform: scaleX(1) !important;
3235}
3236
3237#uttop-links .uttop-links__card:focus-visible {
3238  outline: 3px solid var(--ul-green) !important;
3239  outline-offset: 3px !important;
3240}
3241
3242/* =====================================================
3243   ICON
3244===================================================== */
3245
3246#uttop-links .uttop-links__icon {
3247  display: flex !important;
3248  align-items: center !important;
3249  justify-content: center !important;
3250
3251  width: 92px !important;
3252  height: 92px !important;
3253
3254  border: 1px solid var(--ul-border) !important;
3255  border-radius: 50% !important;
3256
3257  background: var(--ul-white) !important;
3258
3259  transition:
3260    background-color 0.3s ease,
3261    border-color 0.3s ease,
3262    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1) !important;
3263}
3264
3265#uttop-links .uttop-links__card:hover .uttop-links__icon,
3266#uttop-links .uttop-links__card:focus-visible .uttop-links__icon {
3267  border-color: rgba(18, 154, 126, 0.25) !important;
3268  background: rgba(18, 154, 126, 0.1) !important;
3269
3270  transform: scale(1.07) !important;
3271}
3272
3273#uttop-links .uttop-links__icon svg {
3274  display: block !important;
3275
3276  width: 44px !important;
3277  height: 44px !important;
3278
3279  fill: none !important;
3280  stroke: var(--ul-blue) !important;
3281  stroke-width: 1.5 !important;
3282  stroke-linecap: round !important;
3283  stroke-linejoin: round !important;
3284
3285  transition: stroke 0.3s ease !important;
3286}
3287
3288#uttop-links .uttop-links__icon svg * {
3289  fill: none !important;
3290  stroke: inherit !important;
3291  vector-effect: non-scaling-stroke !important;
3292}
3293
3294#uttop-links .uttop-links__card:hover .uttop-links__icon svg,
3295#uttop-links .uttop-links__card:focus-visible .uttop-links__icon svg {
3296  stroke: var(--ul-green) !important;
3297}
3298
3299/* =====================================================
3300   LABEL
3301===================================================== */
3302
3303#uttop-links .uttop-links__label {
3304  margin: 0 !important;
3305
3306  color: var(--ul-blue-deep) !important;
3307
3308  font-size: 1.3rem !important;
3309  font-weight: 600 !important;
3310  line-height: 1.35 !important;
3311  letter-spacing: -0.005em !important;
3312
3313  transition: color 0.3s ease !important;
3314}
3315
3316#uttop-links .uttop-links__card:hover .uttop-links__label,
3317#uttop-links .uttop-links__card:focus-visible .uttop-links__label {
3318  color: var(--ul-green) !important;
3319}
3320
3321/* =====================================================
3322   RESPONSIVE
3323===================================================== */
3324
3325@media (max-width: 900px) {
3326  #uttop-links {
3327    padding: 68px 0 72px !important;
3328  }
3329
3330  #uttop-links .uttop-links__container {
3331    padding: 0 28px !important;
3332  }
3333
3334  #uttop-links .uttop-links__title {
3335    margin-bottom: 38px !important;
3336  }
3337
3338  #uttop-links .uttop-links__grid {
3339    gap: 24px !important;
3340  }
3341
3342  #uttop-links .uttop-links__card {
3343    min-height: 212px !important;
3344    gap: 20px !important;
3345    padding: 34px 20px !important;
3346  }
3347
3348  #uttop-links .uttop-links__icon {
3349    width: 80px !important;
3350    height: 80px !important;
3351  }
3352
3353  #uttop-links .uttop-links__icon svg {
3354    width: 39px !important;
3355    height: 39px !important;
3356  }
3357
3358  #uttop-links .uttop-links__label {
3359    font-size: 1.18rem !important;
3360  }
3361}
3362
3363@media (max-width: 720px) {
3364  #uttop-links .uttop-links__grid {
3365    grid-template-columns: 1fr !important;
3366  }
3367}
3368
3369@media (max-width: 620px) {
3370  #uttop-links {
3371    padding: 52px 0 56px !important;
3372  }
3373
3374  #uttop-links .uttop-links__container {
3375    padding: 0 20px !important;
3376  }
3377
3378  #uttop-links .uttop-links__grid {
3379    gap: 16px !important;
3380  }
3381
3382  #uttop-links .uttop-links__card {
3383    min-height: 0 !important;
3384
3385    flex-direction: row !important;
3386    justify-content: flex-start !important;
3387    gap: 20px !important;
3388
3389    padding: 24px !important;
3390
3391    border-radius: 16px !important;
3392
3393    text-align: left !important;
3394  }
3395
3396  #uttop-links .uttop-links__icon {
3397    flex: 0 0 auto !important;
3398
3399    width: 68px !important;
3400    height: 68px !important;
3401  }
3402
3403  #uttop-links .uttop-links__icon svg {
3404    width: 33px !important;
3405    height: 33px !important;
3406  }
3407
3408  #uttop-links .uttop-links__label {
3409    font-size: 1.06rem !important;
3410  }
3411}
3412
3413@media (prefers-reduced-motion: reduce) {
3414  #uttop-links .uttop-links__card,
3415  #uttop-links .uttop-links__card::after,
3416  #uttop-links .uttop-links__icon,
3417  #uttop-links .uttop-links__icon svg,
3418  #uttop-links .uttop-links__label {
3419    transition: none !important;
3420  }
3421
3422  #uttop-links .uttop-links__card:hover {
3423    transform: none !important;
3424  }
3425}
3426</style>
3427
3428<script>
3429(function () {
3430  "use strict";
3431
3432  var section = document.getElementById("uttop-links");
3433  var grid = document.getElementById("uttop-links-grid");
3434
3435  if (!section || !grid) {
3436    return;
3437  }
3438
3439  /* ===================================================
3440     ICONS
3441  =================================================== */
3442
3443  var ICONS = {
3444    discover:
3445      '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">' +
3446        '<path d="M4 11.5L12 4l8 7.5"/>' +
3447        '<path d="M6 10v10h12V10"/>' +
3448        '<path d="M10 20v-5.5h4V20"/>' +
3449      "</svg>",
3450
3451    programmes:
3452      '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">' +
3453        '<path d="M12 7C10.3 5.6 7.7 5 4 5.2v12.4c3.7-.2 6.3.4 8 1.8"/>' +
3454        '<path d="M12 7c1.7-1.4 4.3-2 8-1.8v12.4c-3.7-.2-6.3.4-8 1.8"/>' +
3455        '<path d="M12 7v12.4"/>' +
3456      "</svg>",
3457
3458    campus:
3459      '<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">' +
3460        '<circle cx="9" cy="8" r="3"/>' +
3461        '<path d="M3.5 19.5c0-3 2.5-5 5.5-5s5.5 2 5.5 5"/>' +
3462        '<path d="M16 5.3a3 3 0 0 1 0 5.4"/>' +
3463        '<path d="M17.5 14.9c1.9.7 3 2.4 3 4.6"/>' +
3464      "</svg>"
3465  };
3466
3467  /* ===================================================
3468     LINKS
3469  =================================================== */
3470
3471  var LINKS = [
3472    {
3473      label: "Discover UTTOP",
3474      href: "https://www.uttop.fr/en/uttop-1/go-to-uttop.html",
3475      icon: "discover"
3476    },
3477    {
3478      label: "Explore Our Programmes",
3479      href: "https://www.uttop.fr/en/uttop-1/our-programs.html",
3480      icon: "programmes"
3481    },
3482    {
3483      label: "Experience Campus Life",
3484      href: "https://www.uttop.fr/en/uttop-1/campus-life.html",
3485      icon: "campus"
3486    }
3487  ];
3488
3489  /* ===================================================
3490     FIND THE PAGE WRAPPER
3491  =================================================== */
3492
3493  function findHomeWrapper() {
3494    var node = section.parentNode;
3495
3496    while (node && node !== document.body) {
3497      if (
3498        node.querySelector &&
3499        (
3500          node.querySelector(".indispensables_list") ||
3501          node.querySelector(".area-inner.home-central-part")
3502        )
3503      ) {
3504        return node;
3505      }
3506
3507      node = node.parentNode;
3508    }
3509
3510    var centralArea = document.querySelector(
3511      ".area-inner.home-central-part"
3512    );
3513
3514    if (centralArea) {
3515      return centralArea.parentNode || centralArea;
3516    }
3517
3518    return null;
3519  }
3520
3521  /* ===================================================
3522     CLEAN THE HOST ARTICLE
3523  =================================================== */
3524
3525  function markHost() {
3526    var article = section.closest(".ametys-cms-content");
3527
3528    if (article) {
3529      article.classList.add("uttop-links-host");
3530    }
3531
3532    var zoneItem = section.closest(
3533      "[data-ametys-zone-level]"
3534    );
3535
3536    if (zoneItem) {
3537      zoneItem.classList.add("uttop-links-zoneitem");
3538    }
3539  }
3540
3541  /* ===================================================
3542     FULL-WIDTH CALCULATION
3543  =================================================== */
3544
3545  function applyFullWidth() {
3546    section.style.setProperty(
3547      "--ul-pull-left",
3548      "0px"
3549    );
3550
3551    section.style.setProperty(
3552      "--ul-pull-right",
3553      "0px"
3554    );
3555
3556    var rect = section.getBoundingClientRect();
3557    var documentWidth =
3558      document.documentElement.clientWidth;
3559
3560    var pullLeft = -rect.left;
3561    var pullRight = -(documentWidth - rect.right);
3562
3563    section.style.setProperty(
3564      "--ul-pull-left",
3565      pullLeft + "px"
3566    );
3567
3568    section.style.setProperty(
3569      "--ul-pull-right",
3570      pullRight + "px"
3571    );
3572  }
3573
3574  /* ===================================================
3575     BUILD A CARD
3576  =================================================== */
3577
3578  function buildCard(item) {
3579    var card = document.createElement("a");
3580
3581    card.className = "uttop-links__card";
3582    card.href = item.href;
3583
3584    var icon = document.createElement("span");
3585    icon.className = "uttop-links__icon";
3586    icon.innerHTML = ICONS[item.icon];
3587
3588    var label = document.createElement("span");
3589    label.className = "uttop-links__label";
3590    label.textContent = item.label;
3591
3592    card.appendChild(icon);
3593    card.appendChild(label);
3594
3595    return card;
3596  }
3597
3598  /* ===================================================
3599     RENDER
3600  =================================================== */
3601
3602  function render() {
3603    markHost();
3604
3605    var wrapper = findHomeWrapper();
3606
3607    if (wrapper) {
3608      wrapper.classList.add("uttop-home-clean");
3609    }
3610
3611    var fragment = document.createDocumentFragment();
3612
3613    LINKS.forEach(function (item) {
3614      fragment.appendChild(buildCard(item));
3615    });
3616
3617    grid.innerHTML = "";
3618    grid.appendChild(fragment);
3619
3620    section.style.removeProperty("display");
3621
3622    applyFullWidth();
3623  }
3624
3625  /* ===================================================
3626     RESIZE HANDLING
3627  =================================================== */
3628
3629  var resizeTimer = null;
3630
3631  function onResize() {
3632    if (resizeTimer) {
3633      window.clearTimeout(resizeTimer);
3634    }
3635
3636    resizeTimer = window.setTimeout(
3637      applyFullWidth,
3638      140
3639    );
3640  }
3641
3642  window.addEventListener("resize", onResize);
3643  window.addEventListener(
3644    "orientationchange",
3645    onResize
3646  );
3647
3648  /* ===================================================
3649     INITIALISATION
3650  =================================================== */
3651
3652  render();
3653
3654  if (document.readyState === "loading") {
3655    document.addEventListener(
3656      "DOMContentLoaded",
3657      render
3658    );
3659  } else {
3660    window.setTimeout(render, 120);
3661  }
3662
3663  window.addEventListener("load", function () {
3664    window.setTimeout(applyFullWidth, 60);
3665  });
3666})();
3667</script>
3667</p><div class="content-richtext-end"><!--empty--></div></div></div></div></div><div><div class="widget "><h2 class="widget-title style1 indispensables-title">Direct access</h2><ul class="indispensables_list"><li><div class="picto"><a href="/en/uttop-1/go-to-uttop.html"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="enable-background:new 0 0 512 512;" viewBox="0 0 512 512" y="0px" x="0px" id="Capa_1" version="1.1">
3668			<path d="M498.791,161.127c-17.545-17.546-46.094-17.545-63.645,0.004c-5.398,5.403-39.863,39.896-45.128,45.166V87.426    c0-12.02-4.681-23.32-13.181-31.819L334.412,13.18C325.913,4.68,314.612,0,302.592,0H45.018c-24.813,0-45,20.187-45,45v422    c0,24.813,20.187,45,45,45h300c24.813,0,45-20.187,45-45V333.631L498.79,224.767C516.377,207.181,516.381,178.715,498.791,161.127    z M300.019,30c2.834,0,8.295-0.491,13.18,4.393l42.426,42.427c4.76,4.761,4.394,9.978,4.394,13.18h-60V30z M360.018,467    c0,8.271-6.728,15-15,15h-300c-8.271,0-15-6.729-15-15V45c0-8.271,6.729-15,15-15h225v75c0,8.284,6.716,15,15,15h75v116.323    c0,0-44.254,44.292-44.256,44.293l-21.203,21.204c-1.646,1.646-2.888,3.654-3.624,5.863l-21.214,63.64    c-1.797,5.39-0.394,11.333,3.624,15.35c4.023,4.023,9.968,5.419,15.35,3.624l63.64-21.213c2.209-0.736,4.217-1.977,5.863-3.624    l1.82-1.82V467z M326.378,312.427l21.213,21.213l-8.103,8.103l-31.819,10.606l10.606-31.82L326.378,312.427z M368.8,312.422    l-21.213-21.213c11.296-11.305,61.465-61.517,72.105-72.166l21.213,21.213L368.8,312.422z M477.573,203.558l-15.463,15.476    l-21.213-21.213l15.468-15.481c5.852-5.849,15.366-5.848,21.214,0C483.426,188.19,483.457,197.673,477.573,203.558z" />
3669			<path d="M285.018,150h-210c-8.284,0-15,6.716-15,15s6.716,15,15,15h210c8.284,0,15-6.716,15-15S293.302,150,285.018,150z" />
3670			<path d="M225.018,210h-150c-8.284,0-15,6.716-15,15s6.716,15,15,15h150c8.284,0,15-6.716,15-15S233.302,210,225.018,210z" />
3671			<path d="M225.018,270h-150c-8.284,0-15,6.716-15,15s6.716,15,15,15h150c8.284,0,15-6.716,15-15S233.302,270,225.018,270z" />
3672			<path d="M225.018,330h-150c-8.284,0-15,6.716-15,15s6.716,15,15,15h150c8.284,0,15-6.716,15-15S233.302,330,225.018,330z" />
3673			<path d="M285.018,422h-90c-8.284,0-15,6.716-15,15s6.716,15,15,15h90c8.284,0,15-6.716,15-15S293.302,422,285.018,422z" />
3674		</svg></a></div><div class="pageTitle"><a href="/en/uttop-1/go-to-uttop.html">Go to UTTOP </a></div></li><li><div class="picto"><a href="/en/uttop-1/our-programs.html"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="enable-background:new 0 0 682.7 682.7;" viewBox="0 0 682.7 682.7" y="0px" x="0px" id="svg9" version="1.1">
3675			<path d="M144.3,72.1v97.6H0v348.6c0,50.8,41.3,92.1,92.1,92.1h498.4c50.8,0,92.1-41.3,92.1-92.1V72.1H144.3z M40,518.4V209.8h104.3   v308.6c0,28.7-23.4,52.1-52.1,52.1S40,547.1,40,518.4z M642.7,518.4c0,28.7-23.4,52.1-52.1,52.1H168.1   c10.2-14.8,16.2-32.8,16.2-52.1V169.8v-57.6h458.4V518.4z" />
3676			<path d="M433.5,321.3H224.3v209.2h209.2V321.3z M393.5,490.5H264.3V361.3h129.2V490.5z" />
3677			<rect height="40" width="378.4" y="152.1" x="224.3" />
3678			<rect height="40" width="123.1" y="490.5" x="479.6" />
3679			<rect height="40" width="123.1" y="405.9" x="479.6" />
3680			<rect height="40" width="123.1" y="321.3" x="479.6" />
3681			<rect height="40" width="378.4" y="236.7" x="224.3" />
3682		</svg></a></div><div class="pageTitle"><a href="/en/uttop-1/our-programs.html">Our programs</a></div></li><li><div class="picto"><a href="/en/uttop-1/campus-life.html"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="enable-background:new 0 0 334.938 334.938;" viewBox="0 0 334.938 334.938" y="0px" x="0px" id="Capa_1" version="1.1">
3683			<path d="M113.117,75.057c20.693,0,37.528-16.835,37.528-37.528S133.81,0,113.117,0c-20.694,0-37.53,16.835-37.53,37.529  S92.423,75.057,113.117,75.057z M113.117,18c10.768,0,19.528,8.761,19.528,19.529s-8.76,19.528-19.528,19.528  c-10.769,0-19.53-8.76-19.53-19.528S102.348,18,113.117,18z M305.12,278.016l-21.596-65.589c-1.554-4.72-6.641-7.289-11.363-5.733  l-90.316,29.737c-2.268,0.746-4.145,2.363-5.221,4.494c-1.075,2.131-1.26,4.602-0.513,6.869l21.596,65.591  c0.747,2.268,2.363,4.145,4.495,5.221c1.269,0.64,2.659,0.965,4.054,0.965c0.948,0,1.898-0.
3683149,2.815-0.452l90.316-29.739  C304.107,287.825,306.674,282.737,305.12,278.016z M198.613,258.583l-2.591-7.871l73.219-24.107l2.663,8.087l-31.97,25.141  L198.613,258.583z M211.989,299.206l-7.386-22.434l38.054,1.151c2.111,0.06,4.176-0.616,5.835-1.921l29.401-23.121l7.315,22.216  L211.989,299.206z M123.971,150.438L101.54,326.96c-0.081,0.715-0.246,1.404-0.484,2.058c-1.278,3.515-4.648,5.918-8.446,5.918  c-0.07,0-0.141-0.001-0.211-0.002H68.282c-4.971,0-9-4.029-9-9s4.029-9,9-9h16.387l21.446-168.764  c0.626-4.931,5.137-8.416,10.063-7.794C121.108,141.002,124.598,145.507,123.971,150.438z M175.836,324.561  c0.167,1.069,0.135,2.138-0.074,3.161c-0.224,1.109-0.651,2.144-1.241,3.064c-0.893,1.396-2.174,2.556-3.755,3.296  c-0.557,0.262-1.146,0.469-1.759,0.613c-0.689,0.164-1.383,0.243-2.068,0.243c-0.088,0-0.177-0.001-0.265-0.004h-24.05  c-4.971,0-9-4.029-9-9s4.029-9,9-9h11.763l-28.265-83.4c-1.595-4.708,0.928-9.817,5.635-11.413  c4.709-1.595,9.817,0.928,11.413,5.635l32.22,95.072C175.593,323.382,175.744,323.961,175.836,324.561z M75.103,147.651  l-28.386,70.612c-1.412,3.511-4.788,5.646-8.354,5.646c-1.118,0-2.253-0.209-3.354-0.652c-4.612-1.854-6.848-7.096-4.994-11.708  l28.386-70.611c8.601-21.403,19.841-44.58,44.475-48.642c5.717-0.943,38.648-1.004,45.077,0.198  c23.823,4.451,38.565,26.736,50.514,47.274l29.31,50.38c5.762-0.819,11.158-0.598,15.075,1.215  c4.511,2.088,6.475,7.437,4.387,11.948c-2.074,4.48-7.363,6.447-11.854,4.43c-4.607-1.387-21.158,4.259-24.608,7.735  c-2.9,3.908-8.403,4.811-12.405,1.994c-4.065-2.86-5.041-8.475-2.18-12.54c2.273-3.23,7.496-6.713,13.815-9.533l-27.098-46.578  c-10.398-17.873-21.917-35.579-38.263-38.633c-4.264-0.726-34.406-0.83-38.844-0.131C91.898,112.35,83.747,126.142,75.103,147.651z" />
3684		</svg></a></div><div class="pageTitle"><a href="/en/uttop-1/campus-life.html">Campus life</a></div></li></ul></div></div></div></div></section><div id="logosPartenaires"><div class="wrapper"><ul><li><a target="_blank" href="https://www.enseignementsup-recherche.gouv.fr/fr"><img alt="R&eacute;publique Fran&ccedil;aise" src="/skins/uttop/resources/img/partenaires/1-Republique-francaise-logo.png" /></a></li><li><a target="_blank" href="https://www.univ-tlse3.fr"><img alt="Universit&eacute; de Toulouse" src="/skins/uttop/resources/img/partenaires/logo-UT-site.png" /></a></li><li><a target="_blank" href="http://www.cti-commission.fr"><img alt="CTI" src="/skins/uttop/resources/img/partenaires/3-cti.png" class="min" /></a></li><li><a target="_blank" href="https://www.laregion.fr"><img alt="R&eacute;gion Occitanie" src="/skins/uttop/resources/img/partenaires/4-Region Occitanie.jpg" /></a></li><li><a target="_blank" href="https://info.erasmusplus.fr"><img alt="Erasmus plus" src="/skins/uttop/resources/img/partenaires/5-erasmus-plus.jpg" /></a></li><li><a target="_blank" href="https://www.cti-commission.fr/la-cti/demarche-qualite/systeme-qe/eur-ace"><img alt="EUR-ACE" src="/skins/uttop/resources/img/partenaires/8-eurace.png" /></a></li><li><a target="_blank" href="https://www.campusfrance.org/fr/le-label-bienvenue-en-france"><img alt="Label Bienvenue en France" src="/skins/uttop/resources/img/partenaires/9-Label Bienvenue en France.jpg" /></a></li><li><a target="_blank" href="https://travail-emploi.gouv.fr/formation-professionnelle/acteurs-cadre-et-qualite-de-la-formation-professionnelle/article/qualiopi-marque-de-certification-qualite-des-prestataires-de-formation"><img alt="Qualiopi" src="/skins/uttop/resources/img/partenaires/qualiopi.png" /></a></li></ul></div></div><section class="footer-section"><div class="wrapper row"><div id="kopa-widget-contact-information-2" class="kopa-contact-widget col-md-6 col-xs-12"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="enable-background:new 0 0 512 512;" viewBox="0 0 512 512" y="0px" x="0px" id="Capa_1" version="1.1">
3685			<path d="M256,0C156.748,0,76,80.748,76,180c0,33.534,9.289,66.26,26.869,94.652l142.885,230.257    c2.737,4.411,7.559,7.091,12.745,7.091c0.04,0,0.079,0,0.119,0c5.231-0.041,10.063-2.804,12.75-7.292L410.611,272.22    C427.221,244.428,436,212.539,436,180C436,80.748,355.252,0,256,0z M384.866,256.818L258.272,468.186l-129.905-209.34    C113.734,235.214,105.8,207.95,105.8,180c0-82.71,67.49-150.2,150.2-150.2S406.1,97.29,406.1,180    C406.1,207.121,398.689,233.688,384.866,256.818z" />
3686			<path d="M256,90c-49.626,0-90,40.374-90,90c0,49.309,39.717,90,90,90c50.903,0,90-41.233,90-90C346,130.374,305.626,90,256,90z     M256,240.2c-33.257,0-60.2-27.033-60.2-60.2c0-33.084,27.116-60.2,60.2-60.2s60.1,27.116,60.1,60.2    C316.1,212.683,289.784,240.2,256,240.2z" />
3687		</svg><h3 class="widget-title">Contact</h3><address><p><span class="media-body">47, avenue d&#039;Azereix - BP 1629 - 65016 Tarbes CEDEX<br /></span><a href="tel:"></a>+33 (0)5 62 44 27 00</p></address></div></div></section><footer id="kopa-page-footer"><div class="wrapper clearfix"><nav class="pull-right" id="footer-nav" style="visibility: visible;"><ul id="footer-menu" class="clearfix"><li><a href="/en/legal-notice.html">Legal Notice</a></li><li><a href="/en/personal-data.html">Personal Data</a></li></ul></nav></div><p style="display: block;" id="back-top"><a href="#top"></a></p></footer></div>
3687<script type="text/javascript"><!--
3688
3689                        (function() { // anonymous function for scope purposes
3690                            // Show the information banner to the top of the page
3691                            function showBanner()
3692                            {
3693                                if (ametysCookieConsentListener.length > 0)
3694                                {
3695                                    
3696    
3697        var html = '<div class="cookiebanner-wrapper" id="cookie-banner">'
3698        + '<div class="cookiebanner">'
3699        + '<div class="cookiebanner-info">'
3700        + "By continuing to browse this site, you're accepting the use of cookies to collect anonymous visitor statistics."
3701        + ' '
3702        + '</div>'
3703        + '<div class="cookiebanner-buttons">'
3704        + '<a href="javascript:ametysAcceptCookieConsent()" class="cookiebanner-accept">'
3705        + "OK"
3706        + '</a>'
3707        + ' '
3708        + '<a href="javascript:ametysRefuseCookieConsent()" class="cookiebanner-refuse">'
3709        + "Refuse"
3710        + '</a>'
3711            
3712            
3713        + '</div>'
3714        + '</div>'
3715        + '</div>';
3716    
3717                                    $j(document.body).prepend(html).addClass('cookiebanner-visible');
3718                                }
3719                            }
3720                        
3721                            // Get the Internet Explorer version, return -1 if not IE
3722                            function getInternetExplorerVersion() {
3723                                var rv = -1;
3724                                if ($j.browser.msie)  
3725                                {
3726                                    rv = $j.browser.version;
3727                                } 
3728                                
3729                                return rv;
3730                            }
3731                            
3732                            // Check the navigator value DoNotTrack to know if the signal is activated and equal to 1
3733                            function notToTrack() {
3734                                if ( (navigator.doNotTrack && (navigator.doNotTrack=='yes' || navigator.doNotTrack=='1'))
3735                                    || ( navigator.msDoNotTrack && navigator.msDoNotTrack == '1') ) {
3736                                    var isIE = (getInternetExplorerVersion()!=-1)
3737                                    if (!isIE){    
3738                                         return true;
3739                                    }
3740                                    return false;
3741                                }
3742                            }
3743                        
3744                            // If the signal equals 0, consent is true
3745                            function isToTrack() {
3746                                if ( navigator.doNotTrack && (navigator.doNotTrack=='no' || navigator.doNotTrack==0 )) {
3747                                    return true;
3748                                }
3749                            }
3750                            
3751                            function getMobileAppConsent()
3752                            {
3753                                var searchParams = new URLSearchParams(window.location.search);
3754                                if (searchParams.has('Ametys-MobileApp-Tracking-Consent'))
3755                                {
3756                                    return searchParams.get('Ametys-MobileApp-Tracking-Consent') == 'true';
3757                                }
3758                                return null;
3759                            }
3760                            
3761                            let mobileAppConsent = getMobileAppConsent(); // already autorised or refused from mobile app ?
3762                            if (mobileAppConsent === true)
3763                            {
3764                                ametysAcceptCookieConsent();
3765                            }
3766                            else if (mobileAppConsent === false)
3767                            {
3768                                ametysRefuseCookieConsent();
3769                            }
3770                            else 
3771                            {
3772                                var consentCookie =  $j.cookie('ametysHasConsent');
3773                                if (consentCookie == null) 
3774                                {
3775                                    // The user has no cookies, we show the banner. 
3776                                    if (notToTrack()) 
3777                                    { 
3778                                        // Internet explorer DoNotTrack is not activated. Do not ask for consent and just opt him out
3779                                        ametysCallCookieConsentListener(false);
3780                                    } 
3781                                    else if (isToTrack()) 
3782                                    { 
3783                                        // Internet explorer DoNotTrack is activated. Do not ask for consent and just opt him in
3784                                        ametysCallCookieConsentListener(true);
3785                                    } 
3786                                    else 
3787                                    {
3788                                           
3789                                              ametysCallCookieConsentListener(true);
3790                                          
3791                                    
3792                                        // Otherwise ask the user
3793                                        $j(window).on("load", showBanner);
3794                                    }
3795                                } 
3796                                else 
3797                                {
3798                                    ametysCallCookieConsentListener(consentCookie == 'true');
3799                                }
3800                            }
3801                        })();
3802                   
3803// --></script>
3803</body></html>

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