+
+
+
+
+
+
+
+
+
+
+
+
+ {t.analysis.modeTitle}
+
+ {t.analysis.modeDescription}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {t.analysis.step} {currentIndex} / {steps.length}
+
+
+
+
+
+
+
+
+
+ {currentIndex === 0 ? (
+ {t.analysis.title}
+ {openingInfo && ( + + {t.analysis.opening}: {openingInfo.name} ({openingInfo.eco}) + + )} +{t.analysis.currentPosition}
+ ) : ( +
+
+ )}
+
+
+
+
+
+ {t.analysis.step} {currentIndex}
+ {steps[currentIndex - 1]?.san}
+
+
+ {t.analysis.evaluation}
+ {formatEval(currentDetails?.evalAfter)}
+
+
+ {t.analysis.cpLoss}
+ {formatCpLoss(currentDetails?.cpLoss)}
+
+
+ {t.analysis.bestMove}
+ {currentDetails?.bestMoveSan || t.analysis.enginePending}
+
+
+ {t.analysis.missedTactics}
+ {tacticSummary.length === 0 && (
+ {t.analysis.none}
+ )} + {tacticSummary.length > 0 && ( +-
+ {tacticSummary.map((tactic, idx) => (
+
- + {tactic.tactic_type} + {tactic.material_delta ? ` (~${(tactic.material_delta / 100).toFixed(1)} pawns)` : ""} + {tactic.affected_squares ? ` on ${tactic.affected_squares.join(", ")}` : ""} + + ))} +
+
+ {t.analysis.aiAnalysis}
+ {!apiKey && ( +Please add an API key in settings to receive commentary.
+ )} + {currentIndex === 0 && ( +{t.analysis.currentPosition}
+ )} + {currentIndex > 0 && ( +
+ {isCommenting && (
+
+ )}
+
+
+ {t.analysis.coachPending}
+
+ )}
+ {!isCommenting && comments[currentIndex] && (
+
+ {comments[currentIndex]}
+
+ )}
+ {!isCommenting && !comments[currentIndex] && (
+ {t.analysis.coachPending}
+ )} +