OUAREDAEK commited on
Commit
fd562ae
·
verified ·
1 Parent(s): 8045dd9

Upload cross_reading/cross_readers.html with huggingface_hub

Browse files
Files changed (1) hide show
  1. cross_reading/cross_readers.html +755 -0
cross_reading/cross_readers.html ADDED
@@ -0,0 +1,755 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="fr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Analyse Croisée des Évaluations - ReflAgent</title>
7
+
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ font-family: 'Segoe UI', Arial, sans-serif;
14
+ }
15
+
16
+ body {
17
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
18
+ color: #333;
19
+ min-height: 100vh;
20
+ padding: 20px;
21
+ }
22
+
23
+ .container {
24
+ max-width: 1400px;
25
+ margin: 0 auto;
26
+ background: white;
27
+ border-radius: 20px;
28
+ padding: 30px;
29
+ box-shadow: 0 10px 40px rgba(0,0,0,0.08);
30
+ border: 1px solid #e0e0e0;
31
+ }
32
+
33
+ header {
34
+ text-align: center;
35
+ margin-bottom: 30px;
36
+ padding-bottom: 20px;
37
+ border-bottom: 2px solid #e3f2fd;
38
+ }
39
+
40
+ h1 {
41
+ color: #1976D2;
42
+ background: linear-gradient(90deg, #1976D2, #2196F3);
43
+ -webkit-background-clip: text;
44
+ -webkit-text-fill-color: transparent;
45
+ margin-bottom: 10px;
46
+ }
47
+
48
+ .subtitle {
49
+ color: #666;
50
+ font-size: 16px;
51
+ margin-bottom: 20px;
52
+ }
53
+
54
+ .back-btn {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ gap: 8px;
58
+ padding: 10px 20px;
59
+ background: linear-gradient(135deg, #1976D2, #2196F3);
60
+ color: white;
61
+ text-decoration: none;
62
+ border-radius: 10px;
63
+ margin-bottom: 20px;
64
+ font-weight: 600;
65
+ transition: transform 0.3s, box-shadow 0.3s;
66
+ }
67
+
68
+ .back-btn:hover {
69
+ transform: translateY(-2px);
70
+ box-shadow: 0 5px 15px rgba(25, 118, 210, 0.3);
71
+ }
72
+
73
+ .stats-grid {
74
+ display: grid;
75
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
76
+ gap: 20px;
77
+ margin-bottom: 30px;
78
+ }
79
+
80
+ .stat-card {
81
+ background: linear-gradient(135deg, #e3f2fd, #f3e5f5);
82
+ padding: 20px;
83
+ border-radius: 12px;
84
+ text-align: center;
85
+ transition: transform 0.3s;
86
+ }
87
+
88
+ .stat-card:hover {
89
+ transform: translateY(-5px);
90
+ box-shadow: 0 8px 20px rgba(0,0,0,0.1);
91
+ }
92
+
93
+ .stat-value {
94
+ font-size: 36px;
95
+ font-weight: bold;
96
+ color: #1976D2;
97
+ margin: 10px 0;
98
+ }
99
+
100
+ .stat-label {
101
+ font-size: 14px;
102
+ color: #666;
103
+ font-weight: 500;
104
+ }
105
+
106
+ .section {
107
+ margin: 30px 0;
108
+ padding: 20px;
109
+ background: #f8f9fa;
110
+ border-radius: 15px;
111
+ }
112
+
113
+ .section h2 {
114
+ color: #1976D2;
115
+ margin-bottom: 20px;
116
+ padding-bottom: 10px;
117
+ border-bottom: 2px solid #e3f2fd;
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 10px;
121
+ }
122
+
123
+ .filter-controls {
124
+ display: flex;
125
+ gap: 15px;
126
+ margin-bottom: 20px;
127
+ flex-wrap: wrap;
128
+ align-items: center;
129
+ }
130
+
131
+ .filter-controls select, .filter-controls input {
132
+ padding: 10px 15px;
133
+ border: 2px solid #1976D2;
134
+ border-radius: 8px;
135
+ background: white;
136
+ font-size: 14px;
137
+ min-width: 200px;
138
+ }
139
+
140
+ .filter-controls label {
141
+ font-weight: 600;
142
+ color: #1976D2;
143
+ }
144
+
145
+ table {
146
+ width: 100%;
147
+ border-collapse: collapse;
148
+ margin: 20px 0;
149
+ background: white;
150
+ border-radius: 10px;
151
+ overflow: hidden;
152
+ box-shadow: 0 3px 15px rgba(0,0,0,0.05);
153
+ }
154
+
155
+ th {
156
+ background: linear-gradient(135deg, #1976D2, #2196F3);
157
+ color: white;
158
+ padding: 15px;
159
+ text-align: left;
160
+ font-weight: 600;
161
+ }
162
+
163
+ td {
164
+ padding: 12px 15px;
165
+ border-bottom: 1px solid #e0e0e0;
166
+ }
167
+
168
+ tr:hover {
169
+ background: #f5f5f5;
170
+ }
171
+
172
+ .scenario-badge {
173
+ display: inline-block;
174
+ padding: 5px 10px;
175
+ border-radius: 20px;
176
+ font-size: 12px;
177
+ font-weight: bold;
178
+ background: #e3f2fd;
179
+ color: #1976D2;
180
+ }
181
+
182
+ .confidence-bar {
183
+ height: 20px;
184
+ background: #e0e0e0;
185
+ border-radius: 10px;
186
+ overflow: hidden;
187
+ margin: 5px 0;
188
+ }
189
+
190
+ .confidence-fill {
191
+ height: 100%;
192
+ border-radius: 10px;
193
+ transition: width 0.5s ease;
194
+ }
195
+
196
+ .high-confidence { background: linear-gradient(135deg, #43a047, #4caf50); }
197
+ .medium-confidence { background: linear-gradient(135deg, #fb8c00, #ff9800); }
198
+ .low-confidence { background: linear-gradient(135deg, #e53935, #f44336); }
199
+
200
+ .metrics-container {
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: 5px;
204
+ }
205
+
206
+ .metric-item {
207
+ display: flex;
208
+ justify-content: space-between;
209
+ align-items: center;
210
+ padding: 3px 0;
211
+ font-size: 12px;
212
+ }
213
+
214
+ .metric-name {
215
+ color: #666;
216
+ }
217
+
218
+ .metric-value {
219
+ font-weight: bold;
220
+ color: #1976D2;
221
+ }
222
+
223
+ .conflict-indicator {
224
+ display: inline-block;
225
+ width: 12px;
226
+ height: 12px;
227
+ border-radius: 50%;
228
+ margin-right: 5px;
229
+ }
230
+
231
+ .conflict-high {
232
+ background: #e53935;
233
+ animation: pulse 2s infinite;
234
+ }
235
+
236
+ .conflict-medium {
237
+ background: #fb8c00;
238
+ }
239
+
240
+ .conflict-low {
241
+ background: #43a047;
242
+ }
243
+
244
+ @keyframes pulse {
245
+ 0% { transform: scale(1); }
246
+ 50% { transform: scale(1.2); }
247
+ 100% { transform: scale(1); }
248
+ }
249
+
250
+ .chart-container {
251
+ height: 400px;
252
+ margin: 20px 0;
253
+ background: white;
254
+ border-radius: 10px;
255
+ padding: 20px;
256
+ box-shadow: 0 3px 15px rgba(0,0,0,0.05);
257
+ }
258
+
259
+ .scenario-details {
260
+ background: white;
261
+ border-radius: 10px;
262
+ padding: 20px;
263
+ margin: 20px 0;
264
+ box-shadow: 0 3px 15px rgba(0,0,0,0.05);
265
+ display: none;
266
+ }
267
+
268
+ .scenario-details.active {
269
+ display: block;
270
+ animation: fadeIn 0.5s ease;
271
+ }
272
+
273
+ @keyframes fadeIn {
274
+ from { opacity: 0; transform: translateY(10px); }
275
+ to { opacity: 1; transform: translateY(0); }
276
+ }
277
+
278
+ .details-grid {
279
+ display: grid;
280
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
281
+ gap: 20px;
282
+ margin-top: 20px;
283
+ }
284
+
285
+ .details-card {
286
+ background: #f8f9fa;
287
+ padding: 15px;
288
+ border-radius: 8px;
289
+ border-left: 4px solid #1976D2;
290
+ }
291
+
292
+ .details-card h4 {
293
+ color: #1976D2;
294
+ margin-bottom: 10px;
295
+ }
296
+
297
+ .comparison-chart {
298
+ display: grid;
299
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
300
+ gap: 15px;
301
+ margin: 20px 0;
302
+ }
303
+
304
+ .comparison-item {
305
+ background: white;
306
+ padding: 15px;
307
+ border-radius: 8px;
308
+ border: 1px solid #e0e0e0;
309
+ text-align: center;
310
+ }
311
+
312
+ .loading {
313
+ text-align: center;
314
+ padding: 40px;
315
+ color: #666;
316
+ }
317
+
318
+ .loading-spinner {
319
+ display: inline-block;
320
+ width: 40px;
321
+ height: 40px;
322
+ border: 4px solid #f3f3f3;
323
+ border-top: 4px solid #1976D2;
324
+ border-radius: 50%;
325
+ animation: spin 1s linear infinite;
326
+ margin-bottom: 20px;
327
+ }
328
+
329
+ @keyframes spin {
330
+ 0% { transform: rotate(0deg); }
331
+ 100% { transform: rotate(360deg); }
332
+ }
333
+
334
+ /* Styles pour les étoiles */
335
+ .stars-container {
336
+ display: flex;
337
+ gap: 2px;
338
+ margin-top: 5px;
339
+ }
340
+
341
+ .star {
342
+ font-size: 18px;
343
+ color: #FFD700;
344
+ }
345
+
346
+ .star.empty {
347
+ color: #e0e0e0;
348
+ }
349
+
350
+ /* Styles pour les métriques détaillées */
351
+ .metric-detail {
352
+ background: #f8f9fa;
353
+ padding: 10px;
354
+ border-radius: 8px;
355
+ margin-bottom: 10px;
356
+ border-left: 3px solid #1976D2;
357
+ }
358
+
359
+ .metric-question {
360
+ font-size: 12px;
361
+ color: #666;
362
+ margin-top: 5px;
363
+ font-style: italic;
364
+ }
365
+
366
+ /* Styles pour le modal */
367
+ .modal {
368
+ display: none;
369
+ position: fixed;
370
+ top: 0;
371
+ left: 0;
372
+ width: 100%;
373
+ height: 100%;
374
+ background: rgba(0,0,0,0.5);
375
+ z-index: 1000;
376
+ align-items: center;
377
+ justify-content: center;
378
+ }
379
+
380
+ .modal-content {
381
+ background: white;
382
+ border-radius: 15px;
383
+ padding: 30px;
384
+ max-width: 600px;
385
+ width: 90%;
386
+ max-height: 80vh;
387
+ overflow-y: auto;
388
+ box-shadow: 0 10px 40px rgba(0,0,0,0.2);
389
+ }
390
+
391
+ /* Badge pour le review */
392
+ .review-badge {
393
+ display: inline-block;
394
+ padding: 3px 8px;
395
+ border-radius: 12px;
396
+ font-size: 11px;
397
+ font-weight: bold;
398
+ margin-left: 5px;
399
+ }
400
+
401
+ .review-approved {
402
+ background: #E8F5E9;
403
+ color: #2E7D32;
404
+ }
405
+
406
+ .review-revision {
407
+ background: #FFF3E0;
408
+ color: #EF6C00;
409
+ }
410
+
411
+ .review-rejected {
412
+ background: #FFEBEE;
413
+ color: #C62828;
414
+ }
415
+
416
+ /* Styles pour les métriques dans les tableaux */
417
+ .metrics-table-cell {
418
+ max-width: 350px;
419
+ }
420
+
421
+ .compact-metric {
422
+ display: flex;
423
+ align-items: center;
424
+ margin-bottom: 3px;
425
+ font-size: 11px;
426
+ }
427
+
428
+ .compact-metric-name {
429
+ width: 30px;
430
+ font-weight: bold;
431
+ color: #1976D2;
432
+ }
433
+
434
+ .compact-stars {
435
+ display: flex;
436
+ gap: 1px;
437
+ margin: 0 5px;
438
+ }
439
+
440
+ .compact-star {
441
+ font-size: 10px;
442
+ color: #FFD700;
443
+ }
444
+
445
+ .compact-star.empty {
446
+ color: #e0e0e0;
447
+ }
448
+
449
+ .error-message {
450
+ background: #FFEBEE;
451
+ color: #C62828;
452
+ padding: 20px;
453
+ border-radius: 10px;
454
+ margin: 20px 0;
455
+ border-left: 4px solid #C62828;
456
+ }
457
+
458
+ .success-message {
459
+ background: #E8F5E9;
460
+ color: #2E7D32;
461
+ padding: 15px;
462
+ border-radius: 8px;
463
+ margin: 10px 0;
464
+ display: none;
465
+ }
466
+
467
+ .warning-message {
468
+ background: #FFF3E0;
469
+ color: #EF6C00;
470
+ padding: 15px;
471
+ border-radius: 8px;
472
+ margin: 10px 0;
473
+ border-left: 4px solid #EF6C00;
474
+ }
475
+
476
+ .test-data-btn {
477
+ background: linear-gradient(135deg, #4CAF50, #8BC34A);
478
+ color: white;
479
+ border: none;
480
+ padding: 10px 20px;
481
+ border-radius: 8px;
482
+ cursor: pointer;
483
+ font-weight: 600;
484
+ margin: 10px 0;
485
+ text-decoration: none;
486
+ display: inline-block;
487
+ transition: transform 0.3s;
488
+ }
489
+
490
+ .test-data-btn:hover {
491
+ transform: translateY(-2px);
492
+ }
493
+
494
+ @media (max-width: 768px) {
495
+ .container {
496
+ padding: 15px;
497
+ }
498
+
499
+ .filter-controls {
500
+ flex-direction: column;
501
+ align-items: stretch;
502
+ }
503
+
504
+ .filter-controls select, .filter-controls input {
505
+ width: 100%;
506
+ }
507
+
508
+ table {
509
+ display: block;
510
+ overflow-x: auto;
511
+ }
512
+
513
+ .modal-content {
514
+ width: 95%;
515
+ padding: 15px;
516
+ }
517
+
518
+ .metric-detail {
519
+ padding: 8px;
520
+ font-size: 12px;
521
+ }
522
+
523
+ .star {
524
+ font-size: 14px;
525
+ }
526
+ }
527
+ </style>
528
+
529
+ <!-- Chart.js pour les visualisations -->
530
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
531
+ </head>
532
+ <body>
533
+ <div class="container">
534
+ <a href="../index.html" class="back-btn">⬅️ Retour au Dashboard</a>
535
+
536
+ <a href="consensus_building.html" class="btn-consensus">
537
+ Consensus Building
538
+ </a>
539
+
540
+ <style>
541
+ .btn-consensus {
542
+ display: inline-block;
543
+ padding: 14px 32px;
544
+ background: linear-gradient(135deg, #4facfe, #00f2fe);
545
+ color: #ffffff;
546
+ text-decoration: none;
547
+ font-size: 16px;
548
+ font-weight: 600;
549
+ border-radius: 30px;
550
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
551
+ transition: all 0.3s ease;
552
+ }
553
+
554
+ .btn-consensus:hover {
555
+ transform: translateY(-3px);
556
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
557
+ background: linear-gradient(135deg, #00f2fe, #4facfe);
558
+ }
559
+ </style>
560
+
561
+ </a>
562
+
563
+ <header>
564
+ <h1>📊 Analyse Croisée des Évaluations</h1>
565
+ <p class="subtitle">Analyse des niveaux de confiance contradictoires entre les évaluateurs</p>
566
+ </header>
567
+
568
+ <!-- Messages d'information -->
569
+ <div id="successMessage" class="success-message"></div>
570
+ <div id="warningMessage" class="warning-message" style="display:none;">
571
+ <strong>⚠️ Données manquantes</strong>
572
+ <p>Il semble qu'aucune donnée d'évaluation n'ait été trouvée.</p>
573
+ <p>Vous pouvez générer des données de test pour commencer :</p>
574
+ <button onclick="generateTestData()" class="test-data-btn">
575
+ 🧪 Générer des données de test
576
+ </button>
577
+ </div>
578
+
579
+ <!-- Statistiques globales -->
580
+ <div class="stats-grid" id="globalStats">
581
+ <div class="stat-card">
582
+ <div class="stat-label">Total d'évaluations</div>
583
+ <div class="stat-value" id="totalEvaluations">0</div>
584
+ </div>
585
+ <div class="stat-card">
586
+ <div class="stat-label">Scénarios évalués</div>
587
+ <div class="stat-value" id="totalScenarios">0</div>
588
+ </div>
589
+ <div class="stat-card">
590
+ <div class="stat-label">Évaluateurs uniques</div>
591
+ <div class="stat-value" id="totalEvaluators">0</div>
592
+ </div>
593
+ <div class="stat-card">
594
+ <div class="stat-label">Taux de conflit</div>
595
+ <div class="stat-value" id="conflictRate">0%</div>
596
+ </div>
597
+ </div>
598
+
599
+ <!-- Contrôles de filtrage -->
600
+ <div class="section">
601
+ <h2>🔍 Filtres d'analyse</h2>
602
+ <div class="filter-controls">
603
+ <div>
604
+ <label for="scenarioFilter">Filtrer par scénario :</label>
605
+ <select id="scenarioFilter" onchange="filterData()">
606
+ <option value="all">Tous les scénarios</option>
607
+ </select>
608
+ </div>
609
+ <div>
610
+ <label for="confidenceFilter">Filtrer par niveau de conflit :</label>
611
+ <select id="confidenceFilter" onchange="filterData()">
612
+ <option value="all">Tous les niveaux</option>
613
+ <option value="high">Conflit élevé (différence > 40%)</option>
614
+ <option value="medium">Conflit moyen (20-40%)</option>
615
+ <option value="low">Conflit faible (0-20%)</option>
616
+ </select>
617
+ </div>
618
+ <div>
619
+ <label for="sortBy">Trier par :</label>
620
+ <select id="sortBy" onchange="filterData()">
621
+ <option value="scenario">Scénario</option>
622
+ <option value="conflict">Niveau de conflit</option>
623
+ <option value="evaluations">Nombre d'évaluations</option>
624
+ <option value="confidence">Confiance moyenne</option>
625
+ </select>
626
+ </div>
627
+ </div>
628
+ </div>
629
+
630
+ <!-- Tableau des évaluations par scénario -->
631
+ <div class="section">
632
+ <h2>📋 Liste des évaluations par scénario</h2>
633
+ <div id="evaluationsTable">
634
+ <div class="loading">
635
+ <div class="loading-spinner"></div>
636
+ <p>Chargement des données d'évaluation...</p>
637
+ </div>
638
+ </div>
639
+ </div>
640
+
641
+ <!-- Section : Toutes les évaluations détaillées -->
642
+ <div class="section">
643
+ <h2>📝 Toutes les évaluations détaillées</h2>
644
+
645
+ <div class="filter-controls">
646
+ <div>
647
+ <label for="evaluatorFilter">Filtrer par évaluateur :</label>
648
+ <select id="evaluatorFilter" onchange="filterAllEvaluations()">
649
+ <option value="all">Tous les évaluateurs</option>
650
+ </select>
651
+ </div>
652
+ <div>
653
+ <label for="scoreFilter">Filtrer par score :</label>
654
+ <select id="scoreFilter" onchange="filterAllEvaluations()">
655
+ <option value="all">Tous les scores</option>
656
+ <option value="high">Élevé (70-100%)</option>
657
+ <option value="medium">Moyen (40-69%)</option>
658
+ <option value="low">Faible (0-39%)</option>
659
+ </select>
660
+ </div>
661
+ <div>
662
+ <label for="sortEvaluations">Trier par :</label>
663
+ <select id="sortEvaluations" onchange="filterAllEvaluations()">
664
+ <option value="date_desc">Date (récent)</option>
665
+ <option value="date_asc">Date (ancien)</option>
666
+ <option value="score_desc">Score (haut)</option>
667
+ <option value="score_asc">Score (bas)</option>
668
+ <option value="scenario">Scénario</option>
669
+ </select>
670
+ </div>
671
+ </div>
672
+
673
+ <div id="allEvaluationsTable">
674
+ <div class="loading">
675
+ <div class="loading-spinner"></div>
676
+ <p>Chargement des évaluations détaillées...</p>
677
+ </div>
678
+ </div>
679
+ </div>
680
+
681
+ <!-- Graphiques -->
682
+ <div class="section">
683
+ <h2>📈 Visualisations</h2>
684
+ <div class="chart-container">
685
+ <canvas id="confidenceChart"></canvas>
686
+ </div>
687
+ <div class="chart-container">
688
+ <canvas id="conflictChart"></canvas>
689
+ </div>
690
+ </div>
691
+
692
+ <!-- Détails d'un scénario -->
693
+ <div class="scenario-details" id="scenarioDetails">
694
+ <h2>🔍 Détails du scénario <span id="detailScenarioTitle"></span></h2>
695
+ <div id="scenarioContent"></div>
696
+ </div>
697
+
698
+ <!-- Section d'aide -->
699
+ <div class="section" id="helpSection" style="display:none;">
700
+ <h2>🆘 Aide et dépannage</h2>
701
+ <p>Si aucune donnée n'apparaît, essayez :</p>
702
+ <ol>
703
+ <li>Vérifier que le serveur Flask est en cours d'exécution</li>
704
+ <li>Générer des données de test avec le bouton ci-dessous</li>
705
+ <li>Vérifier la console du navigateur pour les erreurs (F12 → Console)</li>
706
+ </ol>
707
+ <button onclick="generateTestData()" class="test-data-btn">
708
+ 🧪 Générer des données de test
709
+ </button>
710
+ <button onclick="location.reload()" class="test-data-btn" style="background:linear-gradient(135deg, #2196F3, #1976D2);margin-left:10px;">
711
+ 🔄 Recharger la page
712
+ </button>
713
+ </div>
714
+ </div>
715
+
716
+ <!-- Modale pour ajouter un review -->
717
+ <div id="reviewModal" class="modal">
718
+ <div class="modal-content">
719
+ <h2 style="color:#1976D2; margin-bottom:20px;">✍️ Ajouter un Review</h2>
720
+
721
+ <div style="margin-bottom:20px; padding:15px; background:#f8f9fa; border-radius:8px;">
722
+ <strong>Évaluateur :</strong> <span id="modalEvaluator"></span><br>
723
+ <strong>Scénario :</strong> <span id="modalScenario"></span><br>
724
+ <strong>Score :</strong> <span id="modalScore"></span>
725
+ </div>
726
+
727
+ <div style="margin-bottom:20px;">
728
+ <label for="reviewDecision" style="display:block; margin-bottom:5px; font-weight:bold;">Décision :</label>
729
+ <select id="reviewDecision" style="width:100%; padding:10px; border:2px solid #1976D2; border-radius:8px;">
730
+ <option value="approved">✅ Approuvé</option>
731
+ <option value="needs_revision">⚠️ Nécessite révision</option>
732
+ <option value="rejected">❌ Rejeté</option>
733
+ </select>
734
+ </div>
735
+
736
+ <div style="margin-bottom:20px;">
737
+ <label for="reviewComment" style="display:block; margin-bottom:5px; font-weight:bold;">Commentaire du review :</label>
738
+ <textarea id="reviewComment" rows="5" style="width:100%; padding:10px; border:2px solid #1976D2; border-radius:8px;"
739
+ placeholder="Ajoutez vos commentaires sur cette évaluation..."></textarea>
740
+ </div>
741
+
742
+ <div style="display:flex; gap:10px; justify-content:flex-end;">
743
+ <button onclick="closeReviewModal()" style="padding:10px 20px; background:#666; color:white; border:none; border-radius:8px; cursor:pointer;">
744
+ Annuler
745
+ </button>
746
+ <button onclick="saveReview()" style="padding:10px 20px; background:#1976D2; color:white; border:none; border-radius:8px; cursor:pointer;">
747
+ 💾 Sauvegarder
748
+ </button>
749
+ </div>
750
+ </div>
751
+ </div>
752
+
753
+ <script src="cross_readers.js"></script>
754
+ </body>
755
+ </html>