fix: resolve OCR track converter data structure mismatch
**Problem**: OCR track was producing empty output files (0 pages, 0 elements)
despite successful OCR extraction (27 text regions detected).
**Root Causes**:
1. Converter expected `text_regions` inside `layout_data`, but
`process_file_traditional` returns it at top level
2. Converter expected `ocr_dimensions` to be a list, but single-page
documents return it as dict `{'width': W, 'height': H}`
**Solution**:
- Add `_extract_from_traditional_ocr()` method to handle top-level
`text_regions` structure from `process_file_traditional`
- Handle both dict (single-page) and list (multi-page) formats for
`ocr_dimensions`
- Update `_extract_pages()` to check for `text_regions` key before
`layout_data` key
**Verification**:
- Before: img1.png → 0 pages, 0 elements, 0 characters
- After: img1.png → 1 page, 27 elements, 278 characters
- Output files now properly generated (JSON: 13KB, MD: 498B, PDF: 23KB)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>