diff --git a/frontend/dashboard.html b/frontend/dashboard.html
index b38d109..ea3ec54 100644
--- a/frontend/dashboard.html
+++ b/frontend/dashboard.html
@@ -3261,6 +3261,41 @@
document.getElementById('hc-lab-meta').textContent = 'Освой: ' + lab.goal;
}
+ /* ══ HERO: Pet (synced with /pet module via /api/pet + PetSprite) ═ */
+ async function loadPetHero() {
+ const card = document.getElementById('hc-pet');
+ if (!card) return;
+ let d;
+ try { d = await LS.api('/api/pet'); }
+ catch { card.style.display = 'none'; return; } // фича питомца выключена
+ if (!d) { card.style.display = 'none'; return; }
+
+ // Sprite — единый рендер из pet-sprite.js (как на /pet)
+ const art = document.getElementById('hc-pet-art');
+ if (art && window.PetSprite) {
+ art.innerHTML = PetSprite.render(d.petLevel || 1, d.mood || 'neutral', d.accessories || [], d.petColor || 'purple', d.streakCurrent || 0);
+ }
+ document.getElementById('hc-pet-name').textContent = d.petName || 'Квантик';
+ document.getElementById('hc-pet-lvl').textContent = d.petLevel || 1;
+
+ // XP до следующего уровня питомца
+ const cur = d.xpForCurrLevel || 0;
+ const next = d.xpForNextLevel; // null = макс
+ const have = Math.max(0, (d.xp || 0) - cur);
+ const need = next != null ? Math.max(1, next - cur) : have;
+ const pct = next != null ? Math.min(100, Math.round(have / need * 100)) : 100;
+ document.getElementById('hc-pet-xp').textContent = have;
+ document.getElementById('hc-pet-xpmax').textContent = next != null ? need : '—';
+ document.getElementById('hc-pet-prog').style.width = pct + '%';
+
+ // Стрик / цель дня / настроение
+ document.getElementById('hc-pet-streak').textContent = d.streakCurrent || 0;
+ const quests = d.quests || [];
+ const doneCnt = quests.filter(q => q.done).length;
+ document.getElementById('hc-pet-goal').textContent = quests.length ? `${doneCnt}/${quests.length}` : '—';
+ document.getElementById('hc-pet-mood').textContent = window.PetSprite ? PetSprite.moodLabel(d.mood) : (d.mood || 'бодр');
+ }
+
/* ══ ACTIVITY: data structure ══════════════════════════════════════ */
let _activityRows = []; // raw history rows
let _hmScale = 12; // weeks to show