diff --git "a/rapport_demo.html" "b/rapport_demo.html"
--- "a/rapport_demo.html"
+++ "b/rapport_demo.html"
@@ -342,6 +342,42 @@ tbody tr:hover { background: #f8fafc; }
}
.chart-canvas-wrap { position: relative; height: 280px; }
+/* ── Pipeline badges ──────────────────────────────────────────────── */
+.pipeline-tag {
+ display: inline-flex; align-items: center; gap: .25rem;
+ padding: .12rem .38rem;
+ border-radius: 4px; font-size: .67rem; font-weight: 700;
+ background: #ede9fe; color: #6d28d9;
+ letter-spacing: .02em; vertical-align: middle;
+}
+.pipeline-tag .pipe-arrow { opacity: .7; }
+.over-norm-badge {
+ display: inline-block; padding: .12rem .38rem;
+ border-radius: 4px; font-size: .67rem; font-weight: 700;
+ background: #fef3c7; color: #b45309;
+}
+.over-norm-badge.high { background: #fee2e2; color: #b91c1c; }
+/* Vue triple-diff (pipeline) */
+.triple-diff-wrap {
+ display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
+ margin-top: .5rem;
+}
+.triple-diff-section { background: var(--bg); border-radius: 6px; padding: .5rem; }
+.triple-diff-section h5 {
+ font-size: .73rem; font-weight: 700; color: var(--text-muted);
+ margin-bottom: .35rem; text-transform: uppercase; letter-spacing: .04em;
+}
+.pipeline-steps {
+ display: flex; align-items: center; gap: .3rem; flex-wrap: wrap;
+ margin-top: .25rem;
+}
+.step-chip {
+ padding: .12rem .4rem; border-radius: 4px; font-size: .68rem; font-weight: 600;
+}
+.step-chip.ocr { background: #e0f2fe; color: #0369a1; }
+.step-chip.llm { background: #ede9fe; color: #6d28d9; }
+.step-arrow { color: var(--text-muted); font-size: .8rem; }
+
/* ── Misc ─────────────────────────────────────────────────────────── */
.badge {
display: inline-block; padding: .15rem .45rem;
@@ -410,7 +446,7 @@ footer {
@@ -576,7 +613,7 @@ footer {
@@ -666,11 +703,41 @@ function renderRanking() {
const badgeClass = rank === 1 ? 'rank-badge rank-1' : 'rank-badge';
const cerC = cerColor(e.cer); const cerB = cerBg(e.cer);
const barW = Math.min(100, e.cer * 100 * 3);
+
+ // Badge pipeline
+ let pipelineBadge = '';
+ let pipelineStepsHtml = '';
+ if (e.is_pipeline && e.pipeline_info) {
+ const pi = e.pipeline_info;
+ const modeLabel = {text_only:'texte', text_and_image:'image+texte', zero_shot:'zero-shot'}[pi.pipeline_mode] || pi.pipeline_mode || '';
+ pipelineBadge = `
+ ⛓ pipeline·${modeLabel}`;
+ if (pi.pipeline_steps) {
+ pipelineStepsHtml = `#↑
- Moteur↕
+ Concurrent↕
CER↕
WER↕
MER↕
@@ -418,6 +454,7 @@ footer {
CER médian
CER min
CER max
+ Sur-norm.
Docs