1
+ <!DOCTYPE html> < html lang ="fr "> < head > <!-- <base href={base} /> --> < meta charset ="UTF-8 "> < meta name ="viewport " content ="width=device-width "> < link rel ="icon " type ="image/svg+xml " href ="/favicon.svg "> < meta name ="generator " content ="Astro v5.0.5 "> < title > 404 page inexistante | ITN</ title > < link rel ="canonical " href ="https://itn.dev/404 "> < meta name ="description " content ="Sciences et technologies du numérique à Mines Paris – PSL "> < meta name ="robots " content ="index, follow "> < meta property ="og:title " content ="404 page inexistante | ITN "> < meta property ="og:type " content ="website "> < meta property ="og:image " content ="https://itn.dev/opengraph.jpg "> < meta property ="og:url " content ="https://itn.dev/404 "> < meta property ="og:description " content ="Sciences et technologies du numérique à Mines Paris – PSL "> < meta name ="twitter:card " content ="summary_large_image "> < meta name ="twitter:site " content ="@ITN_MinesParis "> < meta name ="twitter:title " content ="404 page inexistante | ITN "> < meta name ="twitter:image " content ="https://itn.dev/opengraph.jpg "> < meta name ="twitter:description " content ="Sciences et technologies du numérique à Mines Paris – PSL "> < meta name ="twitter:creator " content ="@ITN_MinesParis "> < link rel ="stylesheet " href ="/_astro/actualites.DFUB6Evn.css ">
2
+ < style > @font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2) format ("woff2-variations" );unicode-range : U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-cyrillic-wght-normal.CMZtQduZ.woff2) format ("woff2-variations" );unicode-range : U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-greek-ext-wght-normal.CGAr0uHJ.woff2) format ("woff2-variations" );unicode-range : U+1F00-1FFF}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-greek-wght-normal.CaVNZxsx.woff2) format ("woff2-variations" );unicode-range : U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2) format ("woff2-variations" );unicode-range : U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-latin-ext-wght-normal.CFHvXkgd.woff2) format ("woff2-variations" );unicode-range : U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}@font-face {font-family : Inter Variable;font-style : normal;font-display : swap;font-weight : 100 900 ;src : url (/_astro/inter-latin-wght-normal.C2S99t-D.woff2) format ("woff2-variations" );unicode-range : U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}html {-webkit-hyphens : auto;hyphens : auto}img {content-visibility : auto}
3
+ </ style > </ head > < body > < div class ="max-w-screen-xl mx-auto px-5 "> < header class ="flex flex-col lg:flex-row justify-between items-center my-5 "> < div class ="flex w-full lg:w-auto items-center justify-between "> < a href ="/ " class ="text-2xl "> < span class ="text-3xl flex items-baseline gap-1 "> < span class ="relative inline-block " style ="height:1em; top: 0.05em "> < svg xmlns ="http://www.w3.org/2000/svg " class ="icon icon-tabler icon-tabler-code " width ="36 " height ="36 " viewBox ="0 0 36 36 " stroke-width ="2 " stroke ="currentColor " fill ="none " stroke-linecap ="round " stroke-linejoin ="round "> < g transform ="scale(1.5) "> < path stroke ="none " d ="M0 0h24v24H0z " fill ="none "> </ path > < path d ="M7 8l-4 4l4 4 "> </ path > < path d ="M17 8l4 4l-4 4 "> </ path > < path d ="M14 4l-4 16 "> </ path > </ g > </ svg > </ span > < span class ="font-bold text-slate-800 "> ITN</ span > </ span > </ a > < div class ="block lg:hidden "> < button id ="astronav-menu " aria-label ="Toggle Menu "> < svg fill ="currentColor " class ="w-4 h-4 text-gray-800 " width ="24 " height ="24 " viewBox ="0 0 24 24 " xmlns ="https://www.w3.org/2000/svg "> < title > Toggle Menu</ title > < path class ="astronav-close-icon astronav-toggle hidden " fill-rule ="evenodd " clip-rule ="evenodd " d ="M18.278 16.864a1 1 0 01-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 01-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 011.414-1.414l4.829 4.828 4.828-4.828a1 1 0 111.414 1.414l-4.828 4.829 4.828 4.828z "> </ path > < path class ="astronav-open-icon astronav-toggle " fill-rule ="evenodd " d ="M4 5h16a1 1 0 010 2H4a1 1 0 110-2zm0 6h16a1 1 0 010 2H4a1 1 0 010-2zm0 6h16a1 1 0 010 2H4a1 1 0 010-2z "> </ path > </ svg > </ button > </ div > </ div > < nav class ="astronav-items astronav-toggle hidden w-full lg:w-auto mt-2 lg:flex lg:mt-0 "> < ul class ="flex flex-col lg:flex-row lg:gap-3 "> < li > < a href ="/organisation " aria-label ="Organisation " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Organisation </ a > </ li > < li > < a href ="/equipe " aria-label ="Equipe " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Equipe </ a > </ li > < li > < a href ="/actualites " aria-label ="Actualités " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Actualités </ a > </ li > < li > < a href ="/projets " aria-label ="Projets " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Projets </ a > </ li > < li > < a href ="/mentions " aria-label ="Mentions " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Mentions </ a > </ li > < li > < a href ="/contact " aria-label ="Contact " class ="flex lg:px-3 py-2 text-gray-600 hover:text-gray-900 "> Contact </ a > </ li > < li > < div class ="h-10 items-center gap-4 flex lg:hidden "> < a href ="https://x.com/ITN_MinesParis " aria-label ="X "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-x "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="m4 4 11.733 16H20L8.267 4zM4 20l6.768-6.768m2.46-2.46L20 4 "/> </ svg > </ a > < a href ="https://www.linkedin.com/in/itn-institut-des-transformations-num%C3%A9riques-mines-paris-psl-0b944027a " aria-label ="Linkedin "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-linkedin "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zM8 11v5M8 8v.01M12 16v-5 "/> < path d ="M16 16v-3a2 2 0 0 0-4 0 "/> </ svg > </ a > < a href ="https://github.com/orgs/ITN-Mines-Paris " aria-label ="Github "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="1.5 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-github "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2 2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2 4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6-.6.6-.6 1.2-.5 2V21 "/> </ svg > </ a > </ div > </ li > </ ul > </ nav > < script > ( function ( ) { const closeOnClick = false ;
4
+
5
+ [ "DOMContentLoaded" , "astro:after-swap" ] . forEach ( ( event ) => {
6
+ document . addEventListener ( event , addListeners ) ;
7
+ } ) ;
8
+
9
+ // Function to clone and replace elements
10
+ function cloneAndReplace ( element ) {
11
+ const clone = element . cloneNode ( true ) ;
12
+ element . parentNode . replaceChild ( clone , element ) ;
13
+ }
14
+
15
+ function addListeners ( ) {
16
+ // Clean up existing listeners
17
+ const oldMenuButton = document . getElementById ( "astronav-menu" ) ;
18
+ if ( oldMenuButton ) {
19
+ cloneAndReplace ( oldMenuButton ) ;
20
+ }
21
+
22
+ const oldDropdownMenus = document . querySelectorAll ( ".astronav-dropdown" ) ;
23
+ oldDropdownMenus . forEach ( ( menu ) => {
24
+ cloneAndReplace ( menu ) ;
25
+ } ) ;
26
+
27
+ // Mobile nav toggle
28
+ const menuButton = document . getElementById ( "astronav-menu" ) ;
29
+ menuButton && menuButton . addEventListener ( "click" , toggleMobileNav ) ;
30
+
31
+ // Dropdown menus
32
+ const dropdownMenus = document . querySelectorAll ( ".astronav-dropdown" ) ;
33
+ dropdownMenus . forEach ( ( menu ) => {
34
+ const button = menu . querySelector ( "button" ) ;
35
+ button &&
36
+ button . addEventListener ( "click" , ( event ) =>
37
+ toggleDropdownMenu ( event , menu , dropdownMenus )
38
+ ) ;
39
+
40
+ // Handle Submenu Dropdowns
41
+ const dropDownSubmenus = menu . querySelectorAll (
42
+ ".astronav-dropdown-submenu"
43
+ ) ;
44
+
45
+ dropDownSubmenus . forEach ( ( submenu ) => {
46
+ const submenuButton = submenu . querySelector ( "button" ) ;
47
+ submenuButton &&
48
+ submenuButton . addEventListener ( "click" , ( event ) => {
49
+ event . stopImmediatePropagation ( ) ;
50
+ toggleSubmenuDropdown ( event , submenu ) ;
51
+ } ) ;
52
+ } ) ;
53
+ } ) ;
54
+
55
+ // Clicking away from dropdown will remove the dropdown class
56
+ document . addEventListener ( "click" , closeAllDropdowns ) ;
57
+
58
+ if ( closeOnClick ) {
59
+ handleCloseOnClick ( ) ;
60
+ }
61
+ }
62
+
63
+ function toggleMobileNav ( ) {
64
+ [ ...document . querySelectorAll ( ".astronav-toggle" ) ] . forEach ( ( el ) => {
65
+ el . classList . toggle ( "hidden" ) ;
66
+ } ) ;
67
+ }
68
+
69
+ function toggleDropdownMenu ( event , menu , dropdownMenus ) {
70
+ toggleMenu ( menu ) ;
71
+
72
+ // Close one dropdown when selecting another
73
+ Array . from ( dropdownMenus )
74
+ . filter ( ( el ) => el !== menu && ! menu . contains ( el ) )
75
+ . forEach ( closeMenu ) ;
76
+
77
+ event . stopPropagation ( ) ;
78
+ }
79
+
80
+ function toggleSubmenuDropdown ( event , submenu ) {
81
+ event . stopPropagation ( ) ;
82
+ toggleMenu ( submenu ) ;
83
+
84
+ // Close sibling submenus at the same nesting level
85
+ const siblingSubmenus = submenu
86
+ . closest ( ".astronav-dropdown" )
87
+ . querySelectorAll ( ".astronav-dropdown-submenu" ) ;
88
+ Array . from ( siblingSubmenus )
89
+ . filter ( ( el ) => el !== submenu && ! submenu . contains ( el ) )
90
+ . forEach ( closeMenu ) ;
91
+ }
92
+
93
+ function closeAllDropdowns ( event ) {
94
+ const dropdownMenus = document . querySelectorAll ( ".dropdown-toggle" ) ;
95
+ const dropdownParent = document . querySelectorAll (
96
+ ".astronav-dropdown, .astronav-dropdown-submenu"
97
+ ) ;
98
+ const isButtonInsideDropdown = [
99
+ ...document . querySelectorAll (
100
+ ".astronav-dropdown button, .astronav-dropdown-submenu button, #astronav-menu"
101
+ ) ,
102
+ ] . some ( ( button ) => button . contains ( event . target ) ) ;
103
+ if ( ! isButtonInsideDropdown ) {
104
+ dropdownMenus . forEach ( ( d ) => {
105
+ // console.log("I ran", d);
106
+ // if (!d.contains(event.target)) {
107
+ d . classList . remove ( "open" ) ;
108
+ d . removeAttribute ( "open" ) ;
109
+ d . classList . add ( "hidden" ) ;
110
+ // }
111
+ } ) ;
112
+ dropdownParent . forEach ( ( d ) => {
113
+ d . classList . remove ( "open" ) ;
114
+ d . removeAttribute ( "open" ) ;
115
+ d . setAttribute ( "aria-expanded" , "false" ) ;
116
+ } ) ;
117
+ }
118
+ }
119
+
120
+ function toggleMenu ( menu ) {
121
+ menu . classList . toggle ( "open" ) ;
122
+ const expanded = menu . getAttribute ( "aria-expanded" ) === "true" ;
123
+ menu . setAttribute ( "aria-expanded" , expanded ? "false" : "true" ) ;
124
+ menu . hasAttribute ( "open" )
125
+ ? menu . removeAttribute ( "open" )
126
+ : menu . setAttribute ( "open" , "" ) ;
127
+
128
+ const dropdownToggle = menu . querySelector ( ".dropdown-toggle" ) ;
129
+ const dropdownExpanded = dropdownToggle . getAttribute ( "aria-expanded" ) ;
130
+ dropdownToggle . classList . toggle ( "hidden" ) ;
131
+ dropdownToggle . setAttribute (
132
+ "aria-expanded" ,
133
+ dropdownExpanded === "true" ? "false" : "true"
134
+ ) ;
135
+ }
136
+
137
+ function closeMenu ( menu ) {
138
+ // console.log("closing", menu);
139
+ menu . classList . remove ( "open" ) ;
140
+ menu . removeAttribute ( "open" ) ;
141
+ menu . setAttribute ( "aria-expanded" , "false" ) ;
142
+ const dropdownToggles = menu . querySelectorAll ( ".dropdown-toggle" ) ;
143
+ dropdownToggles . forEach ( ( toggle ) => {
144
+ toggle . classList . add ( "hidden" ) ;
145
+ toggle . setAttribute ( "aria-expanded" , "false" ) ;
146
+ } ) ;
147
+ }
148
+
149
+ function handleCloseOnClick ( ) {
150
+ const navMenuItems = document . querySelector ( ".astronav-items" ) ;
151
+ const navToggle = document . getElementById ( "astronav-menu" ) ;
152
+ const navLink = navMenuItems && navMenuItems . querySelectorAll ( "a" ) ;
153
+
154
+ const MenuIcons = navToggle . querySelectorAll ( ".astronav-toggle" ) ;
155
+
156
+ navLink &&
157
+ navLink . forEach ( ( item ) => {
158
+ item . addEventListener ( "click" , ( ) => {
159
+ navMenuItems ?. classList . add ( "hidden" ) ;
160
+ MenuIcons . forEach ( ( el ) => {
161
+ el . classList . toggle ( "hidden" ) ;
162
+ } ) ;
163
+ } ) ;
164
+ } ) ;
165
+ }
166
+ } ) ( ) ; </ script > < div > < div class ="h-10 items-center gap-4 lg:flex hidden "> < a href ="https://x.com/ITN_MinesParis " aria-label ="X "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-x "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="m4 4 11.733 16H20L8.267 4zM4 20l6.768-6.768m2.46-2.46L20 4 "/> </ svg > </ a > < a href ="https://www.linkedin.com/in/itn-institut-des-transformations-num%C3%A9riques-mines-paris-psl-0b944027a " aria-label ="Linkedin "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-linkedin "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zM8 11v5M8 8v.01M12 16v-5 "/> < path d ="M16 16v-3a2 2 0 0 0-4 0 "/> </ svg > </ a > < a href ="https://github.com/orgs/ITN-Mines-Paris " aria-label ="Github "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="1.5 " class ="text-black w-6 h-6 " viewBox ="0 0 24 24 " astro-icon ="brand-github "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2 2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2 4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6-.6.6-.6 1.2-.5 2V21 "/> </ svg > </ a > </ div > </ div > </ header > </ div > < div class ="max-w-screen-xl mx-auto px-5 "> < div class ="min-h-[calc(100vh-16rem)] flex items-center justify-center "> < div class ="mt-16 text-center "> < h1 class ="text-4xl lg:text-5xl font-bold lg:tracking-tight "> 404</ h1 > < p class ="text-lg mt-4 text-slate-600 "> Page inexistante.</ p > </ div > </ div > </ div > < footer class ="my-20 "> < p class ="text-center text-sm text-slate-500 ">
167
+ Copyright © 2025 ITN Mines Paris – PSL
168
+ </ p > < p class ="text-center text-xs text-slate-500 mt-1 ">
169
+ Design par < a href ="https://github.com/boisgera "> Sébastien Boisgérault</ a > .
170
+ < span class ="relative "> < span class ="inline-block relative -top-px "> < a href ="/mentions " aria-label ="Mentions "> < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="inline-block text-slate-500 w-3.5 h-3.5 " viewBox ="0 0 24 24 " astro-icon ="brand-open-source "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M12 3a9 9 0 0 1 3.618 17.243l-2.193-5.602a3 3 0 1 0-2.849 0l-2.193 5.603A9 9 0 0 1 12 3z "/> </ svg > </ a > < svg fill ="none " stroke ="currentColor " stroke-linecap ="round " stroke-linejoin ="round " stroke-width ="2 " class ="inline text-slate-500 w-3.5 h-3.5 " viewBox ="0 0 24 24 " astro-icon ="cookie-off "> < path stroke ="none " d ="M0 0h24v24H0z "/> < path d ="M8 13v.01M12 17v.01M12 12v.01M18.192 18.187a3 3 0 0 1-.976.652c-1.048.263-1.787.483-2.216.661-.475.197-1.092.538-1.852 1.024a3 3 0 0 1-2.296 0C10.05 20.021 9.433 19.68 9 19.5c-.471-.195-1.21-.415-2.216-.66a3 3 0 0 1-1.623-1.624c-.265-1.052-.485-1.79-.661-2.216-.198-.479-.54-1.096-1.024-1.852a3 3 0 0 1 0-2.296c.48-.744.82-1.361 1.024-1.852.171-.413.391-1.152.66-2.216a3 3 0 0 1 .649-.971M8.63 4.639c.14-.049.263-.095.37-.139.458-.19 1.075-.531 1.852-1.024a3 3 0 0 1 2.296 0l2.667 1.104a4 4 0 0 0 4.656 6.14l.053.132a3 3 0 0 1 0 2.296c-.497.786-.838 1.404-1.024 1.852a6.579 6.579 0 0 0-.135.36M3 3l18 18 "/> </ svg > </ span > </ span > </ p > </ footer > </ body > </ html >
0 commit comments