diff --git a/frontend/js/phys9_legacy.js b/frontend/js/phys9_legacy.js
index 7e3dfdd..4fe44c0 100644
--- a/frontend/js/phys9_legacy.js
+++ b/frontend/js/phys9_legacy.js
@@ -5947,4 +5947,6 @@ try { if (typeof TASKS_P33 !== "undefined") window.TASKS_P33 = TASKS_P33; } catc
try { if (typeof TASKS_P34 !== "undefined") window.TASKS_P34 = TASKS_P34; } catch(e) {}
try { if (typeof TASKS_P35 !== "undefined") window.TASKS_P35 = TASKS_P35; } catch(e) {}
try { if (typeof TASKS_P36 !== "undefined") window.TASKS_P36 = TASKS_P36; } catch(e) {}
+try { if (typeof POOLS !== "undefined") window.POOLS = POOLS; } catch(e) {}
+try { if (typeof STATE !== "undefined") window.STATE = STATE; } catch(e) {}
})();
diff --git a/frontend/textbooks/physics_9_ch1.html b/frontend/textbooks/physics_9_ch1.html
index 007ab82..07da14a 100644
--- a/frontend/textbooks/physics_9_ch1.html
+++ b/frontend/textbooks/physics_9_ch1.html
@@ -778,6 +778,35 @@ function buildParaSelector(){
const BUILT=new Set();
const BUILDERS = { p1:()=>build_p1(), p2:()=>build_p2(), p3:()=>build_p3(), p4:()=>build_p4(), p5:()=>build_p5(), p6:()=>build_p6(), p7:()=>build_p7(), p8:()=>build_p8(), p9:()=>build_p9(), p10:()=>build_p10(), p11:()=>build_p11(), p12:()=>build_p12(), p13:()=>build_p13(), p14:()=>build_p14(), final1:()=>build_final1() };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
+
+function _makeTaskBlock(sec){
+ return ''
+ + '
'
+ + '
'
+ + '
Задачи параграфа
'
+ + '
0 верно
'
+ + '
0/?
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+}
+function _injectTasks(id){
+ if(!id || !id.startsWith('p')) return;
+ if(!window.POOLS || !window.POOLS[id]) return;
+ var body = document.getElementById(id + '-body');
+ if(!body || body.querySelector('.legacy-tasks')) return;
+ body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
+ setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} }, 60);
+}
+var _origEnsureBuilt = ensureBuilt;
+ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
+
function goTo(id){
STATE.current=id; ensureBuilt(id);
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));
diff --git a/frontend/textbooks/physics_9_ch2.html b/frontend/textbooks/physics_9_ch2.html
index c69bdd0..0f74a75 100644
--- a/frontend/textbooks/physics_9_ch2.html
+++ b/frontend/textbooks/physics_9_ch2.html
@@ -762,6 +762,35 @@ function buildParaSelector(){
const BUILT=new Set();
const BUILDERS = { p15:()=>build_p15(), p16:()=>build_p16(), p17:()=>build_p17(), p18:()=>build_p18(), p19:()=>build_p19(), p20:()=>build_p20(), p21:()=>build_p21(), p22:()=>build_p22(), p23:()=>build_p23(), p24:()=>build_p24(), final2:()=>build_final2() };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
+
+function _makeTaskBlock(sec){
+ return ''
+ + ''
+ + '
'
+ + '
Задачи параграфа
'
+ + '
0 верно
'
+ + '
0/?
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+}
+function _injectTasks(id){
+ if(!id || !id.startsWith('p')) return;
+ if(!window.POOLS || !window.POOLS[id]) return;
+ var body = document.getElementById(id + '-body');
+ if(!body || body.querySelector('.legacy-tasks')) return;
+ body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
+ setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} }, 60);
+}
+var _origEnsureBuilt = ensureBuilt;
+ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
+
function goTo(id){
STATE.current=id; ensureBuilt(id);
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));
diff --git a/frontend/textbooks/physics_9_ch3.html b/frontend/textbooks/physics_9_ch3.html
index 257fc6b..85735aa 100644
--- a/frontend/textbooks/physics_9_ch3.html
+++ b/frontend/textbooks/physics_9_ch3.html
@@ -746,6 +746,35 @@ function buildParaSelector(){
const BUILT=new Set();
const BUILDERS = { p25:()=>build_p25(), p26:()=>build_p26(), p27:()=>build_p27(), p28:()=>build_p28(), p29:()=>build_p29(), p30:()=>build_p30(), final3:()=>build_final3() };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
+
+function _makeTaskBlock(sec){
+ return ''
+ + ''
+ + '
'
+ + '
Задачи параграфа
'
+ + '
0 верно
'
+ + '
0/?
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+}
+function _injectTasks(id){
+ if(!id || !id.startsWith('p')) return;
+ if(!window.POOLS || !window.POOLS[id]) return;
+ var body = document.getElementById(id + '-body');
+ if(!body || body.querySelector('.legacy-tasks')) return;
+ body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
+ setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} }, 60);
+}
+var _origEnsureBuilt = ensureBuilt;
+ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
+
function goTo(id){
STATE.current=id; ensureBuilt(id);
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));
diff --git a/frontend/textbooks/physics_9_ch4.html b/frontend/textbooks/physics_9_ch4.html
index 74bd9ca..33cd6ec 100644
--- a/frontend/textbooks/physics_9_ch4.html
+++ b/frontend/textbooks/physics_9_ch4.html
@@ -746,6 +746,35 @@ function buildParaSelector(){
const BUILT=new Set();
const BUILDERS = { p31:()=>build_p31(), p32:()=>build_p32(), p33:()=>build_p33(), p34:()=>build_p34(), p35:()=>build_p35(), p36:()=>build_p36(), final4:()=>build_final4() };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
+
+function _makeTaskBlock(sec){
+ return ''
+ + ''
+ + '
'
+ + '
Задачи параграфа
'
+ + '
0 верно
'
+ + '
0/?
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+}
+function _injectTasks(id){
+ if(!id || !id.startsWith('p')) return;
+ if(!window.POOLS || !window.POOLS[id]) return;
+ var body = document.getElementById(id + '-body');
+ if(!body || body.querySelector('.legacy-tasks')) return;
+ body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
+ setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} }, 60);
+}
+var _origEnsureBuilt = ensureBuilt;
+ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
+
function goTo(id){
STATE.current=id; ensureBuilt(id);
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));
diff --git a/frontend/textbooks/physics_9_ch5.html b/frontend/textbooks/physics_9_ch5.html
index 5ad88af..1a29fe3 100644
--- a/frontend/textbooks/physics_9_ch5.html
+++ b/frontend/textbooks/physics_9_ch5.html
@@ -770,6 +770,35 @@ function buildParaSelector(){
const BUILT=new Set();
const BUILDERS = { lr1:()=>build_lr1(), lr2:()=>build_lr2(), lr3:()=>build_lr3(), lr4:()=>build_lr4(), lr5:()=>build_lr5(), lr6:()=>build_lr6(), lr7:()=>build_lr7(), lr8:()=>build_lr8(), lr9:()=>build_lr9(), lr10:()=>build_lr10(), lr11:()=>build_lr11(), lr12:()=>build_lr12(), final5:()=>build_final5() };
function ensureBuilt(id){ if(BUILT.has(id)) return; const fn=BUILDERS[id]; if(fn){ fn(); BUILT.add(id); } }
+
+function _makeTaskBlock(sec){
+ return ''
+ + ''
+ + '
'
+ + '
Задачи параграфа
'
+ + '
0 верно
'
+ + '
0/?
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
'
+ + '
';
+}
+function _injectTasks(id){
+ if(!id || !id.startsWith('p')) return;
+ if(!window.POOLS || !window.POOLS[id]) return;
+ var body = document.getElementById(id + '-body');
+ if(!body || body.querySelector('.legacy-tasks')) return;
+ body.insertAdjacentHTML('beforeend', _makeTaskBlock(id));
+ setTimeout(function(){ try { if(window.renderTask) window.renderTask(id); if(window.renderNav) window.renderNav(id); } catch(e){} }, 60);
+}
+var _origEnsureBuilt = ensureBuilt;
+ensureBuilt = function(id){ _origEnsureBuilt(id); _injectTasks(id); };
+
function goTo(id){
STATE.current=id; ensureBuilt(id);
document.querySelectorAll('.sec').forEach(s=>s.classList.remove('active'));