` до его закрытия.
- `transform_container` — **сначала вырезает `
]*>.*?
`** (заголовки разделов). Это критично: без этого блоки с `
`-заголовком (раздел «Правовая подготовка» и «Огневая подготовка») давали 0 карточек, вопросы терялись целиком. Убирание заголовков заставляет обрабатывать каждый `` единообразно (как в блоках без заголовка).
- `_scan(inner)` — токенизация текста/тегов; каждый `N. `-ответ → `cur["a"]`; ``-цифра → `cur["c"]` (правильный); strong без номера при пустых ответах → мержится в текущий вопрос.
- `_btn(num, text, correct)` — инлайн `onclick`, красящий красный/зелёный.
## Pitfalls
1. **Блоки с ``-заголовком**: если не вырезать `
.../p>` первым шагом, такие блоки дают 0 карточек (вопросы теряются). Симптом: в собранном файле `cards` вдвое меньше (~86 вместо ~180).
2. **Скрытие номера**: не выводить `` в разметку — только `data-correct` на кнопке.
3. **`grep -c` по однострочному HTML** вернёт 1 (файл — одна гигантская строка), даже если совпадений сотни. Считать через `python` (`s.count(...)`), не через grep.
4. **Файл после генерации большой** (~894 КБ): на каждую кнопку инлайн-`onclick` — приемлемо для статики.
5. Node парсеры/`node --max-old-space-size` тут НЕ нужны — на больших минифицированных Tilda-файлах node легко падает в OOM (heap limit) при самопальных токенизаторах. Python + `str.find`/`regex` надёжнее и не жрёт память.
## Деплой в Eagle Dashboard Pages
- Механика + права — в `personal/projects/personal-os/eagle-dashboard.md` (секция «Как добавить страницу в Pages»).
- Скопировать `bilety.html` в `/Library/WebServer/Documents/` (root-owned, нужен sudo) → страница подхватывается живьём, рестарт дашборда не нужен.