tyriaa commited on
Commit
1a77ad4
·
1 Parent(s): ab9b07d

Initial deployment 4

Browse files
Files changed (2) hide show
  1. static/styles.css +145 -218
  2. templates/index.html +14 -7
static/styles.css CHANGED
@@ -1,157 +1,172 @@
1
- /* Styles globaux */
 
 
 
 
 
 
2
  body {
3
- background-color: #1e1e1e; /* Fond noir */
4
- color: #333; /* Texte principal */
5
  margin: 0;
6
- font-family: Arial, sans-serif;
 
7
  }
8
 
9
- /* Conteneur principal */
10
  .container {
11
- background-color: #dcdcdc;
12
- margin: 20px auto; /* Réduit l'espace en haut et en bas */
13
  padding: 20px;
14
- max-width: 90%; /* Utiliser toute la largeur de l'écran */
15
- border-radius: 8px;
16
  }
17
 
18
- /* Titre */
19
  header {
 
 
 
20
  text-align: center;
21
- margin-bottom: 20px;
22
  }
23
 
24
  header h1 {
25
- font-size: 28px;
26
- color: black;
 
27
  }
28
 
29
- header .generated-time {
30
- font-size: 14px;
31
- color: gray;
 
 
32
  }
33
 
34
- /* Section principale */
35
- main {
36
  display: flex;
37
- flex-direction: column;
38
  gap: 20px;
39
- margin: 20px auto;
40
- }
41
-
42
- /* Conteneur pour Trafic + MAP */
43
- .traffic-map-container {
44
- display: flex; /* Aligne Trafic + MAP horizontalement */
45
- gap: 20px; /* Espacement entre les deux sections */
46
- margin-bottom: 20px;
47
  }
48
 
49
- /* Section Gauche : Trafic */
50
  .traffic-info {
51
- flex: 1; /* Prend 1 portion de l'espace */
52
  background: white;
53
  padding: 20px;
54
  border-radius: 8px;
55
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
56
  }
57
 
58
  .traffic-info h2 {
59
- font-size: 18px;
60
- margin-bottom: 10px;
 
 
61
  }
62
 
63
  .traffic-items {
64
  display: flex;
65
  flex-direction: column;
66
  gap: 15px;
67
- margin-top: 20px;
68
  }
69
 
70
  .icon-item {
 
 
 
 
 
 
71
  display: flex;
72
- flex-direction: row;
73
  align-items: center;
74
- gap: 20px;
75
- padding: 10px;
76
- background-color: #f5f5f5;
77
- border-radius: 8px;
78
  }
79
 
80
  .icon-img {
81
- width: 32px; /* Ajuste la taille de l'icône */
82
- height: 32px;
83
  }
84
 
85
- .transport-icon {
86
  display: flex;
87
- align-items: center;
88
- gap: 10px;
89
- min-width: 120px;
90
  }
91
 
92
- /* Styles pour la carte */
93
- #map {
94
- width: 100%;
95
- height: 400px; /* Taille de la carte */
96
- border-radius: 8px;
 
 
 
 
 
 
 
97
  }
98
 
 
99
  .map-section {
100
- flex: 1;
101
- padding: 0;
102
  }
103
 
104
- /* Section Filtres et Tableau */
105
- .filter-table {
106
- display: flex;
107
- gap: 20px;
108
- background-color: #f0f0f0;
109
- padding: 20px;
110
  border-radius: 8px;
 
111
  }
112
 
113
  /* Filtres */
114
  .filter {
115
- flex: 1;
116
- background-color: #dcdcdc;
117
- padding: 10px 20px;
118
  border-radius: 8px;
 
 
119
  }
120
 
121
  .filter h3 {
122
- font-size: 18px;
123
- margin-bottom: 10px;
124
  }
125
 
126
  .filter ul {
127
- list-style-type: none;
 
 
 
128
  padding: 0;
 
129
  }
130
 
131
  .filter li {
132
  cursor: pointer;
133
- padding: 5px 10px;
134
- margin: 2px 0;
135
- border-radius: 4px;
136
- transition: background-color 0.2s;
137
  }
138
 
139
  .filter li:hover {
140
- background-color: #f0f0f0;
 
141
  }
142
 
143
  .filter li.active {
144
- background-color: #007bff;
145
  color: white;
146
  }
147
 
148
  /* Tableau des incidents */
149
  .incident-table {
150
- flex: 3;
151
- background-color: white;
152
- padding: 10px;
153
  border-radius: 8px;
154
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
 
155
  }
156
 
157
  table {
@@ -159,157 +174,69 @@ table {
159
  border-collapse: collapse;
160
  }
161
 
162
- th, td {
163
- border: 1px solid #ccc;
164
- padding: 10px;
165
- text-align: left;
166
- }
167
-
168
  th {
169
- background-color: #e0e0e0;
170
- font-weight: bold;
171
- }
172
-
173
- /* Style pour la ligne sélectionnée dans le tableau */
174
- tr.highlighted {
175
- background-color: #fff3cd !important;
176
- transition: background-color 0.3s ease;
177
- }
178
-
179
- tr.highlighted td {
180
- animation: highlight-pulse 2s infinite;
181
- }
182
-
183
- @keyframes highlight-pulse {
184
- 0% { background-color: #fff3cd; }
185
- 50% { background-color: #ffe69c; }
186
- 100% { background-color: #fff3cd; }
187
- }
188
-
189
- /* Styles for impacted lines display */
190
- .impacted-lines {
191
- display: flex;
192
- flex-wrap: wrap;
193
- gap: 5px;
194
- align-items: center;
195
- margin-top: 5px;
196
- font-size: 0.9em;
197
- min-height: 20px;
198
- }
199
-
200
- .impacted-line {
201
- display: inline-block;
202
- padding: 2px 6px;
203
- border-radius: 4px;
204
- background-color: #ff4444;
205
- color: white;
206
- font-weight: bold;
207
- font-size: 0.9em;
208
- cursor: help;
209
- position: relative;
210
- }
211
-
212
- .impacted-line[data-tooltip] {
213
- position: relative;
214
- }
215
-
216
- .impacted-line[data-tooltip]::after {
217
- content: attr(data-tooltip);
218
- position: absolute;
219
- bottom: 100%;
220
- left: 50%;
221
- transform: translateX(-50%);
222
- padding: 8px 12px;
223
- background-color: rgba(0, 0, 0, 0.8);
224
  color: white;
225
- border-radius: 4px;
226
- font-size: 14px;
227
- white-space: nowrap;
228
- z-index: 1000;
229
- visibility: hidden;
230
- opacity: 0;
231
- transition: opacity 0.2s ease-in-out;
232
- margin-bottom: 5px;
233
- max-width: 300px;
234
- white-space: normal;
235
- text-align: center;
236
- }
237
-
238
- .impacted-line[data-tooltip]:hover::after {
239
- visibility: visible;
240
- opacity: 1;
241
- }
242
-
243
- .impacted-line[data-tooltip]::before {
244
- content: '';
245
- position: absolute;
246
- bottom: 100%;
247
- left: 50%;
248
- transform: translateX(-50%);
249
- border: 6px solid transparent;
250
- border-top-color: rgba(0, 0, 0, 0.8);
251
- visibility: hidden;
252
- opacity: 0;
253
- transition: opacity 0.2s ease-in-out;
254
- margin-bottom: -6px;
255
- }
256
-
257
- .impacted-line[data-tooltip]:hover::before {
258
- visibility: visible;
259
- opacity: 1;
260
- }
261
-
262
- .impacted-line:hover {
263
- background-color: #ff6666;
264
- }
265
-
266
- /* Styles pour la modale */
267
- .modal {
268
- display: none;
269
- position: fixed;
270
- z-index: 1000;
271
- left: 0;
272
- top: 0;
273
- width: 100%;
274
- height: 100%;
275
- background-color: rgba(0, 0, 0, 0.5);
276
- }
277
-
278
- .modal-content {
279
- background-color: #fefefe;
280
- margin: 15% auto;
281
- padding: 20px;
282
- border: 1px solid #888;
283
- width: 80%;
284
- max-width: 600px;
285
- border-radius: 8px;
286
- position: relative;
287
- }
288
-
289
- .close-modal {
290
- position: absolute;
291
- right: 20px;
292
- top: 10px;
293
- color: #aaa;
294
- font-size: 28px;
295
- font-weight: bold;
296
- cursor: pointer;
297
  }
298
 
299
- .close-modal:hover {
300
- color: #555;
 
301
  }
302
 
303
- .modal h3 {
304
- margin-top: 0;
305
- color: #333;
306
- margin-bottom: 20px;
307
  }
308
 
309
- .modal-line-info,
310
- .modal-cause,
311
- .modal-message,
312
- .modal-severity {
313
- margin-bottom: 15px;
314
- line-height: 1.4;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  }
 
1
+ :root {
2
+ --france-bleu: #004C93;
3
+ --france-bleu-light: #0066CC;
4
+ --france-red: #E30613;
5
+ --france-gray: #F5F5F5;
6
+ }
7
+
8
  body {
9
+ font-family: 'Open Sans', Arial, sans-serif;
 
10
  margin: 0;
11
+ padding: 0;
12
+ background-color: var(--france-gray);
13
  }
14
 
 
15
  .container {
16
+ max-width: 1400px;
17
+ margin: 0 auto;
18
  padding: 20px;
 
 
19
  }
20
 
 
21
  header {
22
+ background-color: var(--france-bleu);
23
+ color: white;
24
+ padding: 20px;
25
  text-align: center;
26
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
27
  }
28
 
29
  header h1 {
30
+ margin: 0;
31
+ font-size: 2.5em;
32
+ font-weight: bold;
33
  }
34
 
35
+ .generated-time {
36
+ color: #ffffff;
37
+ opacity: 0.9;
38
+ font-size: 1.1em;
39
+ margin-top: 10px;
40
  }
41
 
42
+ /* Section Trafic + Map */
43
+ .traffic-map-container {
44
  display: flex;
 
45
  gap: 20px;
46
+ margin: 20px 0;
 
 
 
 
 
 
 
47
  }
48
 
49
+ /* Section Trafic */
50
  .traffic-info {
51
+ flex: 1;
52
  background: white;
53
  padding: 20px;
54
  border-radius: 8px;
55
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
56
  }
57
 
58
  .traffic-info h2 {
59
+ color: var(--france-bleu);
60
+ margin-top: 0;
61
+ padding-bottom: 10px;
62
+ border-bottom: 2px solid var(--france-bleu);
63
  }
64
 
65
  .traffic-items {
66
  display: flex;
67
  flex-direction: column;
68
  gap: 15px;
 
69
  }
70
 
71
  .icon-item {
72
+ background: var(--france-gray);
73
+ padding: 15px;
74
+ border-radius: 6px;
75
+ }
76
+
77
+ .transport-icon {
78
  display: flex;
 
79
  align-items: center;
80
+ gap: 10px;
81
+ color: var(--france-bleu);
82
+ font-weight: bold;
 
83
  }
84
 
85
  .icon-img {
86
+ width: 24px;
87
+ height: 24px;
88
  }
89
 
90
+ .impacted-lines {
91
  display: flex;
92
+ flex-wrap: wrap;
93
+ gap: 8px;
94
+ margin-top: 10px;
95
  }
96
 
97
+ .impacted-line {
98
+ background-color: var(--france-red);
99
+ color: white;
100
+ padding: 4px 12px;
101
+ border-radius: 15px;
102
+ font-weight: bold;
103
+ cursor: pointer;
104
+ transition: transform 0.2s;
105
+ }
106
+
107
+ .impacted-line:hover {
108
+ transform: scale(1.05);
109
  }
110
 
111
+ /* Section Carte */
112
  .map-section {
113
+ flex: 2;
 
114
  }
115
 
116
+ #map {
117
+ height: 600px;
 
 
 
 
118
  border-radius: 8px;
119
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
120
  }
121
 
122
  /* Filtres */
123
  .filter {
124
+ background: white;
125
+ padding: 20px;
 
126
  border-radius: 8px;
127
+ margin: 20px 0;
128
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
129
  }
130
 
131
  .filter h3 {
132
+ color: var(--france-bleu);
133
+ margin-top: 0;
134
  }
135
 
136
  .filter ul {
137
+ display: flex;
138
+ flex-wrap: wrap;
139
+ gap: 10px;
140
+ list-style: none;
141
  padding: 0;
142
+ margin: 0;
143
  }
144
 
145
  .filter li {
146
  cursor: pointer;
147
+ padding: 8px 16px;
148
+ border-radius: 20px;
149
+ background-color: var(--france-gray);
150
+ transition: all 0.2s;
151
  }
152
 
153
  .filter li:hover {
154
+ background-color: var(--france-bleu-light);
155
+ color: white;
156
  }
157
 
158
  .filter li.active {
159
+ background-color: var(--france-bleu);
160
  color: white;
161
  }
162
 
163
  /* Tableau des incidents */
164
  .incident-table {
165
+ background: white;
166
+ padding: 20px;
 
167
  border-radius: 8px;
168
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
169
+ overflow-x: auto;
170
  }
171
 
172
  table {
 
174
  border-collapse: collapse;
175
  }
176
 
 
 
 
 
 
 
177
  th {
178
+ background-color: var(--france-bleu);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  color: white;
180
+ padding: 12px;
181
+ text-align: left;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  }
183
 
184
+ td {
185
+ padding: 12px;
186
+ border-bottom: 1px solid #eee;
187
  }
188
 
189
+ tr:hover {
190
+ background-color: var(--france-gray);
 
 
191
  }
192
 
193
+ tr.highlighted {
194
+ background-color: #FFF3F3;
195
+ animation: pulse 2s infinite;
196
+ }
197
+
198
+ @keyframes pulse {
199
+ 0% {
200
+ background-color: #FFF3F3;
201
+ }
202
+ 50% {
203
+ background-color: #FFE6E6;
204
+ }
205
+ 100% {
206
+ background-color: #FFF3F3;
207
+ }
208
+ }
209
+
210
+ /* Responsive Design */
211
+ @media (max-width: 1024px) {
212
+ .traffic-map-container {
213
+ flex-direction: column;
214
+ }
215
+
216
+ .map-section {
217
+ order: -1;
218
+ }
219
+
220
+ #map {
221
+ height: 400px;
222
+ }
223
+ }
224
+
225
+ @media (max-width: 768px) {
226
+ .container {
227
+ padding: 10px;
228
+ }
229
+
230
+ header h1 {
231
+ font-size: 1.8em;
232
+ }
233
+
234
+ .filter ul {
235
+ flex-direction: column;
236
+ }
237
+
238
+ .filter li {
239
+ width: 100%;
240
+ text-align: center;
241
+ }
242
  }
templates/index.html CHANGED
@@ -3,7 +3,10 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Carte des Incidents à Paris</title>
 
 
 
7
  <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css">
8
  <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
9
  </head>
@@ -11,8 +14,8 @@
11
  <div class="container">
12
  <!-- Titre -->
13
  <header>
14
- <h1>Carte des Incidents à Paris</h1>
15
- <p class="generated-time">Cette page a été générée à : <span id="pageLoadTime"></span></p>
16
  </header>
17
 
18
  <!-- Contenu principal -->
@@ -21,7 +24,7 @@
21
  <section class="traffic-map-container">
22
  <!-- Section Gauche : Trafic -->
23
  <section class="traffic-info">
24
- <h2>Un oeil sur le trafic</h2>
25
  <div class="traffic-items">
26
  <div class="icon-item">
27
  <div class="transport-icon">
@@ -65,7 +68,7 @@
65
  <!-- Section Filtres et Tableau -->
66
  <section class="filter-table">
67
  <div class="filter">
68
- <h3>Filtre</h3>
69
  <ul>
70
  <li data-category="all">Tous</li>
71
  <li data-category="RER">RER</li>
@@ -122,7 +125,7 @@
122
  // Ajouter une polyligne rouge pour les incidents de type LineString
123
  const latlngs = coordinates.map(coord => [coord[1], coord[0]]);
124
  L.polyline(latlngs, {
125
- color: 'red',
126
  weight: 4,
127
  opacity: 0.8
128
  }).addTo(map);
@@ -153,7 +156,11 @@
153
  });
154
 
155
  // Mettre à jour l'heure de génération
156
- document.getElementById('pageLoadTime').textContent = new Date().toLocaleString();
 
 
 
 
157
  </script>
158
  </body>
159
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Trafic en Île-de-France</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css">
11
  <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
12
  </head>
 
14
  <div class="container">
15
  <!-- Titre -->
16
  <header>
17
+ <h1>Trafic en Île-de-France</h1>
18
+ <p class="generated-time">Dernière mise à jour : <span id="pageLoadTime"></span></p>
19
  </header>
20
 
21
  <!-- Contenu principal -->
 
24
  <section class="traffic-map-container">
25
  <!-- Section Gauche : Trafic -->
26
  <section class="traffic-info">
27
+ <h2>État du trafic</h2>
28
  <div class="traffic-items">
29
  <div class="icon-item">
30
  <div class="transport-icon">
 
68
  <!-- Section Filtres et Tableau -->
69
  <section class="filter-table">
70
  <div class="filter">
71
+ <h3>Filtrer par mode de transport</h3>
72
  <ul>
73
  <li data-category="all">Tous</li>
74
  <li data-category="RER">RER</li>
 
125
  // Ajouter une polyligne rouge pour les incidents de type LineString
126
  const latlngs = coordinates.map(coord => [coord[1], coord[0]]);
127
  L.polyline(latlngs, {
128
+ color: '#E30613',
129
  weight: 4,
130
  opacity: 0.8
131
  }).addTo(map);
 
156
  });
157
 
158
  // Mettre à jour l'heure de génération
159
+ document.getElementById('pageLoadTime').textContent = new Date().toLocaleString('fr-FR', {
160
+ hour: '2-digit',
161
+ minute: '2-digit',
162
+ second: '2-digit'
163
+ });
164
  </script>
165
  </body>
166
  </html>