diff --git a/frontend/trainer.html b/frontend/trainer.html
index dd9c75b..e420ac2 100644
--- a/frontend/trainer.html
+++ b/frontend/trainer.html
@@ -858,11 +858,12 @@
// Префикс «x =» и подсказка ввода зависят от типа задачи.
function applyInputMode() {
var k = cur && cur.kind;
- var multi = (k === 'roots' || k === 'simplify' || k === 'inequality');
+ var multi = (k === 'roots' || k === 'simplify' || k === 'inequality' || k === 'system');
var eqx = $('tr-eqx'); if (eqx) eqx.style.display = multi ? 'none' : '';
$('tr-input').placeholder = (k === 'roots') ? 'корни через ;'
: (k === 'simplify') ? 'упрощённое выражение'
: (k === 'inequality') ? ('напр. ' + (cur.answerVar || 'x') + ' < 3')
+ : (k === 'system') ? 'напр. x = 2; y = 3'
: 'ответ';
var tog = $('tr-step-toggle'); if (tog) tog.style.display = canStep() ? '' : 'none';
var df = $('tr-difficulty'); if (df) df.style.display = (k === 'word') ? 'none' : '';
@@ -874,9 +875,10 @@
if (cur.kind === 'roots' && cur.answers) return 'Корни: ' + cur.answers.map(fmt).join('; ');
if (cur.kind === 'simplify') return '= ' + (cur.answerExpr ? fmt(cur.answerExpr) : '');
if (cur.kind === 'inequality' && cur.answerRel) return (cur.answerVar || 'x') + ' ' + (REL_SYM[cur.answerRel.op] || cur.answerRel.op) + ' ' + fmt(cur.answerRel.bound);
+ if (cur.kind === 'system' && cur.pair) return (cur.answerVars || ['x', 'y']).map(function (v) { return v + ' = ' + fmt(cur.pair[v]); }).join(', ');
return 'x = ' + fmt(cur.answer);
}
- function isLabelKind() { return cur.kind === 'roots' || cur.kind === 'simplify' || cur.kind === 'inequality'; }
+ function isLabelKind() { return cur.kind === 'roots' || cur.kind === 'simplify' || cur.kind === 'inequality' || cur.kind === 'system'; }
function updateStats() { $('tr-solved').textContent = solved; $('tr-streak').textContent = streak; }
function stepHtml(st, n) {
@@ -1016,7 +1018,10 @@
onSolved();
} else {
streak = 0;
- fb.className = 'tr-feedback bad'; fb.innerHTML = ICON.bad + ' Неверно. Разбери решение и реши похожую.';
+ // репетитор (C1): адресная подсказка по типовой ошибке, не выдавая ответ
+ var diag = TE.analyzeMistake ? TE.analyzeMistake(cur, r.value) : null;
+ var msg = diag ? diag.hint : 'Неверно. Разбери решение и реши похожую.';
+ fb.className = 'tr-feedback bad'; fb.innerHTML = ICON.bad + ' ' + esc(msg);
$('tr-card').classList.add('tr-wrong');
recordAnswer(false); submitAttempt(false);
revealSolution();