66166f6294
Раньше: алгебра 1 и 2 главы хранили прогресс только в localStorage, поэтому каталог /textbooks показывал 0/N прочитано и кнопку 'Открыть' даже после активной работы с учебником. Теперь обе главы шлют POST /api/textbooks/:slug/progress: - markLastPara(id) — при каждом goTo(); сервер запоминает last_para, каталог показывает кнопку 'Продолжить'. - markParaRead(id) — когда STATE.progress[key] первый раз ≥ 50% (внутрипараграфный прогресс достаточен); сервер добавляет id в paragraphs_read[], каталог показывает '1/7 прочитано'. - Дебаунс 600мс — несколько быстрых переходов схлопываются в один POST. - keepalive:true + beforeunload-flush, чтобы последний переход не потерялся при закрытии вкладки. - loadServerReadState() при init() — если на другом устройстве уже прочитаны параграфы, локальный STATE.progress поднимается до 100% для них (визуально совпадает с каталогом). Slug: 'algebra-8' для ch1, 'algebra-8-ch2' для ch2.