# Промпт: проверить готовый квиз перед вставкой в GetCourse Нужен, если квиз не заработал с первого раза или вы правили код сами. Откройте новый чат с нейросетью (лучше другой, не той, что писала квиз). Вставьте текст ниже, а под ним — код HTML-блока и код скрытого текстового блока. --- Проверь код квиза для GetCourse. Он вставляется в урок двумя блоками: скрытый текстовый блок с переменными GetCourse и HTML-блок с квизом. Ответы уходят POST-запросом на ссылку события модуля воронок и записываются в дополнительные поля карточки ученика. Пройди по списку. По каждому пункту ответь «ок» или «ошибка», для ошибки укажи строку и как исправить. В конце пришли исправленный HTML-блок целиком, если были ошибки. 1. **Нет `{слово}` в HTML-блоке.** Ни одного совпадения с регулярным выражением `\{[A-Za-z_][A-Za-z0-9_.]*\}`, включая CSS и регулярные выражения. Нет шаблонных строк с `${…}`. GetCourse подменяет такие места как переменные и ломает скрипт. 2. **E-mail.** Берётся из `document.getElementById('quiz-email').textContent`. Отправка возможна, только если в адресе есть `@` и нет `{`. Поиск повторяется каждые 500 мс до 20 раз. Без e-mail показывается экран «Войдите» со ссылкой `/cms/system/login?required=true&returnUrl=…`. 3. **Отправка:** - метод POST, `Content-Type: application/x-www-form-urlencoded;charset=UTF-8`, `credentials: 'include'`; - первый параметр `email`; - успех — только при `success === true` в JSON-ответе; - тайм-аут около 20 с; - нет запасных «пикселей» (`new Image().src`), которые считают успехом то, что не дошло. 4. **Ссылка события** задана в одном месте (`QUIZ_CFG.eventUrl` или аналог). Если она пустая или это заглушка, данные не отправляются, и ученик видит понятное сообщение. 5. **Имена параметров** в отправке совпадают с именами в коде преобразования и с дополнительными полями: латиница, строчные, через подчёркивание, с одним префиксом. 6. **Поле ответов** (`…_answers`) записывается через `encodeURIComponent(JSON.stringify(…))` и читается обратно через `decodeURIComponent` + `JSON.parse` в `try/catch`. Буквальный шаблон `{object.…}` в span считается пустым значением. 7. **Скрытый текстовый блок:** - на каждое поле два span: `{object.поле}` и запасной `{поле}` с id `…-alt`; - e-mail через `{email}`; - id совпадают с теми, что читает код. 8. **Надёжность:** - копия ответов в `localStorage` до отправки, дослать при следующем открытии; - кнопка «Отправить ещё раз» при ошибке; - кнопка неактивна во время отправки; - черновик незаконченного прохождения не теряется при перезагрузке. 9. **Изоляция:** весь интерфейс внутри Shadow DOM, стили внутри него. Нет внешних скриптов, библиотек и CDN. 10. **Размер:** HTML-блок не длиннее 55 000 знаков. Назови точное число. 11. **Телефон:** ширина 360 px без горизонтальной прокрутки, кнопки не ниже 48 px, текст от 16 px. 12. **Логика квиза:** результат считается так, как описано в комментариях или текстах. Нет вопросов без вариантов, недостижимых результатов и деления на ноль. --- [вставьте сюда код скрытого текстового блока] [вставьте сюда код HTML-блока]