+ {/* 標題區 */}
+
+
+ {t("conversion.uploading.heading")}
+
+
+ {t("conversion.uploading.subtitle")}
+
+
+
+ {/* 檔名 + chip */}
+ {(sourceFilename || targetChip) && (
+
+ {sourceFilename ? (
+
+ {sourceFilename}
+
+ ) : null}
+ {targetChip ? (
+
+ {t("conversion.uploading.target").replace(
+ "{chip}",
+ targetChip,
+ )}
+
+ ) : null}
+
+ )}
+
+ {/* Progress bar */}
+
+
+ {t("conversion.uploading.aria.progress")}
+
+
+ {/*
+ 視覺進度文字 — **不要** aria-live:每 50–250ms 變動一次會打斷 SR。
+ progressbar 的 aria-valuenow 已自帶 a11y,下面 sr-only 區塊負責節流朗讀。
+ */}
+
+
+ {progressText}
+ ·
+ {`${Math.round(pct)}%`}
+
+ {etaText}
+
+
+ {/*
+ sr-only 朗讀區(review M2):每 5 秒最多朗讀一次;aria-atomic="true"
+ 確保 SR 朗讀整段而不是 diff。視覺使用者看不到。
+ */}
+
+ {accessibleStatus}
+
+
+
+ {/* 取消按鈕 */}
+
+
+
+
+ {/* 提示:上傳完後會接 processing */}
+
+ {t("conversion.uploading.info")}
+
+
+ {/* 警告:beforeunload 同時有 inline 警示,加強可見性 */}
+
+ {t("conversion.uploading.warning")}
+
+
+ {/* 取消確認 dialog */}
+
+
+
+
+ {t("conversion.uploading.cancel.confirm.title")}
+
+
+ {t("conversion.uploading.cancel.confirm.message")}
+
+
+
+
+ {t("conversion.uploading.cancel.confirm.no")}
+
+
+ {t("conversion.uploading.cancel.confirm.yes")}
+
+
+
+
+
+ );
+}
diff --git a/visionA-frontend/src/app/conversion/e2e-conversion-flow.test.tsx b/visionA-frontend/src/app/conversion/e2e-conversion-flow.test.tsx
new file mode 100644
index 0000000..a6e28b1
--- /dev/null
+++ b/visionA-frontend/src/app/conversion/e2e-conversion-flow.test.tsx
@@ -0,0 +1,615 @@
+/**
+ * E2E flow 整合測試(Phase 0.8 — F-T10)
+ *
+ * 對齊:
+ * - PRD:`.autoflow/02-prd/features/feature-converter-integration.md` §9 驗收條件
+ * - Flow:`.autoflow/03-design/flows/flow-conversion.md` state machine + §6 邊界
+ * - Wireframe:`.autoflow/03-design/wireframes/wireframe-conversion.md`
+ *
+ * 範圍:
+ * 這次 **不是** unit test 也不是 component test,而是「跨元件 + 跨 store + 跨 API client mock 的
+ * flow test」。從 `